Blame tests/tests.h

Packit 5c3484
/* Tests support prototypes etc.
Packit 5c3484
Packit 5c3484
Copyright 2000-2004, 2008-2013 Free Software Foundation, Inc.
Packit 5c3484
Packit 5c3484
This file is part of the GNU MP Library test suite.
Packit 5c3484
Packit 5c3484
The GNU MP Library test suite is free software; you can redistribute it
Packit 5c3484
and/or modify it under the terms of the GNU General Public License as
Packit 5c3484
published by the Free Software Foundation; either version 3 of the License,
Packit 5c3484
or (at your option) any later version.
Packit 5c3484
Packit 5c3484
The GNU MP Library test suite is distributed in the hope that it will be
Packit 5c3484
useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 5c3484
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General
Packit 5c3484
Public License for more details.
Packit 5c3484
Packit 5c3484
You should have received a copy of the GNU General Public License along with
Packit 5c3484
the GNU MP Library test suite.  If not, see https://www.gnu.org/licenses/.  */
Packit 5c3484
Packit 5c3484
Packit 5c3484
#ifndef __TESTS_H__
Packit 5c3484
#define __TESTS_H__
Packit 5c3484
Packit 5c3484
#include "config.h"
Packit 5c3484
Packit 5c3484
#include <setjmp.h>  /* for jmp_buf */
Packit 5c3484
Packit 5c3484
#if defined (__cplusplus)
Packit 5c3484
extern "C" {
Packit 5c3484
#endif
Packit 5c3484
Packit 5c3484
Packit 5c3484
#ifdef __cplusplus
Packit 5c3484
#define ANYARGS  ...
Packit 5c3484
#else
Packit 5c3484
#define ANYARGS
Packit 5c3484
#endif
Packit 5c3484
Packit 5c3484
Packit 5c3484
void tests_start (void);
Packit 5c3484
void tests_end (void);
Packit 5c3484
Packit 5c3484
void tests_memory_start (void);
Packit 5c3484
void tests_memory_end (void);
Packit 5c3484
void *tests_allocate (size_t);
Packit 5c3484
void *tests_reallocate (void *, size_t, size_t);
Packit 5c3484
void tests_free (void *, size_t);
Packit 5c3484
void tests_free_nosize (void *);
Packit 5c3484
int tests_memory_valid (void *);
Packit 5c3484
Packit 5c3484
void tests_rand_start (void);
Packit 5c3484
void tests_rand_end (void);
Packit 5c3484
Packit 5c3484
double tests_infinity_d ();
Packit 5c3484
int tests_hardware_getround (void);
Packit 5c3484
int tests_hardware_setround (int);
Packit 5c3484
int tests_isinf (double);
Packit 5c3484
int tests_dbl_mant_bits (void);
Packit 5c3484
Packit 5c3484
void x86_fldcw (unsigned short);
Packit 5c3484
unsigned short x86_fstcw (void);
Packit 5c3484
Packit 5c3484
Packit 5c3484
/* tests_setjmp_sigfpe is like a setjmp, establishing a trap for SIGFPE.
Packit 5c3484
   The initial return is 0, if SIGFPE is trapped execution goes back there
Packit 5c3484
   with return value 1.
Packit 5c3484
Packit 5c3484
   tests_sigfpe_done puts SIGFPE back to SIG_DFL, which should be used once
Packit 5c3484
   the setjmp point is out of scope, so a later SIGFPE won't try to go back
Packit 5c3484
   there.  */
Packit 5c3484
Packit 5c3484
#define tests_setjmp_sigfpe()                   \
Packit 5c3484
  (signal (SIGFPE, tests_sigfpe_handler),       \
Packit 5c3484
   setjmp (tests_sigfpe_target))
Packit 5c3484
Packit 5c3484
RETSIGTYPE tests_sigfpe_handler (int);
Packit 5c3484
void tests_sigfpe_done (void);
Packit 5c3484
extern jmp_buf  tests_sigfpe_target;
Packit 5c3484
Packit 5c3484
Packit 5c3484
#if HAVE_CALLING_CONVENTIONS
Packit 5c3484
extern mp_limb_t (*calling_conventions_function) (ANYARGS);
Packit 5c3484
mp_limb_t calling_conventions (ANYARGS);
Packit 5c3484
int calling_conventions_check (void);
Packit 5c3484
#define CALLING_CONVENTIONS(function) \
Packit 5c3484
  (calling_conventions_function = (function), calling_conventions)
Packit 5c3484
#define CALLING_CONVENTIONS_CHECK()    (calling_conventions_check())
Packit 5c3484
#else
Packit 5c3484
#define CALLING_CONVENTIONS(function)  (function)
Packit 5c3484
#define CALLING_CONVENTIONS_CHECK()    1 /* always ok */
Packit 5c3484
#endif
Packit 5c3484
Packit 5c3484
Packit 5c3484
extern int mp_trace_base;
Packit 5c3484
void mp_limb_trace (const char *, mp_limb_t);
Packit 5c3484
void mpn_trace (const char *, mp_srcptr, mp_size_t);
Packit 5c3484
void mpn_tracea (const char *, const mp_ptr *, int, mp_size_t);
Packit 5c3484
void mpn_tracen (const char *, int, mp_srcptr, mp_size_t);
Packit 5c3484
void mpn_trace_file (const char *, mp_srcptr, mp_size_t);
Packit 5c3484
void mpn_tracea_file (const char *, const mp_ptr *, int, mp_size_t);
Packit 5c3484
void mpf_trace (const char *, mpf_srcptr);
Packit 5c3484
void mpq_trace (const char *, mpq_srcptr);
Packit 5c3484
void mpz_trace (const char *, mpz_srcptr);
Packit 5c3484
void mpz_tracen (const char *, int, mpz_srcptr);
Packit 5c3484
void byte_trace (const char *, const void *, mp_size_t);
Packit 5c3484
void byte_tracen (const char *, int, const void *, mp_size_t);
Packit 5c3484
void d_trace (const char *, double);
Packit 5c3484
Packit 5c3484
Packit 5c3484
void spinner (void);
Packit 5c3484
extern unsigned long  spinner_count;
Packit 5c3484
extern int  spinner_wanted;
Packit 5c3484
extern int  spinner_tick;
Packit 5c3484
Packit 5c3484
Packit 5c3484
void *align_pointer (void *, size_t);
Packit 5c3484
void *__gmp_allocate_func_aligned (size_t, size_t);
Packit 5c3484
void *__gmp_allocate_or_reallocate (void *, size_t, size_t);
Packit 5c3484
char *__gmp_allocate_strdup (const char *);
Packit 5c3484
char *strtoupper (char *);
Packit 5c3484
mp_limb_t urandom (void);
Packit 5c3484
void call_rand_algs (void (*func) (const char *, gmp_randstate_t));
Packit 5c3484
Packit 5c3484
Packit 5c3484
void mpf_set_str_or_abort (mpf_ptr, const char *, int);
Packit 5c3484
Packit 5c3484
Packit 5c3484
void mpq_set_str_or_abort (mpq_ptr, const char *, int);
Packit 5c3484
Packit 5c3484
Packit 5c3484
void mpz_erandomb (mpz_ptr, gmp_randstate_t, unsigned long);
Packit 5c3484
void mpz_erandomb_nonzero (mpz_ptr, gmp_randstate_t, unsigned long);
Packit 5c3484
void mpz_errandomb (mpz_ptr, gmp_randstate_t, unsigned long);
Packit 5c3484
void mpz_errandomb_nonzero (mpz_ptr, gmp_randstate_t, unsigned long);
Packit 5c3484
void mpz_init_set_n (mpz_ptr, mp_srcptr, mp_size_t);
Packit 5c3484
void mpz_negrandom (mpz_ptr, gmp_randstate_t);
Packit 5c3484
int mpz_pow2abs_p (mpz_srcptr) __GMP_ATTRIBUTE_PURE;
Packit 5c3484
void mpz_set_n (mpz_ptr, mp_srcptr, mp_size_t);
Packit 5c3484
void mpz_set_str_or_abort (mpz_ptr, const char *, int);
Packit 5c3484
Packit 5c3484
mp_size_t mpn_diff_highest (mp_srcptr, mp_srcptr, mp_size_t) __GMP_ATTRIBUTE_PURE;
Packit 5c3484
mp_size_t mpn_diff_lowest (mp_srcptr, mp_srcptr, mp_size_t) __GMP_ATTRIBUTE_PURE;
Packit 5c3484
mp_size_t byte_diff_highest (const void *, const void *, mp_size_t) __GMP_ATTRIBUTE_PURE;
Packit 5c3484
mp_size_t byte_diff_lowest (const void *, const void *, mp_size_t) __GMP_ATTRIBUTE_PURE;
Packit 5c3484
Packit 5c3484
Packit 5c3484
mp_limb_t ref_addc_limb (mp_limb_t *, mp_limb_t, mp_limb_t);
Packit 5c3484
mp_limb_t ref_bswap_limb (mp_limb_t);
Packit 5c3484
unsigned long ref_popc_limb (mp_limb_t);
Packit 5c3484
mp_limb_t ref_subc_limb (mp_limb_t *, mp_limb_t, mp_limb_t);
Packit 5c3484
Packit 5c3484
Packit 5c3484
void refmpf_add (mpf_ptr, mpf_srcptr, mpf_srcptr);
Packit 5c3484
void refmpf_add_ulp (mpf_ptr );
Packit 5c3484
void refmpf_fill (mpf_ptr, mp_size_t, mp_limb_t);
Packit 5c3484
void refmpf_normalize (mpf_ptr);
Packit 5c3484
void refmpf_set_prec_limbs (mpf_ptr, unsigned long);
Packit 5c3484
unsigned long refmpf_set_overlap (mpf_ptr, mpf_srcptr);
Packit 5c3484
void refmpf_sub (mpf_ptr, mpf_srcptr, mpf_srcptr);
Packit 5c3484
int refmpf_validate (const char *, mpf_srcptr, mpf_srcptr);
Packit 5c3484
int refmpf_validate_division (const char *, mpf_srcptr, mpf_srcptr, mpf_srcptr);
Packit 5c3484
Packit 5c3484
Packit 5c3484
mp_limb_t refmpn_cnd_add_n (mp_limb_t, mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
Packit 5c3484
mp_limb_t refmpn_cnd_sub_n (mp_limb_t, mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
Packit 5c3484
Packit 5c3484
mp_limb_t refmpn_add (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t);
Packit 5c3484
mp_limb_t refmpn_add_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);
Packit 5c3484
mp_limb_t refmpn_add_err1_n (mp_ptr, mp_srcptr, mp_srcptr, mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);
Packit 5c3484
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);
Packit 5c3484
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);
Packit 5c3484
mp_limb_t refmpn_add_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
Packit 5c3484
mp_limb_t refmpn_add_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t);
Packit 5c3484
mp_limb_t refmpn_addlsh1_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
Packit 5c3484
mp_limb_t refmpn_addlsh2_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
Packit 5c3484
mp_limb_t refmpn_addlsh_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, unsigned);
Packit 5c3484
mp_limb_t refmpn_addlsh1_n_ip1 (mp_ptr, mp_srcptr, mp_size_t);
Packit 5c3484
mp_limb_t refmpn_addlsh2_n_ip1 (mp_ptr, mp_srcptr, mp_size_t);
Packit 5c3484
mp_limb_t refmpn_addlsh_n_ip1 (mp_ptr, mp_srcptr, mp_size_t, unsigned);
Packit 5c3484
mp_limb_t refmpn_addlsh1_n_ip2 (mp_ptr, mp_srcptr, mp_size_t);
Packit 5c3484
mp_limb_t refmpn_addlsh2_n_ip2 (mp_ptr, mp_srcptr, mp_size_t);
Packit 5c3484
mp_limb_t refmpn_addlsh_n_ip2 (mp_ptr, mp_srcptr, mp_size_t, unsigned);
Packit 5c3484
mp_limb_t refmpn_addlsh1_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t);
Packit 5c3484
mp_limb_t refmpn_addlsh2_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t);
Packit 5c3484
mp_limb_t refmpn_addlsh_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, unsigned, mp_limb_t);
Packit 5c3484
mp_limb_t refmpn_addmul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);
Packit 5c3484
mp_limb_t refmpn_addmul_1c (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t);
Packit 5c3484
mp_limb_t refmpn_addmul_2 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr);
Packit 5c3484
mp_limb_t refmpn_addmul_3 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr);
Packit 5c3484
mp_limb_t refmpn_addmul_4 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr);
Packit 5c3484
mp_limb_t refmpn_addmul_5 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr);
Packit 5c3484
mp_limb_t refmpn_addmul_6 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr);
Packit 5c3484
mp_limb_t refmpn_addmul_7 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr);
Packit 5c3484
mp_limb_t refmpn_addmul_8 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr);
Packit 5c3484
Packit 5c3484
mp_limb_t refmpn_add_n_sub_n (mp_ptr, mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
Packit 5c3484
mp_limb_t refmpn_add_n_sub_nc (mp_ptr, mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t);
Packit 5c3484
Packit 5c3484
void refmpn_and_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
Packit 5c3484
void refmpn_andn_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
Packit 5c3484
Packit 5c3484
mp_limb_t refmpn_big_base (int);
Packit 5c3484
Packit 5c3484
int refmpn_chars_per_limb (int);
Packit 5c3484
void refmpn_clrbit (mp_ptr, unsigned long);
Packit 5c3484
int refmpn_cmp (mp_srcptr, mp_srcptr, mp_size_t);
Packit 5c3484
int refmpn_cmp_allowzero (mp_srcptr, mp_srcptr, mp_size_t);
Packit 5c3484
int refmpn_cmp_twosizes (mp_srcptr, mp_size_t, mp_srcptr, mp_size_t);
Packit 5c3484
Packit 5c3484
void refmpn_com (mp_ptr, mp_srcptr, mp_size_t);
Packit 5c3484
void refmpn_copy (mp_ptr, mp_srcptr, mp_size_t);
Packit 5c3484
void refmpn_copyi (mp_ptr, mp_srcptr, mp_size_t);
Packit 5c3484
void refmpn_copyd (mp_ptr, mp_srcptr, mp_size_t);
Packit 5c3484
void refmpn_copy_extend (mp_ptr, mp_size_t, mp_srcptr, mp_size_t);
Packit 5c3484
Packit 5c3484
unsigned refmpn_count_leading_zeros (mp_limb_t);
Packit 5c3484
unsigned refmpn_count_trailing_zeros (mp_limb_t);
Packit 5c3484
Packit 5c3484
mp_limb_t refmpn_divexact_by3 (mp_ptr, mp_srcptr, mp_size_t);
Packit 5c3484
mp_limb_t refmpn_divexact_by3c (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);
Packit 5c3484
Packit 5c3484
mp_limb_t refmpn_divmod_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);
Packit 5c3484
mp_limb_t refmpn_divmod_1c (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t);
Packit 5c3484
mp_limb_t refmpn_divrem_1 (mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t);
Packit 5c3484
mp_limb_t refmpn_divrem_1c (mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t);
Packit 5c3484
mp_limb_t refmpn_divrem_2 (mp_ptr, mp_size_t, mp_ptr, mp_size_t, mp_srcptr);
Packit 5c3484
Packit 5c3484
int refmpn_equal_anynail (mp_srcptr, mp_srcptr, mp_size_t);
Packit 5c3484
Packit 5c3484
void refmpn_fill (mp_ptr, mp_size_t, mp_limb_t);
Packit 5c3484
Packit 5c3484
mp_limb_t refmpn_gcd_1 (mp_srcptr, mp_size_t, mp_limb_t);
Packit 5c3484
mp_limb_t refmpn_gcd (mp_ptr, mp_ptr, mp_size_t, mp_ptr, mp_size_t);
Packit 5c3484
Packit 5c3484
size_t refmpn_get_str (unsigned char *, int, mp_ptr, mp_size_t);
Packit 5c3484
Packit 5c3484
unsigned long refmpn_hamdist (mp_srcptr, mp_srcptr, mp_size_t);
Packit 5c3484
Packit 5c3484
mp_limb_t refmpn_invert_limb (mp_limb_t);
Packit 5c3484
void refmpn_ior_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
Packit 5c3484
void refmpn_iorn_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
Packit 5c3484
Packit 5c3484
mp_limb_t refmpn_lshift (mp_ptr, mp_srcptr, mp_size_t, unsigned);
Packit 5c3484
mp_limb_t refmpn_lshift_or_copy (mp_ptr, mp_srcptr, mp_size_t, unsigned);
Packit 5c3484
mp_limb_t refmpn_lshift_or_copy_any (mp_ptr, mp_srcptr, mp_size_t, unsigned);
Packit 5c3484
mp_limb_t refmpn_lshiftc (mp_ptr, mp_srcptr, mp_size_t, unsigned);
Packit 5c3484
void refmpn_com (mp_ptr, mp_srcptr, mp_size_t);
Packit 5c3484
Packit 5c3484
mp_ptr refmpn_malloc_limbs (mp_size_t);
Packit 5c3484
mp_ptr refmpn_malloc_limbs_aligned (mp_size_t, size_t);
Packit 5c3484
void refmpn_free_limbs (mp_ptr);
Packit 5c3484
mp_limb_t refmpn_msbone (mp_limb_t);
Packit 5c3484
mp_limb_t refmpn_msbone_mask (mp_limb_t);
Packit 5c3484
mp_ptr refmpn_memdup_limbs (mp_srcptr, mp_size_t);
Packit 5c3484
Packit 5c3484
mp_limb_t refmpn_mod_1 (mp_srcptr, mp_size_t, mp_limb_t);
Packit 5c3484
mp_limb_t refmpn_mod_1c (mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t);
Packit 5c3484
mp_limb_t refmpn_mod_34lsub1 (mp_srcptr, mp_size_t);
Packit 5c3484
Packit 5c3484
mp_limb_t refmpn_mul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);
Packit 5c3484
mp_limb_t refmpn_mul_1c (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t);
Packit 5c3484
mp_limb_t refmpn_mul_2 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr);
Packit 5c3484
mp_limb_t refmpn_mul_3 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr);
Packit 5c3484
mp_limb_t refmpn_mul_4 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr);
Packit 5c3484
mp_limb_t refmpn_mul_5 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr);
Packit 5c3484
mp_limb_t refmpn_mul_6 (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr);
Packit 5c3484
Packit 5c3484
void refmpn_mul_basecase (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t);
Packit 5c3484
void refmpn_mulmid_basecase (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t);
Packit 5c3484
void refmpn_toom42_mulmid (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_ptr);
Packit 5c3484
void refmpn_mulmid_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
Packit 5c3484
void refmpn_mulmid (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t);
Packit 5c3484
void refmpn_mullo_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
Packit 5c3484
void refmpn_mul_any (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t);
Packit 5c3484
void refmpn_mul_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
Packit 5c3484
void refmpn_mul (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t);
Packit 5c3484
Packit 5c3484
void refmpn_nand_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
Packit 5c3484
void refmpn_nior_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
Packit 5c3484
mp_limb_t refmpn_neg (mp_ptr, mp_srcptr, mp_size_t);
Packit 5c3484
mp_size_t refmpn_normalize (mp_srcptr, mp_size_t);
Packit 5c3484
Packit 5c3484
unsigned long refmpn_popcount (mp_srcptr, mp_size_t);
Packit 5c3484
mp_limb_t refmpn_preinv_divrem_1 (mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t, unsigned);
Packit 5c3484
mp_limb_t refmpn_preinv_mod_1 (mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t);
Packit 5c3484
Packit 5c3484
void refmpn_random (mp_ptr, mp_size_t);
Packit 5c3484
void refmpn_random2 (mp_ptr, mp_size_t);
Packit 5c3484
mp_limb_t refmpn_random_limb (void);
Packit 5c3484
Packit 5c3484
mp_limb_t refmpn_rsh1add_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
Packit 5c3484
mp_limb_t refmpn_rsh1sub_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
Packit 5c3484
mp_limb_t refmpn_rshift (mp_ptr, mp_srcptr, mp_size_t, unsigned);
Packit 5c3484
mp_limb_t refmpn_rshift_or_copy (mp_ptr, mp_srcptr, mp_size_t, unsigned);
Packit 5c3484
mp_limb_t refmpn_rshift_or_copy_any (mp_ptr, mp_srcptr, mp_size_t, unsigned);
Packit 5c3484
Packit 5c3484
mp_limb_t refmpn_sb_div_qr (mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t);
Packit 5c3484
unsigned long refmpn_scan0 (mp_srcptr, unsigned long);
Packit 5c3484
unsigned long refmpn_scan1 (mp_srcptr, unsigned long);
Packit 5c3484
void refmpn_setbit (mp_ptr, unsigned long);
Packit 5c3484
void refmpn_sqr (mp_ptr, mp_srcptr, mp_size_t);
Packit 5c3484
void refmpn_sqrlo (mp_ptr, mp_srcptr, mp_size_t);
Packit 5c3484
mp_size_t refmpn_sqrtrem (mp_ptr, mp_ptr, mp_srcptr, mp_size_t);
Packit 5c3484
Packit 5c3484
void refmpn_sub_ddmmss (mp_limb_t *, mp_limb_t *, mp_limb_t, mp_limb_t, mp_limb_t, mp_limb_t);
Packit 5c3484
mp_limb_t refmpn_sub (mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t);
Packit 5c3484
mp_limb_t refmpn_sub_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);
Packit 5c3484
mp_limb_t refmpn_sub_err1_n (mp_ptr, mp_srcptr, mp_srcptr, mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);
Packit 5c3484
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);
Packit 5c3484
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);
Packit 5c3484
mp_limb_t refmpn_sub_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
Packit 5c3484
mp_limb_t refmpn_sub_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t);
Packit 5c3484
mp_limb_t refmpn_sublsh1_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
Packit 5c3484
mp_limb_t refmpn_sublsh2_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
Packit 5c3484
mp_limb_t refmpn_sublsh_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, unsigned int);
Packit 5c3484
mp_limb_t refmpn_sublsh1_n_ip1 (mp_ptr, mp_srcptr, mp_size_t);
Packit 5c3484
mp_limb_t refmpn_sublsh2_n_ip1 (mp_ptr, mp_srcptr, mp_size_t);
Packit 5c3484
mp_limb_t refmpn_sublsh_n_ip1 (mp_ptr, mp_srcptr, mp_size_t, unsigned int);
Packit 5c3484
mp_limb_t refmpn_sublsh1_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t);
Packit 5c3484
mp_limb_t refmpn_sublsh2_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_t);
Packit 5c3484
mp_limb_t refmpn_sublsh_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, unsigned int, mp_limb_t);
Packit 5c3484
mp_limb_t refmpn_submul_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);
Packit 5c3484
mp_limb_t refmpn_submul_1c (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t);
Packit 5c3484
Packit 5c3484
mp_limb_signed_t refmpn_rsblsh1_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
Packit 5c3484
mp_limb_signed_t refmpn_rsblsh2_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
Packit 5c3484
mp_limb_signed_t refmpn_rsblsh_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, unsigned int);
Packit 5c3484
mp_limb_signed_t refmpn_rsblsh1_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_signed_t);
Packit 5c3484
mp_limb_signed_t refmpn_rsblsh2_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, mp_limb_signed_t);
Packit 5c3484
mp_limb_signed_t refmpn_rsblsh_nc (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t, unsigned int, mp_limb_signed_t);
Packit 5c3484
Packit 5c3484
void refmpn_tdiv_qr (mp_ptr, mp_ptr, mp_size_t, mp_ptr, mp_size_t, mp_srcptr, mp_size_t);
Packit 5c3484
int refmpn_tstbit (mp_srcptr, unsigned long);
Packit 5c3484
Packit 5c3484
mp_limb_t refmpn_udiv_qrnnd (mp_limb_t *, mp_limb_t, mp_limb_t, mp_limb_t);
Packit 5c3484
mp_limb_t refmpn_udiv_qrnnd_r (mp_limb_t, mp_limb_t, mp_limb_t, mp_limb_t *);
Packit 5c3484
mp_limb_t refmpn_umul_ppmm (mp_limb_t *, mp_limb_t, mp_limb_t);
Packit 5c3484
mp_limb_t refmpn_umul_ppmm_r (mp_limb_t, mp_limb_t, mp_limb_t *);
Packit 5c3484
Packit 5c3484
void refmpn_xnor_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
Packit 5c3484
void refmpn_xor_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
Packit 5c3484
Packit 5c3484
void refmpn_zero (mp_ptr, mp_size_t);
Packit 5c3484
void refmpn_zero_extend (mp_ptr, mp_size_t, mp_size_t);
Packit 5c3484
int refmpn_zero_p (mp_srcptr, mp_size_t);
Packit 5c3484
Packit 5c3484
void refmpn_binvert (mp_ptr, mp_srcptr, mp_size_t, mp_ptr);
Packit 5c3484
void refmpn_invert (mp_ptr, mp_srcptr, mp_size_t, mp_ptr);
Packit 5c3484
Packit 5c3484
Packit 5c3484
void refmpq_add (mpq_ptr, mpq_srcptr, mpq_srcptr);
Packit 5c3484
void refmpq_sub (mpq_ptr, mpq_srcptr, mpq_srcptr);
Packit 5c3484
Packit 5c3484
Packit 5c3484
void refmpz_combit (mpz_ptr, unsigned long);
Packit 5c3484
unsigned long refmpz_hamdist (mpz_srcptr, mpz_srcptr);
Packit 5c3484
int refmpz_kronecker (mpz_srcptr, mpz_srcptr);
Packit 5c3484
int refmpz_jacobi (mpz_srcptr, mpz_srcptr);
Packit 5c3484
int refmpz_legendre (mpz_srcptr, mpz_srcptr);
Packit 5c3484
int refmpz_kronecker_si (mpz_srcptr, long);
Packit 5c3484
int refmpz_kronecker_ui (mpz_srcptr, unsigned long);
Packit 5c3484
int refmpz_si_kronecker (long, mpz_srcptr);
Packit 5c3484
int refmpz_ui_kronecker (unsigned long, mpz_srcptr);
Packit 5c3484
Packit 5c3484
void refmpz_pow_ui (mpz_ptr, mpz_srcptr, unsigned long);
Packit 5c3484
Packit 5c3484
Packit 5c3484
#if defined (__cplusplus)
Packit 5c3484
}
Packit 5c3484
#endif
Packit 5c3484
Packit 5c3484
Packit 5c3484
/* Establish ostringstream and istringstream.  Do this here so as to hide
Packit 5c3484
   the conditionals, rather than putting stuff in each test program.
Packit 5c3484
Packit 5c3484
   Oldish versions of g++, like 2.95.2, don't have <sstream>, only
Packit 5c3484
   <strstream>.  Fake up ostringstream and istringstream classes, but not a
Packit 5c3484
   full implementation, just enough for our purposes.  */
Packit 5c3484
Packit 5c3484
#ifdef __cplusplus
Packit 5c3484
#if 1 || HAVE_SSTREAM
Packit 5c3484
#include <sstream>
Packit 5c3484
#else /* ! HAVE_SSTREAM */
Packit 5c3484
#include <string>
Packit 5c3484
#include <strstream>
Packit 5c3484
class
Packit 5c3484
ostringstream : public std::ostrstream {
Packit 5c3484
 public:
Packit 5c3484
  string str() {
Packit 5c3484
    int  pcount = ostrstream::pcount ();
Packit 5c3484
    char *s = (char *) (*__gmp_allocate_func) (pcount + 1);
Packit 5c3484
    memcpy (s, ostrstream::str(), pcount);
Packit 5c3484
    s[pcount] = '\0';
Packit 5c3484
    string ret = string(s);
Packit 5c3484
    (*__gmp_free_func) (s, pcount + 1);
Packit 5c3484
    return ret; }
Packit 5c3484
};
Packit 5c3484
class
Packit 5c3484
istringstream : public std::istrstream {
Packit 5c3484
 public:
Packit 5c3484
  istringstream (const char *s) : istrstream (s) { };
Packit 5c3484
};
Packit 5c3484
#endif /* ! HAVE_SSTREAM */
Packit 5c3484
#endif /* __cplusplus */
Packit 5c3484
Packit 5c3484
Packit 5c3484
#define TESTS_REPS(count, argv, argc)					\
Packit 5c3484
  do {									\
Packit 5c3484
  char *envval, *end;							\
Packit 5c3484
  double repfactor;							\
Packit 5c3484
  int reps_nondefault = 0;						\
Packit 5c3484
  if (argc > 1)								\
Packit 5c3484
    {									\
Packit 5c3484
      count = strtol (argv[1], &end, 0);				\
Packit 5c3484
      if (*end || count <= 0)						\
Packit 5c3484
	{								\
Packit 5c3484
	  fprintf (stderr, "Invalid test count: %s.\n", argv[1]);	\
Packit 5c3484
	  exit (1);							\
Packit 5c3484
	}								\
Packit 5c3484
      argv++;								\
Packit 5c3484
      argc--;								\
Packit 5c3484
      reps_nondefault = 1;						\
Packit 5c3484
    }									\
Packit 5c3484
  envval = getenv ("GMP_CHECK_REPFACTOR");				\
Packit 5c3484
  if (envval != NULL)							\
Packit 5c3484
    {									\
Packit 5c3484
      repfactor = strtod (envval, &end;;				\
Packit 5c3484
      if (*end || repfactor <= 0)					\
Packit 5c3484
	{								\
Packit 5c3484
	  fprintf (stderr, "Invalid repfactor: %f.\n", repfactor);	\
Packit 5c3484
	  exit (1);							\
Packit 5c3484
	}								\
Packit 5c3484
      count *= repfactor;						\
Packit 5c3484
      count = MAX (count, 1);						\
Packit 5c3484
      reps_nondefault = 1;						\
Packit 5c3484
    }									\
Packit 5c3484
  if (reps_nondefault)							\
Packit 5c3484
    printf ("Running test with %ld repetitions (include this in bug reports)\n",\
Packit 5c3484
	    (long) count);						\
Packit 5c3484
  } while (0)
Packit 5c3484
Packit 5c3484
Packit 5c3484
#endif /* __TESTS_H__ */