github.com/aergoio/aergo@v1.3.1/libtool/src/gmp-6.1.2/tests/tests.h (about) 1 /* Tests support prototypes etc. 2 3 Copyright 2000-2004, 2008-2013 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 21 #ifndef __TESTS_H__ 22 #define __TESTS_H__ 23 24 #include "config.h" 25 26 #include <setjmp.h> /* for jmp_buf */ 27 28 #if defined (__cplusplus) 29 extern "C" { 30 #endif 31 32 33 #ifdef __cplusplus 34 #define ANYARGS ... 35 #else 36 #define ANYARGS 37 #endif 38 39 40 void tests_start (void); 41 void tests_end (void); 42 43 void tests_memory_start (void); 44 void tests_memory_end (void); 45 void *tests_allocate (size_t); 46 void *tests_reallocate (void *, size_t, size_t); 47 void tests_free (void *, size_t); 48 void tests_free_nosize (void *); 49 int tests_memory_valid (void *); 50 51 void tests_rand_start (void); 52 void tests_rand_end (void); 53 54 double tests_infinity_d (); 55 int tests_hardware_getround (void); 56 int tests_hardware_setround (int); 57 int tests_isinf (double); 58 int tests_dbl_mant_bits (void); 59 60 void x86_fldcw (unsigned short); 61 unsigned short x86_fstcw (void); 62 63 64 /* tests_setjmp_sigfpe is like a setjmp, establishing a trap for SIGFPE. 65 The initial return is 0, if SIGFPE is trapped execution goes back there 66 with return value 1. 67 68 tests_sigfpe_done puts SIGFPE back to SIG_DFL, which should be used once 69 the setjmp point is out of scope, so a later SIGFPE won't try to go back 70 there. */ 71 72 #define tests_setjmp_sigfpe() \ 73 (signal (SIGFPE, tests_sigfpe_handler), \ 74 setjmp (tests_sigfpe_target)) 75 76 RETSIGTYPE tests_sigfpe_handler (int); 77 void tests_sigfpe_done (void); 78 extern jmp_buf tests_sigfpe_target; 79 80 81 #if HAVE_CALLING_CONVENTIONS 82 extern mp_limb_t (*calling_conventions_function) (ANYARGS); 83 mp_limb_t calling_conventions (ANYARGS); 84 int calling_conventions_check (void); 85 #define CALLING_CONVENTIONS(function) \ 86 (calling_conventions_function = (function), calling_conventions) 87 #define CALLING_CONVENTIONS_CHECK() (calling_conventions_check()) 88 #else 89 #define CALLING_CONVENTIONS(function) (function) 90 #define CALLING_CONVENTIONS_CHECK() 1 /* always ok */ 91 #endif 92 93 94 extern int mp_trace_base; 95 void mp_limb_trace (const char *, mp_limb_t); 96 void mpn_trace (const char *, mp_srcptr, mp_size_t); 97 void mpn_tracea (const char *, const mp_ptr *, int, mp_size_t); 98 void mpn_tracen (const char *, int, mp_srcptr, mp_size_t); 99 void mpn_trace_file (const char *, mp_srcptr, mp_size_t); 100 void mpn_tracea_file (const char *, const mp_ptr *, int, mp_size_t); 101 void mpf_trace (const char *, mpf_srcptr); 102 void mpq_trace (const char *, mpq_srcptr); 103 void mpz_trace (const char *, mpz_srcptr); 104 void mpz_tracen (const char *, int, mpz_srcptr); 105 void byte_trace (const char *, const void *, mp_size_t); 106 void byte_tracen (const char *, int, const void *, mp_size_t); 107 void d_trace (const char *, double); 108 109 110 void spinner (void); 111 extern unsigned long spinner_count; 112 extern int spinner_wanted; 113 extern int spinner_tick; 114 115 116 void *align_pointer (void *, size_t); 117 void *__gmp_allocate_func_aligned (size_t, size_t); 118 void *__gmp_allocate_or_reallocate (void *, size_t, size_t); 119 char *__gmp_allocate_strdup (const char *); 120 char *strtoupper (char *); 121 mp_limb_t urandom (void); 122 void call_rand_algs (void (*func) (const char *, gmp_randstate_t)); 123 124 125 void mpf_set_str_or_abort (mpf_ptr, const char *, int); 126 127 128 void mpq_set_str_or_abort (mpq_ptr, const char *, int); 129 130 131 void mpz_erandomb (mpz_ptr, gmp_randstate_t, unsigned long); 132 void mpz_erandomb_nonzero (mpz_ptr, gmp_randstate_t, unsigned long); 133 void mpz_errandomb (mpz_ptr, gmp_randstate_t, unsigned long); 134 void mpz_errandomb_nonzero (mpz_ptr, gmp_randstate_t, unsigned long); 135 void mpz_init_set_n (mpz_ptr, mp_srcptr, mp_size_t); 136 void mpz_negrandom (mpz_ptr, gmp_randstate_t); 137 int mpz_pow2abs_p (mpz_srcptr) __GMP_ATTRIBUTE_PURE; 138 void mpz_set_n (mpz_ptr, mp_srcptr, mp_size_t); 139 void mpz_set_str_or_abort (mpz_ptr, const char *, int); 140 141 mp_size_t mpn_diff_highest (mp_srcptr, mp_srcptr, mp_size_t) __GMP_ATTRIBUTE_PURE; 142 mp_size_t mpn_diff_lowest (mp_srcptr, mp_srcptr, mp_size_t) __GMP_ATTRIBUTE_PURE; 143 mp_size_t byte_diff_highest (const void *, const void *, mp_size_t) __GMP_ATTRIBUTE_PURE; 144 mp_size_t byte_diff_lowest (const void *, const void *, mp_size_t) __GMP_ATTRIBUTE_PURE; 145 146 147 mp_limb_t ref_addc_limb (mp_limb_t *, mp_limb_t, mp_limb_t); 148 mp_limb_t ref_bswap_limb (mp_limb_t); 149 unsigned long ref_popc_limb (mp_limb_t); 150 mp_limb_t ref_subc_limb (mp_limb_t *, mp_limb_t, mp_limb_t); 151 152 153 void refmpf_add (mpf_ptr, mpf_srcptr, mpf_srcptr); 154 void refmpf_add_ulp (mpf_ptr ); 155 void refmpf_fill (mpf_ptr, mp_size_t, mp_limb_t); 156 void refmpf_normalize (mpf_ptr); 157 void refmpf_set_prec_limbs (mpf_ptr, unsigned long); 158 unsigned long refmpf_set_overlap (mpf_ptr, mpf_srcptr); 159 void refmpf_sub (mpf_ptr, mpf_srcptr, mpf_srcptr); 160 int refmpf_validate (const char *, mpf_srcptr, mpf_srcptr); 161 int refmpf_validate_division (const char *, mpf_srcptr, mpf_srcptr, mpf_srcptr); 162 163 164 mp_limb_t refmpn_cnd_add_n (mp_limb_t, mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); 165 mp_limb_t refmpn_cnd_sub_n (mp_limb_t, mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); 166 167 mp_limb_t refmpn_add (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); 168 mp_limb_t refmpn_add_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); 169 mp_limb_t refmpn_add_err1_n (mp_ptr, mp_srcptr, mp_srcptr, mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); 170 mp_limb_t refmpn_add_err2_n (mp_ptr, mp_srcptr, mp_srcptr, mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t); 171 mp_limb_t refmpn_add_err3_n (mp_ptr, mp_srcptr, mp_srcptr, mp_ptr, mp_srcptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t); 172 mp_limb_t refmpn_add_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); 173 mp_limb_t refmpn_add_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t); 174 mp_limb_t refmpn_addlsh1_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); 175 mp_limb_t refmpn_addlsh2_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); 176 mp_limb_t refmpn_addlsh_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, unsigned); 177 mp_limb_t refmpn_addlsh1_n_ip1 (mp_ptr, mp_srcptr, mp_size_t); 178 mp_limb_t refmpn_addlsh2_n_ip1 (mp_ptr, mp_srcptr, mp_size_t); 179 mp_limb_t refmpn_addlsh_n_ip1 (mp_ptr, mp_srcptr, mp_size_t, unsigned); 180 mp_limb_t refmpn_addlsh1_n_ip2 (mp_ptr, mp_srcptr, mp_size_t); 181 mp_limb_t refmpn_addlsh2_n_ip2 (mp_ptr, mp_srcptr, mp_size_t); 182 mp_limb_t refmpn_addlsh_n_ip2 (mp_ptr, mp_srcptr, mp_size_t, unsigned); 183 mp_limb_t refmpn_addlsh1_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t); 184 mp_limb_t refmpn_addlsh2_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t); 185 mp_limb_t refmpn_addlsh_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, unsigned, mp_limb_t); 186 mp_limb_t refmpn_addmul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); 187 mp_limb_t refmpn_addmul_1c (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t); 188 mp_limb_t refmpn_addmul_2 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); 189 mp_limb_t refmpn_addmul_3 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); 190 mp_limb_t refmpn_addmul_4 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); 191 mp_limb_t refmpn_addmul_5 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); 192 mp_limb_t refmpn_addmul_6 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); 193 mp_limb_t refmpn_addmul_7 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); 194 mp_limb_t refmpn_addmul_8 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); 195 196 mp_limb_t refmpn_add_n_sub_n (mp_ptr, mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); 197 mp_limb_t refmpn_add_n_sub_nc (mp_ptr, mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t); 198 199 void refmpn_and_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); 200 void refmpn_andn_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); 201 202 mp_limb_t refmpn_big_base (int); 203 204 int refmpn_chars_per_limb (int); 205 void refmpn_clrbit (mp_ptr, unsigned long); 206 int refmpn_cmp (mp_srcptr, mp_srcptr, mp_size_t); 207 int refmpn_cmp_allowzero (mp_srcptr, mp_srcptr, mp_size_t); 208 int refmpn_cmp_twosizes (mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); 209 210 void refmpn_com (mp_ptr, mp_srcptr, mp_size_t); 211 void refmpn_copy (mp_ptr, mp_srcptr, mp_size_t); 212 void refmpn_copyi (mp_ptr, mp_srcptr, mp_size_t); 213 void refmpn_copyd (mp_ptr, mp_srcptr, mp_size_t); 214 void refmpn_copy_extend (mp_ptr, mp_size_t, mp_srcptr, mp_size_t); 215 216 unsigned refmpn_count_leading_zeros (mp_limb_t); 217 unsigned refmpn_count_trailing_zeros (mp_limb_t); 218 219 mp_limb_t refmpn_divexact_by3 (mp_ptr, mp_srcptr, mp_size_t); 220 mp_limb_t refmpn_divexact_by3c (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); 221 222 mp_limb_t refmpn_divmod_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); 223 mp_limb_t refmpn_divmod_1c (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t); 224 mp_limb_t refmpn_divrem_1 (mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t); 225 mp_limb_t refmpn_divrem_1c (mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t); 226 mp_limb_t refmpn_divrem_2 (mp_ptr, mp_size_t, mp_ptr, mp_size_t, mp_srcptr); 227 228 int refmpn_equal_anynail (mp_srcptr, mp_srcptr, mp_size_t); 229 230 void refmpn_fill (mp_ptr, mp_size_t, mp_limb_t); 231 232 mp_limb_t refmpn_gcd_1 (mp_srcptr, mp_size_t, mp_limb_t); 233 mp_limb_t refmpn_gcd (mp_ptr, mp_ptr, mp_size_t, mp_ptr, mp_size_t); 234 235 size_t refmpn_get_str (unsigned char *, int, mp_ptr, mp_size_t); 236 237 unsigned long refmpn_hamdist (mp_srcptr, mp_srcptr, mp_size_t); 238 239 mp_limb_t refmpn_invert_limb (mp_limb_t); 240 void refmpn_ior_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); 241 void refmpn_iorn_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); 242 243 mp_limb_t refmpn_lshift (mp_ptr, mp_srcptr, mp_size_t, unsigned); 244 mp_limb_t refmpn_lshift_or_copy (mp_ptr, mp_srcptr, mp_size_t, unsigned); 245 mp_limb_t refmpn_lshift_or_copy_any (mp_ptr, mp_srcptr, mp_size_t, unsigned); 246 mp_limb_t refmpn_lshiftc (mp_ptr, mp_srcptr, mp_size_t, unsigned); 247 void refmpn_com (mp_ptr, mp_srcptr, mp_size_t); 248 249 mp_ptr refmpn_malloc_limbs (mp_size_t); 250 mp_ptr refmpn_malloc_limbs_aligned (mp_size_t, size_t); 251 void refmpn_free_limbs (mp_ptr); 252 mp_limb_t refmpn_msbone (mp_limb_t); 253 mp_limb_t refmpn_msbone_mask (mp_limb_t); 254 mp_ptr refmpn_memdup_limbs (mp_srcptr, mp_size_t); 255 256 mp_limb_t refmpn_mod_1 (mp_srcptr, mp_size_t, mp_limb_t); 257 mp_limb_t refmpn_mod_1c (mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t); 258 mp_limb_t refmpn_mod_34lsub1 (mp_srcptr, mp_size_t); 259 260 mp_limb_t refmpn_mul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); 261 mp_limb_t refmpn_mul_1c (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t); 262 mp_limb_t refmpn_mul_2 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); 263 mp_limb_t refmpn_mul_3 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); 264 mp_limb_t refmpn_mul_4 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); 265 mp_limb_t refmpn_mul_5 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); 266 mp_limb_t refmpn_mul_6 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); 267 268 void refmpn_mul_basecase (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); 269 void refmpn_mulmid_basecase (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); 270 void refmpn_toom42_mulmid (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_ptr); 271 void refmpn_mulmid_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); 272 void refmpn_mulmid (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); 273 void refmpn_mullo_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); 274 void refmpn_mul_any (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); 275 void refmpn_mul_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); 276 void refmpn_mul (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); 277 278 void refmpn_nand_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); 279 void refmpn_nior_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); 280 mp_limb_t refmpn_neg (mp_ptr, mp_srcptr, mp_size_t); 281 mp_size_t refmpn_normalize (mp_srcptr, mp_size_t); 282 283 unsigned long refmpn_popcount (mp_srcptr, mp_size_t); 284 mp_limb_t refmpn_preinv_divrem_1 (mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t, unsigned); 285 mp_limb_t refmpn_preinv_mod_1 (mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t); 286 287 void refmpn_random (mp_ptr, mp_size_t); 288 void refmpn_random2 (mp_ptr, mp_size_t); 289 mp_limb_t refmpn_random_limb (void); 290 291 mp_limb_t refmpn_rsh1add_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); 292 mp_limb_t refmpn_rsh1sub_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); 293 mp_limb_t refmpn_rshift (mp_ptr, mp_srcptr, mp_size_t, unsigned); 294 mp_limb_t refmpn_rshift_or_copy (mp_ptr, mp_srcptr, mp_size_t, unsigned); 295 mp_limb_t refmpn_rshift_or_copy_any (mp_ptr, mp_srcptr, mp_size_t, unsigned); 296 297 mp_limb_t refmpn_sb_div_qr (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t); 298 unsigned long refmpn_scan0 (mp_srcptr, unsigned long); 299 unsigned long refmpn_scan1 (mp_srcptr, unsigned long); 300 void refmpn_setbit (mp_ptr, unsigned long); 301 void refmpn_sqr (mp_ptr, mp_srcptr, mp_size_t); 302 void refmpn_sqrlo (mp_ptr, mp_srcptr, mp_size_t); 303 mp_size_t refmpn_sqrtrem (mp_ptr, mp_ptr, mp_srcptr, mp_size_t); 304 305 void refmpn_sub_ddmmss (mp_limb_t *, mp_limb_t *, mp_limb_t, mp_limb_t, mp_limb_t, mp_limb_t); 306 mp_limb_t refmpn_sub (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); 307 mp_limb_t refmpn_sub_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); 308 mp_limb_t refmpn_sub_err1_n (mp_ptr, mp_srcptr, mp_srcptr, mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); 309 mp_limb_t refmpn_sub_err2_n (mp_ptr, mp_srcptr, mp_srcptr, mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t); 310 mp_limb_t refmpn_sub_err3_n (mp_ptr, mp_srcptr, mp_srcptr, mp_ptr, mp_srcptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t); 311 mp_limb_t refmpn_sub_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); 312 mp_limb_t refmpn_sub_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t); 313 mp_limb_t refmpn_sublsh1_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); 314 mp_limb_t refmpn_sublsh2_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); 315 mp_limb_t refmpn_sublsh_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, unsigned int); 316 mp_limb_t refmpn_sublsh1_n_ip1 (mp_ptr, mp_srcptr, mp_size_t); 317 mp_limb_t refmpn_sublsh2_n_ip1 (mp_ptr, mp_srcptr, mp_size_t); 318 mp_limb_t refmpn_sublsh_n_ip1 (mp_ptr, mp_srcptr, mp_size_t, unsigned int); 319 mp_limb_t refmpn_sublsh1_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t); 320 mp_limb_t refmpn_sublsh2_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t); 321 mp_limb_t refmpn_sublsh_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, unsigned int, mp_limb_t); 322 mp_limb_t refmpn_submul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); 323 mp_limb_t refmpn_submul_1c (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t); 324 325 mp_limb_signed_t refmpn_rsblsh1_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); 326 mp_limb_signed_t refmpn_rsblsh2_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); 327 mp_limb_signed_t refmpn_rsblsh_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, unsigned int); 328 mp_limb_signed_t refmpn_rsblsh1_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_signed_t); 329 mp_limb_signed_t refmpn_rsblsh2_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_signed_t); 330 mp_limb_signed_t refmpn_rsblsh_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, unsigned int, mp_limb_signed_t); 331 332 void refmpn_tdiv_qr (mp_ptr, mp_ptr, mp_size_t, mp_ptr, mp_size_t, mp_srcptr, mp_size_t); 333 int refmpn_tstbit (mp_srcptr, unsigned long); 334 335 mp_limb_t refmpn_udiv_qrnnd (mp_limb_t *, mp_limb_t, mp_limb_t, mp_limb_t); 336 mp_limb_t refmpn_udiv_qrnnd_r (mp_limb_t, mp_limb_t, mp_limb_t, mp_limb_t *); 337 mp_limb_t refmpn_umul_ppmm (mp_limb_t *, mp_limb_t, mp_limb_t); 338 mp_limb_t refmpn_umul_ppmm_r (mp_limb_t, mp_limb_t, mp_limb_t *); 339 340 void refmpn_xnor_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); 341 void refmpn_xor_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); 342 343 void refmpn_zero (mp_ptr, mp_size_t); 344 void refmpn_zero_extend (mp_ptr, mp_size_t, mp_size_t); 345 int refmpn_zero_p (mp_srcptr, mp_size_t); 346 347 void refmpn_binvert (mp_ptr, mp_srcptr, mp_size_t, mp_ptr); 348 void refmpn_invert (mp_ptr, mp_srcptr, mp_size_t, mp_ptr); 349 350 351 void refmpq_add (mpq_ptr, mpq_srcptr, mpq_srcptr); 352 void refmpq_sub (mpq_ptr, mpq_srcptr, mpq_srcptr); 353 354 355 void refmpz_combit (mpz_ptr, unsigned long); 356 unsigned long refmpz_hamdist (mpz_srcptr, mpz_srcptr); 357 int refmpz_kronecker (mpz_srcptr, mpz_srcptr); 358 int refmpz_jacobi (mpz_srcptr, mpz_srcptr); 359 int refmpz_legendre (mpz_srcptr, mpz_srcptr); 360 int refmpz_kronecker_si (mpz_srcptr, long); 361 int refmpz_kronecker_ui (mpz_srcptr, unsigned long); 362 int refmpz_si_kronecker (long, mpz_srcptr); 363 int refmpz_ui_kronecker (unsigned long, mpz_srcptr); 364 365 void refmpz_pow_ui (mpz_ptr, mpz_srcptr, unsigned long); 366 367 368 #if defined (__cplusplus) 369 } 370 #endif 371 372 373 /* Establish ostringstream and istringstream. Do this here so as to hide 374 the conditionals, rather than putting stuff in each test program. 375 376 Oldish versions of g++, like 2.95.2, don't have <sstream>, only 377 <strstream>. Fake up ostringstream and istringstream classes, but not a 378 full implementation, just enough for our purposes. */ 379 380 #ifdef __cplusplus 381 #if 1 || HAVE_SSTREAM 382 #include <sstream> 383 #else /* ! HAVE_SSTREAM */ 384 #include <string> 385 #include <strstream> 386 class 387 ostringstream : public std::ostrstream { 388 public: 389 string str() { 390 int pcount = ostrstream::pcount (); 391 char *s = (char *) (*__gmp_allocate_func) (pcount + 1); 392 memcpy (s, ostrstream::str(), pcount); 393 s[pcount] = '\0'; 394 string ret = string(s); 395 (*__gmp_free_func) (s, pcount + 1); 396 return ret; } 397 }; 398 class 399 istringstream : public std::istrstream { 400 public: 401 istringstream (const char *s) : istrstream (s) { }; 402 }; 403 #endif /* ! HAVE_SSTREAM */ 404 #endif /* __cplusplus */ 405 406 407 #define TESTS_REPS(count, argv, argc) \ 408 do { \ 409 char *envval, *end; \ 410 double repfactor; \ 411 int reps_nondefault = 0; \ 412 if (argc > 1) \ 413 { \ 414 count = strtol (argv[1], &end, 0); \ 415 if (*end || count <= 0) \ 416 { \ 417 fprintf (stderr, "Invalid test count: %s.\n", argv[1]); \ 418 exit (1); \ 419 } \ 420 argv++; \ 421 argc--; \ 422 reps_nondefault = 1; \ 423 } \ 424 envval = getenv ("GMP_CHECK_REPFACTOR"); \ 425 if (envval != NULL) \ 426 { \ 427 repfactor = strtod (envval, &end); \ 428 if (*end || repfactor <= 0) \ 429 { \ 430 fprintf (stderr, "Invalid repfactor: %f.\n", repfactor); \ 431 exit (1); \ 432 } \ 433 count *= repfactor; \ 434 count = MAX (count, 1); \ 435 reps_nondefault = 1; \ 436 } \ 437 if (reps_nondefault) \ 438 printf ("Running test with %ld repetitions (include this in bug reports)\n",\ 439 (long) count); \ 440 } while (0) 441 442 443 #endif /* __TESTS_H__ */