Austin Schuh | dace2a6 | 2020-08-18 10:56:48 -0700 | [diff] [blame] | 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 | void mpz_clobber(mpz_ptr); |
| 141 | |
| 142 | mp_size_t mpn_diff_highest (mp_srcptr, mp_srcptr, mp_size_t) __GMP_ATTRIBUTE_PURE; |
| 143 | mp_size_t mpn_diff_lowest (mp_srcptr, mp_srcptr, mp_size_t) __GMP_ATTRIBUTE_PURE; |
| 144 | mp_size_t byte_diff_highest (const void *, const void *, mp_size_t) __GMP_ATTRIBUTE_PURE; |
| 145 | mp_size_t byte_diff_lowest (const void *, const void *, mp_size_t) __GMP_ATTRIBUTE_PURE; |
| 146 | |
| 147 | |
| 148 | mp_limb_t ref_addc_limb (mp_limb_t *, mp_limb_t, mp_limb_t); |
| 149 | mp_limb_t ref_bswap_limb (mp_limb_t); |
| 150 | unsigned long ref_popc_limb (mp_limb_t); |
| 151 | mp_limb_t ref_subc_limb (mp_limb_t *, mp_limb_t, mp_limb_t); |
| 152 | |
| 153 | |
| 154 | void refmpf_add (mpf_ptr, mpf_srcptr, mpf_srcptr); |
| 155 | void refmpf_add_ulp (mpf_ptr ); |
| 156 | void refmpf_fill (mpf_ptr, mp_size_t, mp_limb_t); |
| 157 | void refmpf_normalize (mpf_ptr); |
| 158 | void refmpf_set_prec_limbs (mpf_ptr, unsigned long); |
| 159 | unsigned long refmpf_set_overlap (mpf_ptr, mpf_srcptr); |
| 160 | void refmpf_sub (mpf_ptr, mpf_srcptr, mpf_srcptr); |
| 161 | int refmpf_validate (const char *, mpf_srcptr, mpf_srcptr); |
| 162 | int refmpf_validate_division (const char *, mpf_srcptr, mpf_srcptr, mpf_srcptr); |
| 163 | |
| 164 | |
| 165 | mp_limb_t refmpn_cnd_add_n (mp_limb_t, mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); |
| 166 | mp_limb_t refmpn_cnd_sub_n (mp_limb_t, mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); |
| 167 | |
| 168 | mp_limb_t refmpn_add (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); |
| 169 | mp_limb_t refmpn_add_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); |
| 170 | mp_limb_t refmpn_add_err1_n (mp_ptr, mp_srcptr, mp_srcptr, mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); |
| 171 | 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); |
| 172 | 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); |
| 173 | mp_limb_t refmpn_add_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); |
| 174 | mp_limb_t refmpn_add_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t); |
| 175 | mp_limb_t refmpn_addlsh1_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); |
| 176 | mp_limb_t refmpn_addlsh2_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); |
| 177 | mp_limb_t refmpn_addlsh_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, unsigned); |
| 178 | mp_limb_t refmpn_addlsh1_n_ip1 (mp_ptr, mp_srcptr, mp_size_t); |
| 179 | mp_limb_t refmpn_addlsh2_n_ip1 (mp_ptr, mp_srcptr, mp_size_t); |
| 180 | mp_limb_t refmpn_addlsh_n_ip1 (mp_ptr, mp_srcptr, mp_size_t, unsigned); |
| 181 | mp_limb_t refmpn_addlsh1_n_ip2 (mp_ptr, mp_srcptr, mp_size_t); |
| 182 | mp_limb_t refmpn_addlsh2_n_ip2 (mp_ptr, mp_srcptr, mp_size_t); |
| 183 | mp_limb_t refmpn_addlsh_n_ip2 (mp_ptr, mp_srcptr, mp_size_t, unsigned); |
| 184 | mp_limb_t refmpn_addlsh1_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t); |
| 185 | mp_limb_t refmpn_addlsh2_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t); |
| 186 | mp_limb_t refmpn_addlsh_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, unsigned, mp_limb_t); |
| 187 | mp_limb_t refmpn_addmul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); |
| 188 | mp_limb_t refmpn_addmul_1c (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t); |
| 189 | mp_limb_t refmpn_addmul_2 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); |
| 190 | mp_limb_t refmpn_addmul_3 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); |
| 191 | mp_limb_t refmpn_addmul_4 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); |
| 192 | mp_limb_t refmpn_addmul_5 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); |
| 193 | mp_limb_t refmpn_addmul_6 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); |
| 194 | mp_limb_t refmpn_addmul_7 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); |
| 195 | mp_limb_t refmpn_addmul_8 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); |
| 196 | |
| 197 | mp_limb_t refmpn_add_n_sub_n (mp_ptr, mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); |
| 198 | mp_limb_t refmpn_add_n_sub_nc (mp_ptr, mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t); |
| 199 | |
| 200 | void refmpn_and_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); |
| 201 | void refmpn_andn_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); |
| 202 | |
| 203 | mp_limb_t refmpn_big_base (int); |
| 204 | |
| 205 | int refmpn_chars_per_limb (int); |
| 206 | void refmpn_clrbit (mp_ptr, unsigned long); |
| 207 | int refmpn_cmp (mp_srcptr, mp_srcptr, mp_size_t); |
| 208 | int refmpn_cmp_allowzero (mp_srcptr, mp_srcptr, mp_size_t); |
| 209 | int refmpn_cmp_twosizes (mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); |
| 210 | |
| 211 | void refmpn_com (mp_ptr, mp_srcptr, mp_size_t); |
| 212 | void refmpn_copy (mp_ptr, mp_srcptr, mp_size_t); |
| 213 | void refmpn_copyi (mp_ptr, mp_srcptr, mp_size_t); |
| 214 | void refmpn_copyd (mp_ptr, mp_srcptr, mp_size_t); |
| 215 | void refmpn_copy_extend (mp_ptr, mp_size_t, mp_srcptr, mp_size_t); |
| 216 | |
| 217 | unsigned refmpn_count_leading_zeros (mp_limb_t); |
| 218 | unsigned refmpn_count_trailing_zeros (mp_limb_t); |
| 219 | |
| 220 | mp_limb_t refmpn_divexact_by3 (mp_ptr, mp_srcptr, mp_size_t); |
| 221 | mp_limb_t refmpn_divexact_by3c (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); |
| 222 | |
| 223 | mp_limb_t refmpn_divmod_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); |
| 224 | mp_limb_t refmpn_divmod_1c (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t); |
| 225 | mp_limb_t refmpn_divrem_1 (mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t); |
| 226 | mp_limb_t refmpn_divrem_1c (mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t); |
| 227 | mp_limb_t refmpn_divrem_2 (mp_ptr, mp_size_t, mp_ptr, mp_size_t, mp_srcptr); |
| 228 | |
| 229 | int refmpn_equal_anynail (mp_srcptr, mp_srcptr, mp_size_t); |
| 230 | |
| 231 | void refmpn_fill (mp_ptr, mp_size_t, mp_limb_t); |
| 232 | |
| 233 | mp_limb_t refmpn_gcd_11 (mp_limb_t, mp_limb_t); |
| 234 | mp_limb_t refmpn_gcd_1 (mp_srcptr, mp_size_t, mp_limb_t); |
| 235 | mp_double_limb_t refmpn_gcd_22 (mp_limb_t, mp_limb_t, mp_limb_t, mp_limb_t); |
| 236 | mp_limb_t refmpn_gcd (mp_ptr, mp_ptr, mp_size_t, mp_ptr, mp_size_t); |
| 237 | |
| 238 | size_t refmpn_get_str (unsigned char *, int, mp_ptr, mp_size_t); |
| 239 | |
| 240 | unsigned long refmpn_hamdist (mp_srcptr, mp_srcptr, mp_size_t); |
| 241 | |
| 242 | mp_limb_t refmpn_invert_limb (mp_limb_t); |
| 243 | void refmpn_ior_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); |
| 244 | void refmpn_iorn_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); |
| 245 | |
| 246 | mp_limb_t refmpn_lshift (mp_ptr, mp_srcptr, mp_size_t, unsigned); |
| 247 | mp_limb_t refmpn_lshift_or_copy (mp_ptr, mp_srcptr, mp_size_t, unsigned); |
| 248 | mp_limb_t refmpn_lshift_or_copy_any (mp_ptr, mp_srcptr, mp_size_t, unsigned); |
| 249 | mp_limb_t refmpn_lshiftc (mp_ptr, mp_srcptr, mp_size_t, unsigned); |
| 250 | void refmpn_com (mp_ptr, mp_srcptr, mp_size_t); |
| 251 | |
| 252 | mp_ptr refmpn_malloc_limbs (mp_size_t); |
| 253 | mp_ptr refmpn_malloc_limbs_aligned (mp_size_t, size_t); |
| 254 | void refmpn_free_limbs (mp_ptr); |
| 255 | mp_limb_t refmpn_msbone (mp_limb_t); |
| 256 | mp_limb_t refmpn_msbone_mask (mp_limb_t); |
| 257 | mp_ptr refmpn_memdup_limbs (mp_srcptr, mp_size_t); |
| 258 | |
| 259 | mp_limb_t refmpn_mod_1 (mp_srcptr, mp_size_t, mp_limb_t); |
| 260 | mp_limb_t refmpn_mod_1c (mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t); |
| 261 | mp_limb_t refmpn_mod_34lsub1 (mp_srcptr, mp_size_t); |
| 262 | |
| 263 | mp_limb_t refmpn_mul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); |
| 264 | mp_limb_t refmpn_mul_1c (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t); |
| 265 | mp_limb_t refmpn_mul_2 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); |
| 266 | mp_limb_t refmpn_mul_3 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); |
| 267 | mp_limb_t refmpn_mul_4 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); |
| 268 | mp_limb_t refmpn_mul_5 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); |
| 269 | mp_limb_t refmpn_mul_6 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr); |
| 270 | |
| 271 | void refmpn_mul_basecase (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); |
| 272 | void refmpn_mulmid_basecase (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); |
| 273 | void refmpn_toom42_mulmid (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_ptr); |
| 274 | void refmpn_mulmid_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); |
| 275 | void refmpn_mulmid (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); |
| 276 | void refmpn_mullo_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); |
| 277 | void refmpn_mul_any (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); |
| 278 | void refmpn_mul_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); |
| 279 | void refmpn_mul (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); |
| 280 | |
| 281 | void refmpn_nand_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); |
| 282 | void refmpn_nior_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); |
| 283 | mp_limb_t refmpn_neg (mp_ptr, mp_srcptr, mp_size_t); |
| 284 | mp_size_t refmpn_normalize (mp_srcptr, mp_size_t); |
| 285 | |
| 286 | unsigned long refmpn_popcount (mp_srcptr, mp_size_t); |
| 287 | mp_limb_t refmpn_preinv_divrem_1 (mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t, unsigned); |
| 288 | mp_limb_t refmpn_preinv_mod_1 (mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t); |
| 289 | |
| 290 | void refmpn_random (mp_ptr, mp_size_t); |
| 291 | void refmpn_random2 (mp_ptr, mp_size_t); |
| 292 | mp_limb_t refmpn_random_limb (void); |
| 293 | |
| 294 | mp_limb_t refmpn_rsh1add_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); |
| 295 | mp_limb_t refmpn_rsh1sub_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); |
| 296 | mp_limb_t refmpn_rshift (mp_ptr, mp_srcptr, mp_size_t, unsigned); |
| 297 | mp_limb_t refmpn_rshift_or_copy (mp_ptr, mp_srcptr, mp_size_t, unsigned); |
| 298 | mp_limb_t refmpn_rshift_or_copy_any (mp_ptr, mp_srcptr, mp_size_t, unsigned); |
| 299 | |
| 300 | mp_limb_t refmpn_sb_div_qr (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t); |
| 301 | unsigned long refmpn_scan0 (mp_srcptr, unsigned long); |
| 302 | unsigned long refmpn_scan1 (mp_srcptr, unsigned long); |
| 303 | void refmpn_setbit (mp_ptr, unsigned long); |
| 304 | void refmpn_sqr (mp_ptr, mp_srcptr, mp_size_t); |
| 305 | void refmpn_sqrlo (mp_ptr, mp_srcptr, mp_size_t); |
| 306 | mp_size_t refmpn_sqrtrem (mp_ptr, mp_ptr, mp_srcptr, mp_size_t); |
| 307 | |
| 308 | void refmpn_sub_ddmmss (mp_limb_t *, mp_limb_t *, mp_limb_t, mp_limb_t, mp_limb_t, mp_limb_t); |
| 309 | mp_limb_t refmpn_sub (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t); |
| 310 | mp_limb_t refmpn_sub_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); |
| 311 | mp_limb_t refmpn_sub_err1_n (mp_ptr, mp_srcptr, mp_srcptr, mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); |
| 312 | 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); |
| 313 | 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); |
| 314 | mp_limb_t refmpn_sub_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); |
| 315 | mp_limb_t refmpn_sub_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t); |
| 316 | mp_limb_t refmpn_sublsh1_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); |
| 317 | mp_limb_t refmpn_sublsh2_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); |
| 318 | mp_limb_t refmpn_sublsh_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, unsigned int); |
| 319 | mp_limb_t refmpn_sublsh1_n_ip1 (mp_ptr, mp_srcptr, mp_size_t); |
| 320 | mp_limb_t refmpn_sublsh2_n_ip1 (mp_ptr, mp_srcptr, mp_size_t); |
| 321 | mp_limb_t refmpn_sublsh_n_ip1 (mp_ptr, mp_srcptr, mp_size_t, unsigned int); |
| 322 | mp_limb_t refmpn_sublsh1_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t); |
| 323 | mp_limb_t refmpn_sublsh2_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t); |
| 324 | mp_limb_t refmpn_sublsh_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, unsigned int, mp_limb_t); |
| 325 | mp_limb_t refmpn_submul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t); |
| 326 | mp_limb_t refmpn_submul_1c (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t); |
| 327 | |
| 328 | mp_limb_signed_t refmpn_rsblsh1_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); |
| 329 | mp_limb_signed_t refmpn_rsblsh2_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); |
| 330 | mp_limb_signed_t refmpn_rsblsh_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, unsigned int); |
| 331 | mp_limb_signed_t refmpn_rsblsh1_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_signed_t); |
| 332 | mp_limb_signed_t refmpn_rsblsh2_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_signed_t); |
| 333 | mp_limb_signed_t refmpn_rsblsh_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, unsigned int, mp_limb_signed_t); |
| 334 | |
| 335 | void refmpn_tdiv_qr (mp_ptr, mp_ptr, mp_size_t, mp_ptr, mp_size_t, mp_srcptr, mp_size_t); |
| 336 | int refmpn_tstbit (mp_srcptr, unsigned long); |
| 337 | |
| 338 | mp_limb_t refmpn_udiv_qrnnd (mp_limb_t *, mp_limb_t, mp_limb_t, mp_limb_t); |
| 339 | mp_limb_t refmpn_udiv_qrnnd_r (mp_limb_t, mp_limb_t, mp_limb_t, mp_limb_t *); |
| 340 | mp_limb_t refmpn_umul_ppmm (mp_limb_t *, mp_limb_t, mp_limb_t); |
| 341 | mp_limb_t refmpn_umul_ppmm_r (mp_limb_t, mp_limb_t, mp_limb_t *); |
| 342 | |
| 343 | void refmpn_xnor_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); |
| 344 | void refmpn_xor_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t); |
| 345 | |
| 346 | void refmpn_zero (mp_ptr, mp_size_t); |
| 347 | void refmpn_zero_extend (mp_ptr, mp_size_t, mp_size_t); |
| 348 | int refmpn_zero_p (mp_srcptr, mp_size_t); |
| 349 | |
| 350 | void refmpn_binvert (mp_ptr, mp_srcptr, mp_size_t, mp_ptr); |
| 351 | void refmpn_invert (mp_ptr, mp_srcptr, mp_size_t, mp_ptr); |
| 352 | |
| 353 | |
| 354 | void refmpq_add (mpq_ptr, mpq_srcptr, mpq_srcptr); |
| 355 | void refmpq_sub (mpq_ptr, mpq_srcptr, mpq_srcptr); |
| 356 | |
| 357 | |
| 358 | void refmpz_combit (mpz_ptr, unsigned long); |
| 359 | unsigned long refmpz_hamdist (mpz_srcptr, mpz_srcptr); |
| 360 | void refmpz_gcd (mpz_ptr, mpz_srcptr, mpz_srcptr); |
| 361 | int refmpz_kronecker (mpz_srcptr, mpz_srcptr); |
| 362 | int refmpz_jacobi (mpz_srcptr, mpz_srcptr); |
| 363 | int refmpz_legendre (mpz_srcptr, mpz_srcptr); |
| 364 | int refmpz_kronecker_si (mpz_srcptr, long); |
| 365 | int refmpz_kronecker_ui (mpz_srcptr, unsigned long); |
| 366 | int refmpz_si_kronecker (long, mpz_srcptr); |
| 367 | int refmpz_ui_kronecker (unsigned long, mpz_srcptr); |
| 368 | |
| 369 | void refmpz_pow_ui (mpz_ptr, mpz_srcptr, unsigned long); |
| 370 | |
| 371 | |
| 372 | #if defined (__cplusplus) |
| 373 | } |
| 374 | #endif |
| 375 | |
| 376 | |
| 377 | /* Establish ostringstream and istringstream. Do this here so as to hide |
| 378 | the conditionals, rather than putting stuff in each test program. |
| 379 | |
| 380 | Oldish versions of g++, like 2.95.2, don't have <sstream>, only |
| 381 | <strstream>. Fake up ostringstream and istringstream classes, but not a |
| 382 | full implementation, just enough for our purposes. */ |
| 383 | |
| 384 | #ifdef __cplusplus |
| 385 | #if 1 || HAVE_SSTREAM |
| 386 | #include <sstream> |
| 387 | #else /* ! HAVE_SSTREAM */ |
| 388 | #include <string> |
| 389 | #include <strstream> |
| 390 | class |
| 391 | ostringstream : public std::ostrstream { |
| 392 | public: |
| 393 | string str() { |
| 394 | int pcount = ostrstream::pcount (); |
| 395 | char *s = (char *) (*__gmp_allocate_func) (pcount + 1); |
| 396 | memcpy (s, ostrstream::str(), pcount); |
| 397 | s[pcount] = '\0'; |
| 398 | string ret = string(s); |
| 399 | (*__gmp_free_func) (s, pcount + 1); |
| 400 | return ret; } |
| 401 | }; |
| 402 | class |
| 403 | istringstream : public std::istrstream { |
| 404 | public: |
| 405 | istringstream (const char *s) : istrstream (s) { }; |
| 406 | }; |
| 407 | #endif /* ! HAVE_SSTREAM */ |
| 408 | #endif /* __cplusplus */ |
| 409 | |
| 410 | |
| 411 | #define TESTS_REPS(count, argv, argc) \ |
| 412 | do { \ |
| 413 | char *envval, *end; \ |
| 414 | double repfactor; \ |
| 415 | int reps_nondefault = 0; \ |
| 416 | if (argc > 1) \ |
| 417 | { \ |
| 418 | count = strtol (argv[1], &end, 0); \ |
| 419 | if (*end || count <= 0) \ |
| 420 | { \ |
| 421 | fprintf (stderr, "Invalid test count: %s.\n", argv[1]); \ |
| 422 | exit (1); \ |
| 423 | } \ |
| 424 | argv++; \ |
| 425 | argc--; \ |
| 426 | reps_nondefault = 1; \ |
| 427 | } \ |
| 428 | envval = getenv ("GMP_CHECK_REPFACTOR"); \ |
| 429 | if (envval != NULL) \ |
| 430 | { \ |
| 431 | repfactor = strtod (envval, &end); \ |
| 432 | if (*end || repfactor <= 0) \ |
| 433 | { \ |
| 434 | fprintf (stderr, "Invalid repfactor: %f.\n", repfactor); \ |
| 435 | exit (1); \ |
| 436 | } \ |
| 437 | count *= repfactor; \ |
| 438 | count = MAX (count, 1); \ |
| 439 | reps_nondefault = 1; \ |
| 440 | } \ |
| 441 | if (reps_nondefault) \ |
| 442 | printf ("Running test with %ld repetitions (include this in bug reports)\n",\ |
| 443 | (long) count); \ |
| 444 | } while (0) |
| 445 | |
| 446 | |
| 447 | #endif /* __TESTS_H__ */ |