| /* Test gmp_randclass. |
| |
| Copyright 2002, 2003 Free Software Foundation, Inc. |
| |
| This file is part of the GNU MP Library test suite. |
| |
| The GNU MP Library test suite is free software; you can redistribute it |
| and/or modify it under the terms of the GNU General Public License as |
| published by the Free Software Foundation; either version 3 of the License, |
| or (at your option) any later version. |
| |
| The GNU MP Library test suite is distributed in the hope that it will be |
| useful, but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General |
| Public License for more details. |
| |
| You should have received a copy of the GNU General Public License along with |
| the GNU MP Library test suite. If not, see https://www.gnu.org/licenses/. */ |
| |
| #include "gmpxx.h" |
| #include "gmp-impl.h" |
| #include "tests.h" |
| |
| using namespace std; |
| |
| |
| /* all flavours of initialization */ |
| void |
| check_randinit (void) |
| { |
| { |
| gmp_randclass r(gmp_randinit_default); |
| } |
| |
| { |
| mpz_class a(0); |
| unsigned long c = 0, m2exp = 8; |
| gmp_randclass r(gmp_randinit_lc_2exp, a, c, m2exp); |
| } |
| |
| { |
| unsigned long m2exp = 64; |
| gmp_randclass r(gmp_randinit_lc_2exp_size, m2exp); |
| } |
| |
| /* gmp_randinit_lc_2exp_size, with excessive size */ |
| { |
| try { |
| unsigned long m2exp = ULONG_MAX; |
| gmp_randclass r(gmp_randinit_lc_2exp_size, m2exp); |
| ASSERT_ALWAYS (0); /* should not be reached */ |
| } catch (length_error) { |
| } |
| } |
| |
| { |
| gmp_randclass r(gmp_randinit_mt); |
| } |
| |
| /* obsolete, but still available */ |
| { |
| gmp_randalg_t alg = GMP_RAND_ALG_LC; |
| unsigned long m2exp = 64; |
| gmp_randclass r(alg, m2exp); |
| } |
| { |
| gmp_randalg_t alg = GMP_RAND_ALG_DEFAULT; |
| unsigned long m2exp = 64; |
| gmp_randclass r(alg, m2exp); |
| } |
| { |
| gmp_randalg_t alg = (gmp_randalg_t) 0; |
| unsigned long m2exp = 64; |
| gmp_randclass r(alg, m2exp); |
| } |
| } |
| |
| void |
| check_mpz (void) |
| { |
| { |
| gmp_randclass r(gmp_randinit_default); |
| mpz_class a(123); |
| unsigned int b = 256; |
| mpz_class c; |
| r.seed(a); |
| c = r.get_z_bits(b); |
| } |
| { |
| gmp_randclass r(gmp_randinit_default); |
| mpz_class a(256); |
| unsigned long b = 123; |
| mpz_class c; |
| r.seed(b); |
| c = r.get_z_bits(a); |
| } |
| { |
| gmp_randclass r(gmp_randinit_default); |
| mpz_class a(123), b(256); |
| mpz_class c; |
| r.seed(a); |
| c = r.get_z_range(b); |
| } |
| } |
| |
| void |
| check_mpf (void) |
| { |
| { |
| gmp_randclass r(gmp_randinit_default); |
| mpz_class a(123); |
| r.seed(a); |
| mpf_class b; |
| b = r.get_f(); |
| mpf_class c(r.get_f()); |
| ASSERT_ALWAYS (c.get_prec() == mpf_get_default_prec()); |
| mpf_class d(r.get_f(),212); |
| ASSERT_ALWAYS (d.get_prec() >= 212); |
| } |
| { |
| gmp_randclass r(gmp_randinit_default); |
| int a = 123, b = 198; |
| r.seed(a); |
| mpf_class c; |
| c = r.get_f(b); |
| ASSERT_ALWAYS (c.get_prec() == mpf_get_default_prec()); |
| mpf_class d(r.get_f(b)); |
| ASSERT_ALWAYS (d.get_prec() >= 198); |
| mpf_class e(r.get_f(b)-r.get_f()); |
| ASSERT_ALWAYS (e.get_prec() >= 198); |
| mpf_class f(r.get_f(60),300); |
| ASSERT_ALWAYS (f.get_prec() >= 300); |
| } |
| } |
| |
| |
| int |
| main (void) |
| { |
| tests_start(); |
| |
| check_randinit(); |
| check_mpz(); |
| check_mpf(); |
| |
| tests_end(); |
| return 0; |
| } |