Annotation of OpenXM_contrib/gmp/tests/mpn/t-iord_u.c, Revision 1.1.1.1
1.1 ohara 1: /* Test MPN_INCR_U and MPN_DECR_U.
2:
3: Copyright 2001, 2002 Free Software Foundation, Inc.
4:
5: This file is part of the GNU MP Library.
6:
7: The GNU MP Library is free software; you can redistribute it and/or modify
8: it under the terms of the GNU Lesser General Public License as published by
9: the Free Software Foundation; either version 2.1 of the License, or (at your
10: option) any later version.
11:
12: The GNU MP Library is distributed in the hope that it will be useful, but
13: WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14: or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
15: License for more details.
16:
17: You should have received a copy of the GNU Lesser General Public License
18: along with the GNU MP Library; see the file COPYING.LIB. If not, write to
19: the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
20: MA 02111-1307, USA.
21: */
22:
23: #include <stdio.h>
24: #include <stdlib.h>
25:
26: #include "gmp.h"
27: #include "gmp-impl.h"
28: #include "tests.h"
29:
30:
31: /* The i386 MPN_INCR_U and MPN_DECR_U have special cases for "n" being a
32: compile-time constant 1, so that's exercised explicitly. */
33:
34:
35: #define M GMP_NUMB_MAX
36: #define SIZE ((mp_size_t) 10)
37:
38:
39: void
40: check_one (const char *name, int i,
41: mp_srcptr src, mp_limb_t n,
42: mp_srcptr got, mp_srcptr want, mp_size_t size)
43: {
44: if (! refmpn_equal_anynail (got, want, size))
45: {
46: printf ("Wrong at %s i=%d\n", name, i);
47: mpn_trace (" src", src, size);
48: mpn_trace (" n", &n, (mp_size_t) 1);
49: mpn_trace (" got", got, size);
50: mpn_trace (" want", want, size);
51: abort ();
52: }
53: }
54:
55:
56: void
57: check_incr_data (void)
58: {
59: static const struct {
60: mp_limb_t n;
61: const mp_limb_t src[SIZE];
62: const mp_limb_t want[SIZE];
63: } data[] = {
64: { 1, { 0 }, { 1 } },
65: { 1, { 123 }, { 124 } },
66: { 2, { 0 }, { 2 } },
67: { 2, { 123 }, { 125 } },
68: { M, { 0 }, { M } },
69:
70: { 1, { M, 0 }, { 0, 1 } },
71: { 1, { M, 123 }, { 0, 124 } },
72: { 2, { M, 0 }, { 1, 1 } },
73: { 2, { M, 123 }, { 1, 124 } },
74: { M, { M, 0 }, { M-1, 1 } },
75: { M, { M, 123 }, { M-1, 124 } },
76:
77: { 1, { M, M, 0 }, { 0, 0, 1 } },
78: { 1, { M, M, 123 }, { 0, 0, 124 } },
79: { 2, { M, M, 0 }, { 1, 0, 1 } },
80: { 2, { M, M, 123 }, { 1, 0, 124 } },
81: { M, { M, M, 0 }, { M-1, 0, 1 } },
82: { M, { M, M, 123 }, { M-1, 0, 124 } },
83:
84: { 1, { M, M, M, 0 }, { 0, 0, 0, 1 } },
85: { 1, { M, M, M, 123 }, { 0, 0, 0, 124 } },
86: { 2, { M, M, M, 0 }, { 1, 0, 0, 1 } },
87: { 2, { M, M, M, 123 }, { 1, 0, 0, 124 } },
88: { M, { M, M, M, 0 }, { M-1, 0, 0, 1 } },
89: { M, { M, M, M, 123 }, { M-1, 0, 0, 124 } },
90:
91: { 1, { M, M, M, M, 0 }, { 0, 0, 0, 0, 1 } },
92: { 1, { M, M, M, M, 123 }, { 0, 0, 0, 0, 124 } },
93: { 2, { M, M, M, M, 0 }, { 1, 0, 0, 0, 1 } },
94: { 2, { M, M, M, M, 123 }, { 1, 0, 0, 0, 124 } },
95: { M, { M, M, M, M, 0 }, { M-1, 0, 0, 0, 1 } },
96: { M, { M, M, M, M, 123 }, { M-1, 0, 0, 0, 124
97: #if defined (__hpux) && ! defined (__GNUC__)
98: /* Some versions (at least HP92453-01 B.11.11.23709.GP) of the
99: HP C compilers fail to zero-fill aggregates as the ISO C standard
100: requires (cf 6.5.7 Initialization). Compensate here: */
101: , 0, 0, 0, 0, 0
102: #endif
103: } }
104: };
105:
106: mp_limb_t got[SIZE];
107: int i;
108:
109: for (i = 0; i < numberof (data); i++)
110: {
111: refmpn_copyi (got, data[i].src, SIZE);
112: MPN_INCR_U (got, SIZE, data[i].n);
113: check_one ("check_incr (general)", i,
114: data[i].src, data[i].n,
115: got, data[i].want, SIZE);
116:
117: if (data[i].n == 1)
118: {
119: refmpn_copyi (got, data[i].src, SIZE);
120: MPN_INCR_U (got, SIZE, CNST_LIMB(1));
121: check_one ("check_incr (const 1)", i,
122: data[i].src, data[i].n,
123: got, data[i].want, SIZE);
124: }
125: }
126: }
127:
128: void
129: check_decr_data (void)
130: {
131: static const struct {
132: mp_limb_t n;
133: const mp_limb_t src[SIZE];
134: const mp_limb_t want[SIZE];
135: } data[] = {
136: { 1, { 1 }, { 0 } },
137: { 1, { 123 }, { 122 } },
138: { 1, { M }, { M-1 } },
139: { 2, { 2 }, { 0 } },
140: { 2, { 123 }, { 121 } },
141: { M, { M }, { 0 } },
142: { M-1, { M }, { 1 } },
143:
144: { 1, { 0, 1 }, { M, 0 } },
145: { 1, { 0, 123 }, { M, 122 } },
146: { 1, { 0, M }, { M, M-1 } },
147: { 2, { 0, 123 }, { M-1, 122 } },
148: { 2, { 1, 123 }, { M, 122 } },
149: { M, { 0, 123 }, { 1, 122 } },
150: { M, { M-1, M }, { M, M-1 } },
151:
152: { 1, { 0, 0, 1 }, { M, M, 0 } },
153: { 1, { 0, 0, 123 }, { M, M, 122 } },
154: { 1, { 0, 0, M }, { M, M, M-1 } },
155: { 2, { 0, 0, 123 }, { M-1, M, 122 } },
156: { 2, { 1, 0, 123 }, { M, M, 122 } },
157: { M, { 0, 0, 123 }, { 1, M, 122 } },
158: { M, { M-1, 0, M }, { M, M, M-1 } },
159:
160: { 1, { 0, 0, 0, 1 }, { M, M, M, 0 } },
161: { 1, { 0, 0, 0, 123 }, { M, M, M, 122 } },
162: { 1, { 0, 0, 0, M }, { M, M, M, M-1 } },
163: { 2, { 0, 0, 0, 123 }, { M-1, M, M, 122 } },
164: { 2, { 1, 0, 0, 123 }, { M, M, M, 122 } },
165: { M, { 0, 0, 0, 123 }, { 1, M, M, 122 } },
166: { M, { M-1, 0, 0, M }, { M, M, M, M-1 } },
167:
168: { 1, { 0, 0, 0, 0, 1 }, { M, M, M, M, 0 } },
169: { 1, { 0, 0, 0, 0, 123 }, { M, M, M, M, 122 } },
170: { 1, { 0, 0, 0, 0, M }, { M, M, M, M, M-1 } },
171: { 2, { 0, 0, 0, 0, 123 }, { M-1, M, M, M, 122 } },
172: { 2, { 1, 0, 0, 0, 123 }, { M, M, M, M, 122 } },
173: { M, { 0, 0, 0, 0, 123 }, { 1, M, M, M, 122 } },
174: { M, { M-1, 0, 0, 0, M }, { M, M, M, M, M-1 } },
175:
176: { 1, { 0, 0, 0, 0, 0, 1 }, { M, M, M, M, M, 0 } },
177: { 1, { 0, 0, 0, 0, 0, 123 }, { M, M, M, M, M, 122 } },
178: { 1, { 0, 0, 0, 0, 0, M }, { M, M, M, M, M, M-1 } },
179: { 2, { 0, 0, 0, 0, 0, 123 }, { M-1, M, M, M, M, 122 } },
180: { 2, { 1, 0, 0, 0, 0, 123 }, { M, M, M, M, M, 122 } },
181: { M, { 0, 0, 0, 0, 0, 123 }, { 1, M, M, M, M, 122 } },
182: { M, { M-1, 0, 0, 0, 0, M }, { M, M, M, M, M, M-1
183: #if defined (__hpux) && ! defined (__GNUC__)
184: /* For explanation of this garbage, see previous function. */
185: , 0, 0, 0, 0
186: #endif
187: } }
188: };
189:
190: mp_limb_t got[SIZE];
191: int i;
192:
193: for (i = 0; i < numberof (data); i++)
194: {
195: refmpn_copyi (got, data[i].src, SIZE);
196: MPN_DECR_U (got, SIZE, data[i].n);
197: check_one ("check_decr_data", i,
198: data[i].src, data[i].n,
199: got, data[i].want, SIZE);
200:
201: if (data[i].n == 1)
202: {
203: refmpn_copyi (got, data[i].src, SIZE);
204: MPN_DECR_U (got, SIZE, CNST_LIMB(1));
205: check_one ("check_decr (const 1)", i,
206: data[i].src, data[i].n,
207: got, data[i].want, SIZE);
208: }
209: }
210: }
211:
212:
213: int
214: main (void)
215: {
216: tests_start ();
217: mp_trace_base = -16;
218:
219: check_incr_data ();
220: check_decr_data ();
221:
222: tests_end ();
223: exit (0);
224: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>