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__ */