blob: 8d087fbf7ce28f596a5985b5185e21950a2228f5 [file] [log] [blame]
Austin Schuhdace2a62020-08-18 10:56:48 -07001/* Test mp*_class ternary expressions.
2
3Copyright 2001-2003 Free Software Foundation, Inc.
4
5This file is part of the GNU MP Library test suite.
6
7The GNU MP Library test suite is free software; you can redistribute it
8and/or modify it under the terms of the GNU General Public License as
9published by the Free Software Foundation; either version 3 of the License,
10or (at your option) any later version.
11
12The GNU MP Library test suite is distributed in the hope that it will be
13useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
15Public License for more details.
16
17You should have received a copy of the GNU General Public License along with
18the GNU MP Library test suite. If not, see https://www.gnu.org/licenses/. */
19
20#include "config.h"
21
22#include <iostream>
23
24#include "gmpxx.h"
25#include "gmp-impl.h"
26#include "tests.h"
27
28using namespace std;
29
30
31/* The various test cases are broken up into separate functions to keep down
32 compiler memory use. They're static so that any mistakenly omitted from
33 main() will provoke warnings (under gcc -Wall at least). */
34
35static void
36check_mpz_1 (void)
37{
38 // template<class Op1, class Op2>
39 // __gmp_expr<mpz_t, __gmp_binary_expr<mpz_class, __gmp_expr
40 // <mpz_t, __gmp_binary_expr<mpz_class, mpz_class, Op1> >, Op2> >
41 {
42 mpz_class a(1), b(2), c(3);
43 mpz_class d;
44 d = a + b * c; ASSERT_ALWAYS(d == 7);
45 }
46 {
47 mpz_class a(1), b(2), c(3);
48 mpz_class d;
49 d = a - b * c; ASSERT_ALWAYS(d == -5);
50 }
51}
52
53static void
54check_mpz_2 (void)
55{
56 // template <class T, class Op1, class Op2>
57 // __gmp_expr<mpz_t, __gmp_binary_expr<mpz_class, __gmp_expr
58 // <mpz_t, __gmp_binary_expr<mpz_class, T, Op1> >, Op2> >
59 {
60 mpz_class a(1), b(2);
61 signed int c = 3;
62 mpz_class d;
63 d = a + b * c; ASSERT_ALWAYS(d == 7);
64 }
65 {
66 mpz_class a(1), b(2);
67 signed int c = 3;
68 mpz_class d;
69 d = a - b * c; ASSERT_ALWAYS(d == -5);
70 }
71}
72
73static void
74check_mpz_3 (void)
75{
76 // template <class T, class Op1, class Op2>
77 // __gmp_expr<mpz_t, __gmp_binary_expr<mpz_class, __gmp_expr
78 // <mpz_t, __gmp_binary_expr<T, mpz_class, Op1> >, Op2> >
79 {
80 mpz_class a(1), b(2);
81 unsigned int c = 3;
82 mpz_class d;
83 d = a + c * b; ASSERT_ALWAYS(d == 7);
84 }
85 {
86 mpz_class a(1), b(2);
87 unsigned int c = 3;
88 mpz_class d;
89 d = a - c * b; ASSERT_ALWAYS(d == -5);
90 }
91}
92
93static void
94check_mpz_4 (void)
95{
96 // template <class T, class Op1, class Op2>
97 // __gmp_expr<mpz_t, __gmp_binary_expr<mpz_class, __gmp_expr
98 // <mpz_t, __gmp_binary_expr<mpz_class, __gmp_expr<mpz_t, T>, Op1> >, Op2> >
99 {
100 mpz_class a(1), b(2), c(3);
101 double d = 4.0;
102 mpz_class e;
103 e = a + b * (c + d); ASSERT_ALWAYS(e == 15);
104 }
105 {
106 mpz_class a(1), b(2), c(3);
107 double d = 4.0;
108 mpz_class e;
109 e = a - b * (c + d); ASSERT_ALWAYS(e == -13);
110 }
111}
112
113static void
114check_mpz_5 (void)
115{
116 // template <class T, class Op1, class Op2>
117 // __gmp_expr<mpz_t, __gmp_binary_expr<mpz_class, __gmp_expr
118 // <mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, T>, mpz_class, Op1> >, Op2> >
119 {
120 mpz_class a(1), b(2), c(3);
121 signed int d = 4;
122 mpz_class e;
123 e = a + (b - d) * c; ASSERT_ALWAYS(e == -5);
124 }
125 {
126 mpz_class a(1), b(2), c(3);
127 signed int d = 4;
128 mpz_class e;
129 e = a - (b - d) * c; ASSERT_ALWAYS(e == 7);
130 }
131}
132
133static void
134check_mpz_6 (void)
135{
136 // template <class T, class U, class Op1, class Op2>
137 // __gmp_expr<mpz_t, __gmp_binary_expr<mpz_class, __gmp_expr
138 // <mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, T>, U, Op1> >, Op2> >
139 {
140 mpz_class a(1), b(2);
141 unsigned int c = 3, d = 4;
142 mpz_class e;
143 e = a + (b + c) * d; ASSERT_ALWAYS(e == 21);
144 }
145 {
146 mpz_class a(1), b(2);
147 unsigned int c = 3, d = 4;
148 mpz_class e;
149 e = a - (b + c) * d; ASSERT_ALWAYS(e == -19);
150 }
151}
152
153static void
154check_mpz_7 (void)
155{
156 // template <class T, class U, class Op1, class Op2>
157 // __gmp_expr<mpz_t, __gmp_binary_expr<mpz_class, __gmp_expr
158 // <mpz_t, __gmp_binary_expr<T, __gmp_expr<mpz_t, U>, Op1> >, Op2> >
159 {
160 mpz_class a(1), b(2);
161 double c = 3.0, d = 4.0;
162 mpz_class e;
163 e = a + c * (b + d); ASSERT_ALWAYS(e == 19);
164 }
165 {
166 mpz_class a(1), b(2);
167 double c = 3.0, d = 4.0;
168 mpz_class e;
169 e = a - c * (b + d); ASSERT_ALWAYS(e == -17);
170 }
171}
172
173static void
174check_mpz_8 (void)
175{
176 // template <class T, class U, class Op1, class Op2>
177 // __gmp_expr<mpz_t, __gmp_binary_expr<mpz_class, __gmp_expr
178 // <mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, T>, __gmp_expr<mpz_t, U>,
179 // Op1> >, Op2> >
180 {
181 mpz_class a(1), b(2), c(3);
182 signed int d = 4, e = 5;
183 mpz_class f;
184 f = a + (b - d) * (c + e); ASSERT_ALWAYS(f == -15);
185 }
186 {
187 mpz_class a(1), b(2), c(3);
188 signed int d = 4, e = 5;
189 mpz_class f;
190 f = a - (b - d) * (c + e); ASSERT_ALWAYS(f == 17);
191 }
192}
193
194static void
195check_mpz_9 (void)
196{
197 // template <class T, class Op1, class Op2>
198 // __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, T>,
199 // __gmp_expr<mpz_t, __gmp_binary_expr<mpz_class, mpz_class, Op1> >, Op2> >
200 {
201 mpz_class a(1), b(2), c(3);
202 unsigned int d = 4;
203 mpz_class e;
204 e = (a + d) + b * c; ASSERT_ALWAYS(e == 11);
205 }
206 {
207 mpz_class a(1), b(2), c(3);
208 unsigned int d = 4;
209 mpz_class e;
210 e = (a + d) - b * c; ASSERT_ALWAYS(e == -1);
211 }
212}
213
214static void
215check_mpz_10 (void)
216{
217 // template <class T, class U, class Op1, class Op2>
218 // __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, T>,
219 // __gmp_expr<mpz_t, __gmp_binary_expr<mpz_class, U, Op1> >, Op2> >
220 {
221 mpz_class a(1), b(2);
222 double c = 3.0, d = 4.0;
223 mpz_class e;
224 e = (a - c) + b * d; ASSERT_ALWAYS(e == 6);
225 }
226 {
227 mpz_class a(1), b(2);
228 double c = 3.0, d = 4.0;
229 mpz_class e;
230 e = (a - c) - b * d; ASSERT_ALWAYS(e == -10);
231 }
232}
233
234static void
235check_mpz_11 (void)
236{
237 // template <class T, class U, class Op1, class Op2>
238 // __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, T>,
239 // __gmp_expr<mpz_t, __gmp_binary_expr<U, mpz_class, Op1> >, Op2> >
240 {
241 mpz_class a(1), b(2);
242 signed int c = 3, d = 4;
243 mpz_class e;
244 e = (a - c) + d * b; ASSERT_ALWAYS(e == 6);
245 }
246 {
247 mpz_class a(1), b(2);
248 signed int c = 3, d = 4;
249 mpz_class e;
250 e = (a - c) - d * b; ASSERT_ALWAYS(e == -10);
251 }
252}
253
254static void
255check_mpz_12 (void)
256{
257 // template <class T, class U, class Op1, class Op2>
258 // __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, T>, __gmp_expr
259 // <mpz_t, __gmp_binary_expr<mpz_class, __gmp_expr<mpz_t, U>, Op1> >, Op2> >
260 {
261 mpz_class a(1), b(2), c(3);
262 unsigned int d = 4, e = 5;
263 mpz_class f;
264 f = (a + d) + b * (c - e); ASSERT_ALWAYS(f == 1);
265 }
266 {
267 mpz_class a(1), b(2), c(3);
268 unsigned int d = 4, e = 5;
269 mpz_class f;
270 f = (a + d) - b * (c - e); ASSERT_ALWAYS(f == 9);
271 }
272}
273
274static void
275check_mpz_13 (void)
276{
277 // template <class T, class U, class Op1, class Op2>
278 // __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, T>, __gmp_expr
279 // <mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, U>, mpz_class, Op1> >, Op2> >
280 {
281 mpz_class a(1), b(2), c(3);
282 double d = 4.0, e = 5.0;
283 mpz_class f;
284 f = (a - d) + (b + e) * c; ASSERT_ALWAYS(f == 18);
285 }
286 {
287 mpz_class a(1), b(2), c(3);
288 double d = 4.0, e = 5.0;
289 mpz_class f;
290 f = (a - d) - (b + e) * c; ASSERT_ALWAYS(f == -24);
291 }
292
293}
294
295static void
296check_mpz_14 (void)
297{
298 // template <class T, class U, class V, class Op1, class Op2>
299 // __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, T>, __gmp_expr
300 // <mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, U>, V, Op1> >, Op2> >
301 {
302 mpz_class a(1), b(2);
303 signed int c = 3, d = 4, e = 5;
304 mpz_class f;
305 f = (a + c) + (b + d) * e; ASSERT_ALWAYS(f == 34);
306 }
307 {
308 mpz_class a(1), b(2);
309 signed int c = 3, d = 4, e = 5;
310 mpz_class f;
311 f = (a + c) - (b + d) * e; ASSERT_ALWAYS(f == -26);
312 }
313}
314
315static void
316check_mpz_15 (void)
317{
318 // template <class T, class U, class V, class Op1, class Op2>
319 // __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, T>, __gmp_expr
320 // <mpz_t, __gmp_binary_expr<U, __gmp_expr<mpz_t, V>, Op1> >, Op2> >
321 {
322 mpz_class a(1), b(2);
323 unsigned int c = 3, d = 4, e = 5;
324 mpz_class f;
325 f = (a - c) + d * (b - e); ASSERT_ALWAYS(f == -14);
326 }
327 {
328 mpz_class a(1), b(2);
329 unsigned int c = 3, d = 4, e = 5;
330 mpz_class f;
331 f = (a - c) - d * (b - e); ASSERT_ALWAYS(f == 10);
332 }
333
334}
335
336static void
337check_mpz_16 (void)
338{
339 // template <class T, class U, class V, class Op1, class Op2>
340 // __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, T>, __gmp_expr
341 // <mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, U>, __gmp_expr<mpz_t, V>,
342 // Op1> >, Op2> >
343 {
344 mpz_class a(1), b(2), c(3);
345 double d = 4.0, e = 5.0, f = 6.0;
346 mpz_class g;
347 g = (a + d) + (b - e) * (c + f); ASSERT_ALWAYS(g == -22);
348 }
349 {
350 mpz_class a(1), b(2), c(3);
351 double d = 4.0, e = 5.0, f = 6.0;
352 mpz_class g;
353 g = (a + d) - (b - e) * (c + f); ASSERT_ALWAYS(g == 32);
354 }
355}
356
357static void
358check_mpz_17 (void)
359{
360 // template <class Op1, class Op2>
361 // __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr
362 // <mpz_t, __gmp_binary_expr<mpz_class, mpz_class, Op1> >, mpz_class, Op2> >
363 {
364 mpz_class a(2), b(3), c(4);
365 mpz_class d;
366 d = a * b + c; ASSERT_ALWAYS(d == 10);
367 }
368 {
369 mpz_class a(2), b(3), c(4);
370 mpz_class d;
371 d = a * b - c; ASSERT_ALWAYS(d == 2);
372 }
373}
374
375static void
376check_mpz_18 (void)
377{
378 // template <class T, class Op1, class Op2>
379 // __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr
380 // <mpz_t, __gmp_binary_expr<mpz_class, T, Op1> >, mpz_class, Op2> >
381 {
382 mpz_class a(2), b(3);
383 signed int c = 4;
384 mpz_class d;
385 d = a * c + b; ASSERT_ALWAYS(d == 11);
386 }
387 {
388 mpz_class a(2), b(3);
389 signed int c = 4;
390 mpz_class d;
391 d = a * c - b; ASSERT_ALWAYS(d == 5);
392 }
393
394}
395
396static void
397check_mpz_19 (void)
398{
399 // template <class T, class Op1, class Op2>
400 // __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr
401 // <mpz_t, __gmp_binary_expr<T, mpz_class, Op1> >, mpz_class, Op2> >
402 {
403 mpz_class a(2), b(3);
404 unsigned int c = 4;
405 mpz_class d;
406 d = c * a + b; ASSERT_ALWAYS(d == 11);
407 }
408 {
409 mpz_class a(2), b(3);
410 unsigned int c = 4;
411 mpz_class d;
412 d = c * a - b; ASSERT_ALWAYS(d == 5);
413 }
414}
415
416static void
417check_mpz_20 (void)
418{
419 // template <class T, class Op1, class Op2>
420 // __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, __gmp_binary_expr
421 // <mpz_class, __gmp_expr<mpz_t, T>, Op1> >, mpz_class, Op2> >
422 {
423 mpz_class a(2), b(3), c(4);
424 double d = 5.0;
425 mpz_class e;
426 e = a * (b + d) + c; ASSERT_ALWAYS(e == 20);
427 }
428 {
429 mpz_class a(2), b(3), c(4);
430 double d = 5.0;
431 mpz_class e;
432 e = a * (b + d) - c; ASSERT_ALWAYS(e == 12);
433 }
434}
435
436static void
437check_mpz_21 (void)
438{
439 // template <class T, class Op1, class Op2>
440 // __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, __gmp_binary_expr
441 // <__gmp_expr<mpz_t, T>, mpz_class, Op1> >, mpz_class, Op2> >
442 {
443 mpz_class a(2), b(3), c(4);
444 signed int d = 5;
445 mpz_class e;
446 e = (a - d) * b + c; ASSERT_ALWAYS(e == -5);
447 }
448 {
449 mpz_class a(2), b(3), c(4);
450 signed int d = 5;
451 mpz_class e;
452 e = (a - d) * b - c; ASSERT_ALWAYS(e == -13);
453 }
454}
455
456static void
457check_mpz_22 (void)
458{
459 // template <class T, class U, class Op1, class Op2>
460 // __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, __gmp_binary_expr
461 // <__gmp_expr<mpz_t, T>, U, Op1> >, mpz_class, Op2> >
462 {
463 mpz_class a(2), b(3);
464 unsigned int c = 4, d = 5;
465 mpz_class e;
466 e = (a + c) * d + b; ASSERT_ALWAYS(e == 33);
467 }
468 {
469 mpz_class a(2), b(3);
470 unsigned int c = 4, d = 5;
471 mpz_class e;
472 e = (a + c) * d - b; ASSERT_ALWAYS(e == 27);
473 }
474}
475
476static void
477check_mpz_23 (void)
478{
479 // template <class T, class U, class Op1, class Op2>
480 // __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, __gmp_binary_expr
481 // <T, __gmp_expr<mpz_t, U>, Op1> >, mpz_class, Op2> >
482 {
483 mpz_class a(2), b(3);
484 double c = 4.0, d = 5.0;
485 mpz_class e;
486 e = c * (a + d) + b; ASSERT_ALWAYS(e == 31);
487 }
488 {
489 mpz_class a(2), b(3);
490 double c = 4.0, d = 5.0;
491 mpz_class e;
492 e = c * (a + d) - b; ASSERT_ALWAYS(e == 25);
493 }
494
495}
496
497static void
498check_mpz_24 (void)
499{
500 // template <class T, class U, class Op1, class Op2>
501 // __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, __gmp_binary_expr
502 // <__gmp_expr<mpz_t, T>, __gmp_expr<mpz_t, U>, Op1> >, mpz_class, Op2> >
503 {
504 mpz_class a(2), b(3), c(4);
505 signed int d = 5, e = 6;
506 mpz_class f;
507 f = (a - d) * (b + e) + c; ASSERT_ALWAYS(f == -23);
508 }
509 {
510 mpz_class a(2), b(3), c(4);
511 signed int d = 5, e = 6;
512 mpz_class f;
513 f = (a - d) * (b + e) - c; ASSERT_ALWAYS(f == -31);
514 }
515}
516
517static void
518check_mpz_25 (void)
519{
520 // template <class T, class Op1, class Op2>
521 // __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, __gmp_binary_expr
522 // <mpz_class, mpz_class, Op1> >, __gmp_expr<mpz_t, T>, Op2> >
523 {
524 mpz_class a(2), b(3), c(4);
525 unsigned int d = 5;
526 mpz_class e;
527 e = a * b + (c - d); ASSERT_ALWAYS(e == 5);
528 }
529 {
530 mpz_class a(2), b(3), c(4);
531 unsigned int d = 5;
532 mpz_class e;
533 e = a * b - (c - d); ASSERT_ALWAYS(e == 7);
534 }
535}
536
537static void
538check_mpz_26 (void)
539{
540 // template <class T, class U, class Op1, class Op2>
541 // __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, __gmp_binary_expr
542 // <mpz_class, T, Op1> >, __gmp_expr<mpz_t, U>, Op2> >
543 {
544 mpz_class a(2), b(3);
545 double c = 4.0, d = 5.0;
546 mpz_class e;
547 e = a * c + (b + d); ASSERT_ALWAYS(e == 16);
548 }
549 {
550 mpz_class a(2), b(3);
551 double c = 4.0, d = 5.0;
552 mpz_class e;
553 e = a * c - (b + d); ASSERT_ALWAYS(e == 0);
554 }
555}
556
557static void
558check_mpz_27 (void)
559{
560 // template <class T, class U, class Op1, class Op2>
561 // __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, __gmp_binary_expr
562 // <T, mpz_class, Op1> >, __gmp_expr<mpz_t, U>, Op2> >
563 {
564 mpz_class a(2), b(3);
565 signed int c = 4, d = 5;
566 mpz_class e;
567 e = c * a + (b - d); ASSERT_ALWAYS(e == 6);
568 }
569 {
570 mpz_class a(2), b(3);
571 signed int c = 4, d = 5;
572 mpz_class e;
573 e = c * a - (b - d); ASSERT_ALWAYS(e == 10);
574 }
575}
576
577static void
578check_mpz_28 (void)
579{
580 // template <class T, class U, class Op1, class Op2>
581 // __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, __gmp_binary_expr
582 // <mpz_class, __gmp_expr<mpz_t, T>, Op1> >, __gmp_expr<mpz_t, U>, Op2> >
583 {
584 mpz_class a(2), b(3), c(4);
585 unsigned int d = 5, e = 6;
586 mpz_class f;
587 f = a * (b - d) + (c + e); ASSERT_ALWAYS(f == 6);
588 }
589 {
590 mpz_class a(2), b(3), c(4);
591 unsigned int d = 5, e = 6;
592 mpz_class f;
593 f = a * (b - d) - (c + e); ASSERT_ALWAYS(f == -14);
594 }
595}
596
597static void
598check_mpz_29 (void)
599{
600 // template <class T, class U, class Op1, class Op2>
601 // __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, __gmp_binary_expr
602 // <__gmp_expr<mpz_t, T>, mpz_class, Op1> >, __gmp_expr<mpz_t, U>, Op2> >
603 {
604 mpz_class a(2), b(3), c(4);
605 double d = 5.0, e = 6.0;
606 mpz_class f;
607 f = (a + d) * b + (c - e); ASSERT_ALWAYS(f == 19);
608 }
609 {
610 mpz_class a(2), b(3), c(4);
611 double d = 5.0, e = 6.0;
612 mpz_class f;
613 f = (a + d) * b - (c - e); ASSERT_ALWAYS(f == 23);
614 }
615}
616
617static void
618check_mpz_30 (void)
619{
620 // template <class T, class U, class V, class Op1, class Op2>
621 // __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, __gmp_binary_expr
622 // <__gmp_expr<mpz_t, T>, U, Op1> >, __gmp_expr<mpz_t, V>, Op2> >
623 {
624 mpz_class a(2), b(3);
625 signed int c = 4, d = 5, e = 6;
626 mpz_class f;
627 f = (a + c) * d + (b + e); ASSERT_ALWAYS(f == 39);
628 }
629 {
630 mpz_class a(2), b(3);
631 signed int c = 4, d = 5, e = 6;
632 mpz_class f;
633 f = (a + c) * d - (b + e); ASSERT_ALWAYS(f == 21);
634 }
635}
636
637static void
638check_mpz_31 (void)
639{
640 // template <class T, class U, class V, class Op1, class Op2>
641 // __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, __gmp_binary_expr
642 // <T, __gmp_expr<mpz_t, U>, Op1> >, __gmp_expr<mpz_t, V>, Op2> >
643 {
644 mpz_class a(2), b(3);
645 unsigned int c = 4, d = 5, e = 6;
646 mpz_class f;
647 f = c * (a + d) + (b - e); ASSERT_ALWAYS(f == 25);
648 }
649 {
650 mpz_class a(2), b(3);
651 unsigned int c = 4, d = 5, e = 6;
652 mpz_class f;
653 f = c * (a + d) - (b - e); ASSERT_ALWAYS(f == 31);
654 }
655}
656
657static void
658check_mpz_32 (void)
659{
660 // template <class T, class U, class V, class Op1, class Op2>
661 // __gmp_expr<mpz_t, __gmp_binary_expr<__gmp_expr<mpz_t, __gmp_binary_expr
662 // <__gmp_expr<mpz_t, T>, __gmp_expr<mpz_t, U>, Op1> >,
663 // __gmp_expr<mpz_t, V>, Op2> >
664 {
665 mpz_class a(2), b(3), c(4);
666 double d = 5.0, e = 6.0, f = 7.0;
667 mpz_class g;
668 g = (a + d) * (b - e) + (c + f); ASSERT_ALWAYS(g == -10);
669 }
670 {
671 mpz_class a(2), b(3), c(4);
672 double d = 5.0, e = 6.0, f = 7.0;
673 mpz_class g;
674 g = (a + d) * (b - e) - (c + f); ASSERT_ALWAYS(g == -32);
675 }
676}
677
678void
679check_mpq (void)
680{
681 // currently there's no ternary mpq operation
682}
683
684void
685check_mpf (void)
686{
687 // currently there's no ternary mpf operation
688}
689
690
691int
692main (void)
693{
694 tests_start();
695
696 check_mpz_1 ();
697 check_mpz_2 ();
698 check_mpz_3 ();
699 check_mpz_4 ();
700 check_mpz_5 ();
701 check_mpz_6 ();
702 check_mpz_7 ();
703 check_mpz_8 ();
704 check_mpz_9 ();
705 check_mpz_10 ();
706 check_mpz_11 ();
707 check_mpz_12 ();
708 check_mpz_13 ();
709 check_mpz_14 ();
710 check_mpz_15 ();
711 check_mpz_16 ();
712 check_mpz_17 ();
713 check_mpz_18 ();
714 check_mpz_19 ();
715 check_mpz_20 ();
716 check_mpz_21 ();
717 check_mpz_22 ();
718 check_mpz_23 ();
719 check_mpz_24 ();
720 check_mpz_25 ();
721 check_mpz_26 ();
722 check_mpz_27 ();
723 check_mpz_28 ();
724 check_mpz_29 ();
725 check_mpz_30 ();
726 check_mpz_31 ();
727 check_mpz_32 ();
728
729 check_mpq();
730 check_mpf();
731
732 tests_end();
733 return 0;
734}