1 /* Test mp*_class ternary expressions.
2
3 Copyright 2001-2003 Free Software Foundation, Inc.
4
5 This file is part of the GNU MP Library test suite.
6
7 The GNU MP Library test suite is free software; you can redistribute it
8 and/or modify it under the terms of the GNU General Public License as
9 published by the Free Software Foundation; either version 3 of the License,
10 or (at your option) any later version.
11
12 The GNU MP Library test suite is distributed in the hope that it will be
13 useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
15 Public License for more details.
16
17 You should have received a copy of the GNU General Public License along with
18 the 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
28 using 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
35 static void
check_mpz_1(void)36 check_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
53 static void
check_mpz_2(void)54 check_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
73 static void
check_mpz_3(void)74 check_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
93 static void
check_mpz_4(void)94 check_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
113 static void
check_mpz_5(void)114 check_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
133 static void
check_mpz_6(void)134 check_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
153 static void
check_mpz_7(void)154 check_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
173 static void
check_mpz_8(void)174 check_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
194 static void
check_mpz_9(void)195 check_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
214 static void
check_mpz_10(void)215 check_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
234 static void
check_mpz_11(void)235 check_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
254 static void
check_mpz_12(void)255 check_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
274 static void
check_mpz_13(void)275 check_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
295 static void
check_mpz_14(void)296 check_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
315 static void
check_mpz_15(void)316 check_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
336 static void
check_mpz_16(void)337 check_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
357 static void
check_mpz_17(void)358 check_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
375 static void
check_mpz_18(void)376 check_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
396 static void
check_mpz_19(void)397 check_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
416 static void
check_mpz_20(void)417 check_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
436 static void
check_mpz_21(void)437 check_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
456 static void
check_mpz_22(void)457 check_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
476 static void
check_mpz_23(void)477 check_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
497 static void
check_mpz_24(void)498 check_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
517 static void
check_mpz_25(void)518 check_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
537 static void
check_mpz_26(void)538 check_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
557 static void
check_mpz_27(void)558 check_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
577 static void
check_mpz_28(void)578 check_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
597 static void
check_mpz_29(void)598 check_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
617 static void
check_mpz_30(void)618 check_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
637 static void
check_mpz_31(void)638 check_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
657 static void
check_mpz_32(void)658 check_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
678 void
check_mpq(void)679 check_mpq (void)
680 {
681 // currently there's no ternary mpq operation
682 }
683
684 void
check_mpf(void)685 check_mpf (void)
686 {
687 // currently there's no ternary mpf operation
688 }
689
690
691 int
main(void)692 main (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 }
735