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>