t-ternary.cc
上传用户:qaz666999
上传日期:2022-08-06
资源大小:2570k
文件大小:17k
源码类别:

数学计算

开发平台:

Unix_Linux

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