[BACK]Return to reuse.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / gmp / mpz / tests

Annotation of OpenXM_contrib/gmp/mpz/tests/reuse.c, Revision 1.1.1.1

1.1       maekawa     1: /* Test that routines allow reusing a source variable as destination.  */
                      2:
                      3: #include <stdio.h>
                      4: #include "gmp.h"
                      5: #include "gmp-impl.h"
                      6: #include "urandom.h"
                      7:
                      8: #ifndef SIZE
                      9: #define SIZE 16
                     10: #endif
                     11:
                     12: #if __STDC__
                     13: typedef void (*dss_func) (mpz_ptr, mpz_srcptr, mpz_srcptr);
                     14: #else
                     15: typedef void (*dss_func) ();
                     16: #endif
                     17:
                     18: dss_func dss_funcs[] =
                     19: {
                     20:   mpz_add, mpz_and, mpz_cdiv_q, mpz_cdiv_r, mpz_fdiv_q, mpz_fdiv_r,
                     21:   mpz_gcd, mpz_ior, mpz_mul, mpz_sub, mpz_tdiv_q, mpz_tdiv_r
                     22: };
                     23:
                     24: char *dss_func_names[] =
                     25: {
                     26:   "mpz_add", "mpz_and", "mpz_cdiv_q", "mpz_cdiv_r", "mpz_fdiv_q", "mpz_fdiv_r",
                     27:   "mpz_gcd", "mpz_ior", "mpz_mul", "mpz_sub", "mpz_tdiv_q", "mpz_tdiv_r"
                     28: };
                     29:
                     30: char dss_func_division[] = {0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1};
                     31:
                     32: #if 0
                     33: mpz_divexact /* requires special operands */
                     34: #endif
                     35:
                     36: main (argc, argv)
                     37:      int argc;
                     38:      char **argv;
                     39: {
                     40:   int i;
                     41:   int pass, reps = 10000;
                     42:   mpz_t in1, in2, out1;
                     43:   mpz_t res1, res2, res3;
                     44:
                     45:   if (argc == 2)
                     46:      reps = atoi (argv[1]);
                     47:
                     48:   mpz_init (in1);
                     49:   mpz_init (in2);
                     50:   mpz_init (out1);
                     51:   mpz_init (res1);
                     52:   mpz_init (res2);
                     53:   mpz_init (res3);
                     54:
                     55:   for (pass = 1; pass <= reps; pass++)
                     56:     {
                     57:       mpz_random (in1, urandom () % SIZE - SIZE/2);
                     58:       mpz_random (in2, urandom () % SIZE - SIZE/2);
                     59:
                     60:       for (i = 0; i < sizeof (dss_funcs) / sizeof (dss_func); i++)
                     61:        {
                     62:          if (dss_func_division[i] && mpz_cmp_ui (in2, 0) == 0)
                     63:            continue;
                     64:
                     65:          (dss_funcs[i]) (res1, in1, in2);
                     66:
                     67:          mpz_set (out1, in1);
                     68:          (dss_funcs[i]) (out1, out1, in2);
                     69:          mpz_set (res2, out1);
                     70:
                     71:          mpz_set (out1, in2);
                     72:          (dss_funcs[i]) (out1, in1, out1);
                     73:          mpz_set (res3, out1);
                     74:
                     75:          if (mpz_cmp (res1, res2) != 0)
                     76:            dump_abort (dss_func_names[i], in1, in2);
                     77:          if (mpz_cmp (res1, res3) != 0)
                     78:            dump_abort (dss_func_names[i], in1, in2);
                     79:        }
                     80:     }
                     81:
                     82:   exit (0);
                     83: }
                     84:
                     85: dump_abort (name, in1, in2)
                     86:      char *name;
                     87:      mpz_t in1, in2;
                     88: {
                     89:   printf ("failure in %s (", name);
                     90:   mpz_out_str (stdout, -16, in1);
                     91:   printf (" ");
                     92:   mpz_out_str (stdout, -16, in2);
                     93:   printf (")\n");
                     94:   abort ();
                     95: }
                     96:
                     97: #if 0
                     98: void mpz_add_ui                _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
                     99: void mpz_div_2exp      _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
                    100: void mpz_mod_2exp      _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
                    101: void mpz_mul_2exp      _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
                    102: void mpz_mul_ui                _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
                    103: void mpz_pow_ui                _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
                    104: void mpz_sub_ui                _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
                    105: void mpz_tdiv_q_ui     _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
                    106: void mpz_tdiv_r_ui     _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
                    107:
                    108: void mpz_abs           _PROTO ((mpz_ptr, mpz_srcptr));
                    109: void mpz_com           _PROTO ((mpz_ptr, mpz_srcptr));
                    110: void mpz_sqrt          _PROTO ((mpz_ptr, mpz_srcptr));
                    111: void mpz_neg           _PROTO ((mpz_ptr, mpz_srcptr));
                    112:
                    113: void mpz_tdiv_qr_ui    _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int));
                    114:
                    115: void mpz_powm_ui       _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int, mpz_srcptr));
                    116:
                    117: void mpz_gcdext                _PROTO ((mpz_ptr, mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr));
                    118:
                    119: void mpz_cdiv_qr       _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr));
                    120: void mpz_fdiv_qr       _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr));
                    121: void mpz_tdiv_qr       _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr));
                    122:
                    123: void mpz_powm          _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr, mpz_srcptr));
                    124:
                    125: void mpz_sqrtrem       _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr));
                    126:
                    127: unsigned long int mpz_cdiv_qr_ui       _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int));
                    128: unsigned long int mpz_fdiv_qr_ui       _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int));
                    129:
                    130: unsigned long int mpz_cdiv_q_ui        _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
                    131: unsigned long int mpz_cdiv_r_ui        _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
                    132: unsigned long int mpz_fdiv_q_ui        _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
                    133: unsigned long int mpz_fdiv_r_ui        _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
                    134: unsigned long int mpz_gcd_ui   _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
                    135: #endif

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>