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