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

数学计算

开发平台:

Unix_Linux

  1. /* Test gmp_randclass.
  2. Copyright 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 "gmp.h"
  15. #include "gmpxx.h"
  16. #include "gmp-impl.h"
  17. #include "tests.h"
  18. using namespace std;
  19. /* all flavours of initialization */
  20. void
  21. check_randinit (void)
  22. {
  23.   {
  24.     gmp_randclass r(gmp_randinit_default);
  25.   }
  26.   {
  27.     mpz_class a(0);
  28.     unsigned long c = 0, m2exp = 8;
  29.     gmp_randclass r(gmp_randinit_lc_2exp, a, c, m2exp);
  30.   }
  31.   {
  32.     unsigned long m2exp = 64;
  33.     gmp_randclass r(gmp_randinit_lc_2exp_size, m2exp);
  34.   }
  35.   /* gmp_randinit_lc_2exp_size, with excessive size */
  36.   {
  37.     try {
  38.       unsigned long m2exp = ULONG_MAX;
  39.       gmp_randclass r(gmp_randinit_lc_2exp_size, m2exp);
  40.       ASSERT_ALWAYS (0);  /* should not be reached */
  41.     } catch (length_error) {
  42.     }
  43.   }
  44.   {
  45.     gmp_randclass r(gmp_randinit_mt);
  46.   }
  47.   /* obsolete, but still available */
  48.   {
  49.     gmp_randalg_t alg = GMP_RAND_ALG_LC;
  50.     unsigned long m2exp = 64;
  51.     gmp_randclass r(alg, m2exp);
  52.   }
  53.   {
  54.     gmp_randalg_t alg = GMP_RAND_ALG_DEFAULT;
  55.     unsigned long m2exp = 64;
  56.     gmp_randclass r(alg, m2exp);
  57.   }
  58.   {
  59.     gmp_randalg_t alg = (gmp_randalg_t) 0;
  60.     unsigned long m2exp = 64;
  61.     gmp_randclass r(alg, m2exp);
  62.   }
  63. }
  64. void
  65. check_mpz (void)
  66. {
  67.   {
  68.     gmp_randclass r(gmp_randinit_default);
  69.     mpz_class a(123);
  70.     unsigned int b = 256;
  71.     mpz_class c;
  72.     r.seed(a);
  73.     c = r.get_z_bits(b);
  74.   }
  75.   {
  76.     gmp_randclass r(gmp_randinit_default);
  77.     mpz_class a(256);
  78.     unsigned long b = 123;
  79.     mpz_class c;
  80.     r.seed(b);
  81.     c = r.get_z_bits(a);
  82.   }
  83.   {
  84.     gmp_randclass r(gmp_randinit_default);
  85.     mpz_class a(123), b(256);
  86.     mpz_class c;
  87.     r.seed(a);
  88.     c = r.get_z_range(b);
  89.   }
  90. }
  91. void
  92. check_mpf (void)
  93. {
  94.   {
  95.     gmp_randclass r(gmp_randinit_default);
  96.     mpz_class a(123);
  97.     r.seed(a);
  98.     mpf_class b;
  99.     b = r.get_f();
  100.   }
  101.   {
  102.     gmp_randclass r(gmp_randinit_default);
  103.     int a = 123, b = 128;
  104.     r.seed(a);
  105.     mpf_class c;
  106.     c = r.get_f(b);
  107.   }
  108. }
  109. int
  110. main (void)
  111. {
  112.   tests_start();
  113.   check_randinit();
  114.   check_mpz();
  115.   check_mpf();
  116.   tests_end();
  117.   return 0;
  118. }