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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 679 check_mpq (void) 680 { 681 // currently there's no ternary mpq operation 682 } 683 684 void 685 check_mpf (void) 686 { 687 // currently there's no ternary mpf operation 688 } 689 690 691 int 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