[BACK]Return to t-constr.cc CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / gmp / tests / cxx

Annotation of OpenXM_contrib/gmp/tests/cxx/t-constr.cc, Revision 1.1

1.1     ! ohara       1: /* Test mp*_class constructors.
        !             2:
        !             3: Copyright 2001 Free Software Foundation, Inc.
        !             4:
        !             5: This file is part of the GNU MP Library.
        !             6:
        !             7: The GNU MP Library is free software; you can redistribute it and/or modify
        !             8: it under the terms of the GNU Lesser General Public License as published by
        !             9: the Free Software Foundation; either version 2.1 of the License, or (at your
        !            10: option) any later version.
        !            11:
        !            12: The GNU MP Library is distributed in the hope that it will be useful, but
        !            13: WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
        !            14: or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
        !            15: License for more details.
        !            16:
        !            17: You should have received a copy of the GNU Lesser General Public License
        !            18: along with the GNU MP Library; see the file COPYING.LIB.  If not, write to
        !            19: the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
        !            20: MA 02111-1307, USA. */
        !            21:
        !            22: #include <iostream>
        !            23: #include <strstream>
        !            24: #include <string>
        !            25: #include <cstdlib>
        !            26: #include "gmp.h"
        !            27: #include "gmp-impl.h"
        !            28: #include "gmpxx.h"
        !            29: #include "tests.h"
        !            30:
        !            31: using namespace std;
        !            32:
        !            33:
        !            34: #define CHECK_MPZ(args, want)                                          \
        !            35:   do {                                                                 \
        !            36:     mpz_set_str (ref, want, 0);                                        \
        !            37:     if (mpz_cmp (z.get_mpz_t(), ref) != 0)                             \
        !            38:       {                                                                \
        !            39:         cout << "mpz_class constructor wrong, args: " << args << "\n"; \
        !            40:         cout << "  want:  " << ref << "\n";                            \
        !            41:         cout << "  got:   " << z.get_mpz_t() << "\n";                  \
        !            42:         abort ();                                                      \
        !            43:       }                                                                \
        !            44:   } while (0)
        !            45:
        !            46: #define CHECK_MPQ(args, want)                                          \
        !            47:   do {                                                                 \
        !            48:     mpq_set_str (ref, want, 0);                                        \
        !            49:     if (mpq_cmp (q.get_mpq_t(), ref) != 0)                             \
        !            50:       {                                                                \
        !            51:         cout << "mpq_class constructor wrong, args: " << args << "\n"; \
        !            52:         cout << "  want:  " << ref << "\n";                            \
        !            53:         cout << "  got:   " << q.get_mpq_t() << "\n";                  \
        !            54:         abort ();                                                      \
        !            55:       }                                                                \
        !            56:   } while (0)
        !            57:
        !            58: #define CHECK_MPF(args, want)                                          \
        !            59:   do {                                                                 \
        !            60:     mpf_set_str (ref, want, 10);                                       \
        !            61:     if (mpf_cmp (f.get_mpf_t(), ref) != 0)                             \
        !            62:       {                                                                \
        !            63:         cout << "mpf_class constructor wrong, args: " << args << "\n"; \
        !            64:         cout << "  want:  " << ref << "\n";                            \
        !            65:         cout << "  got:   " << f.get_mpf_t() << "\n";                  \
        !            66:         abort ();                                                      \
        !            67:       }                                                                \
        !            68:   } while (0)
        !            69:
        !            70: void
        !            71: check_mpz (void)
        !            72: {
        !            73:   mpz_t ref;
        !            74:   mpz_init (ref);
        !            75:
        !            76:   { // no arguments
        !            77:     mpz_class z;
        !            78:     CHECK_MPZ ("none", "0");
        !            79:   }
        !            80:
        !            81:   { // argument: mpz_class
        !            82:     mpz_class w;
        !            83:     mpz_class z (w);
        !            84:     CHECK_MPZ ("w [mpz_class]", "0");
        !            85:   }
        !            86:
        !            87:   { // argument: int
        !            88:     mpz_class z (0);
        !            89:     CHECK_MPZ ("0", "0");
        !            90:   }
        !            91:
        !            92:   { // argument: bool
        !            93:     mpz_class z (true);
        !            94:     CHECK_MPZ ("true", "1");
        !            95:   }
        !            96:
        !            97:   { // argument: unsigned short
        !            98:     mpz_class z ((unsigned short) 1);
        !            99:     CHECK_MPZ ("(unsigned short) 1", "1");
        !           100:   }
        !           101:
        !           102:   { // argument: long
        !           103:     mpz_class z (-1234567890L);
        !           104:     CHECK_MPZ ("-1234567890L", "-1234567890");
        !           105:   }
        !           106:
        !           107:   { // argument: double
        !           108:     mpz_class z (3.141592653589793238);
        !           109:     CHECK_MPZ ("3.141592653589793238", "3");
        !           110:   }
        !           111:
        !           112:   { // argument: char *
        !           113:     mpz_class z ("12345678901234567890");
        !           114:     CHECK_MPZ ("\"12345678901234567890\"", "12345678901234567890");
        !           115:   }
        !           116:
        !           117:   { // arguments: char *, int
        !           118:     mpz_class z ("FFFF", 16);
        !           119:     CHECK_MPZ ("\"FFFF\", 16", "65535");
        !           120:   }
        !           121:
        !           122:   { // argument: string
        !           123:     mpz_class z (string ("1234567890"));
        !           124:     CHECK_MPZ ("string (\"1234567890\")", "1234567890");
        !           125:   }
        !           126:
        !           127:   { // arguments: string, int
        !           128:     mpz_class z (string ("7777"), 8);
        !           129:     CHECK_MPZ ("string (\"7777\", 8)", "4095");
        !           130:   }
        !           131:
        !           132:   { // argument: mpz_t
        !           133:     mpz_class z (ref);
        !           134:     CHECK_MPZ ("ref [mpz_t]", "4095");
        !           135:   }
        !           136:
        !           137:   mpz_clear (ref);
        !           138: }
        !           139:
        !           140: void
        !           141: check_mpq (void)
        !           142: {
        !           143:   mpq_t ref;
        !           144:   mpq_init (ref);
        !           145:
        !           146:   { // no arguments
        !           147:     mpq_class q;
        !           148:     CHECK_MPQ ("none", "0");
        !           149:   }
        !           150:
        !           151:   { // argument: mpq_class
        !           152:     mpq_class r;
        !           153:     mpq_class q (r);
        !           154:     CHECK_MPQ ("r [mpq_class]", "0");
        !           155:   }
        !           156:
        !           157:   { // argument: int
        !           158:     mpq_class q (0);
        !           159:     CHECK_MPQ ("0", "0");
        !           160:   }
        !           161:
        !           162:   { // argument: bool
        !           163:     mpq_class q (true);
        !           164:     CHECK_MPQ ("true", "1");
        !           165:   }
        !           166:
        !           167:   { // argument: unsigned short
        !           168:     mpq_class q ((unsigned short) 1);
        !           169:     CHECK_MPQ ("(unsigned short) 1", "1");
        !           170:   }
        !           171:
        !           172:   { // argument: long
        !           173:     mpq_class q (-1234567890L);
        !           174:     CHECK_MPQ ("-1234567890L", "-1234567890");
        !           175:   }
        !           176:
        !           177:   { // argument: double
        !           178:     mpq_class q (1.25);
        !           179:     CHECK_MPQ ("1.25", "5/4");
        !           180:   }
        !           181:
        !           182:   { // argument: char *
        !           183:     mpq_class q ("12345678901234567890");
        !           184:     CHECK_MPQ ("\"12345678901234567890\"", "12345678901234567890");
        !           185:   }
        !           186:
        !           187:   { // arguments: char *, int
        !           188:     mpq_class q ("FFFF", 16);
        !           189:     CHECK_MPQ ("\"FFFF\", 16", "65535");
        !           190:   }
        !           191:
        !           192:   { // argument: string
        !           193:     mpq_class q (string ("1234567890"));
        !           194:     CHECK_MPQ ("string (\"1234567890\")", "1234567890");
        !           195:   }
        !           196:
        !           197:   { // arguments: string, int
        !           198:     mpq_class q (string ("7777"), 8);
        !           199:     CHECK_MPQ ("string (\"7777\", 8)", "4095");
        !           200:   }
        !           201:
        !           202:   { // argument: mpz_t
        !           203:     mpq_class q (ref);
        !           204:     CHECK_MPQ ("ref [mpq_t]", "4095");
        !           205:   }
        !           206:
        !           207:   { // arguments: int, int
        !           208:     mpq_class q (1, 2);
        !           209:     CHECK_MPQ ("1, 2", "1/2");
        !           210:   }
        !           211:
        !           212:   { // arguments: mpz_class, mpz_class
        !           213:     mpz_class z (3), w (4);
        !           214:     mpq_class q (z, w);
        !           215:     CHECK_MPQ ("z, w [mpz_class, mpz_class]", "3/4");
        !           216:   }
        !           217:
        !           218:   { // arguments: int, mpz_class
        !           219:     mpz_class z (5);
        !           220:     mpq_class q (6, z);
        !           221:     CHECK_MPQ ("11, z [mpz_class]", "6/5");
        !           222:   }
        !           223:
        !           224:   mpq_clear (ref);
        !           225: }
        !           226:
        !           227: void
        !           228: check_mpf (void)
        !           229: {
        !           230:   mpf_t ref;
        !           231:   mpf_init (ref);
        !           232:
        !           233:   { // no arguments
        !           234:     mpf_class f;
        !           235:     CHECK_MPF ("none", "0.0");
        !           236:   }
        !           237:
        !           238:   { // argument: mpf_class
        !           239:     mpf_class g;
        !           240:     mpf_class f (g);
        !           241:     CHECK_MPF ("g [mpf_class]", "0.0");
        !           242:   }
        !           243:
        !           244:   { // argument: int
        !           245:     mpf_class f (0);
        !           246:     CHECK_MPF ("0", "0.0");
        !           247:   }
        !           248:
        !           249:   { // argument: bool
        !           250:     mpf_class f (true);
        !           251:     CHECK_MPF ("true", "1.0");
        !           252:   }
        !           253:
        !           254:   { // argument: unsigned short
        !           255:     mpf_class f ((unsigned short) 1);
        !           256:     CHECK_MPF ("(unsigned short) 1", "1.0");
        !           257:   }
        !           258:
        !           259:   { // argument: long
        !           260:     mpf_class f (-1234567890L);
        !           261:     CHECK_MPF ("-1234567890L", "-1234567890.0");
        !           262:   }
        !           263:
        !           264:   { // argument: double
        !           265:     mpf_class f (3.125e+4);
        !           266:     CHECK_MPF ("3.125e+4", "31250.0");
        !           267:   }
        !           268:
        !           269:   { // argument: char *
        !           270:     mpf_class f ("12345678901234567890");
        !           271:     CHECK_MPF ("\"12345678901234567890\"", "12345678901234567890.0");
        !           272:   }
        !           273:
        !           274:   { // argument: string
        !           275:     mpf_class f (string ("1234567890"));
        !           276:     CHECK_MPF ("string (\"1234567890\")", "1234567890.0");
        !           277:   }
        !           278:
        !           279:   { // argument: mpf_t
        !           280:     mpf_class f (ref);
        !           281:     CHECK_MPF ("ref [mpf_t]", "1234567890.0");
        !           282:   }
        !           283:
        !           284:   { // arguments: mpf_class, int
        !           285:     mpf_class g;
        !           286:     mpf_class f (g, 64);
        !           287:     CHECK_MPF ("g [mpf_class], 64", "0.0");
        !           288:   }
        !           289:
        !           290:   { // arguments: int, int
        !           291:     mpf_class f (0, 128);
        !           292:     CHECK_MPF ("0, 128", "0.0");
        !           293:   }
        !           294:
        !           295:   { // arguments: bool, int
        !           296:     mpf_class f (true, 192);
        !           297:     CHECK_MPF ("true, 192", "1.0");
        !           298:   }
        !           299:
        !           300:   { // arguments: unsigned short, int
        !           301:     mpf_class f ((unsigned short) 1, 256);
        !           302:     CHECK_MPF ("(unsigned short) 1, 256", "1.0");
        !           303:   }
        !           304:
        !           305:   { // arguments: long, unsigned
        !           306:     mpf_class f (-1234567890L, 64u);
        !           307:     CHECK_MPF ("-1234567890L, 64u", "-1234567890.0");
        !           308:   }
        !           309:
        !           310:   { // argument: double, unsigned
        !           311:     mpf_class f (3.125e+4, 128u);
        !           312:     CHECK_MPF ("3.125e+4, 128u", "31250.0");
        !           313:   }
        !           314:
        !           315:   { // argument: char *, unsigned
        !           316:     mpf_class f ("12345678901234567890", 192u);
        !           317:     CHECK_MPF ("\"12345678901234567890\", 192u", "12345678901234567890.0");
        !           318:   }
        !           319:
        !           320:   { // argument: string, unsigned
        !           321:     mpf_class f (string ("1234567890", 256u));
        !           322:     CHECK_MPF ("string (\"1234567890\", 256u)", "1234567890.0");
        !           323:   }
        !           324:
        !           325:   { // argument: mpf_t, long
        !           326:     mpf_class f (ref, 64L);
        !           327:     CHECK_MPF ("ref [mpf_t], 64L", "1234567890.0");
        !           328:   }
        !           329:
        !           330:   mpf_clear (ref);
        !           331: }
        !           332:
        !           333:
        !           334: int
        !           335: main (int argc, char *argv[])
        !           336: {
        !           337:   tests_start ();
        !           338:
        !           339:   check_mpz ();
        !           340:   check_mpq ();
        !           341:   check_mpf ();
        !           342:
        !           343:   tests_end ();
        !           344:   exit (0);
        !           345: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>