Annotation of OpenXM_contrib/gmp/tests/cxx/t-constr.cc, Revision 1.1.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>