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>