test.c - libzahl - big integer library | |
git clone git://git.suckless.org/libzahl | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
test.c (28285B) | |
--- | |
1 /* See LICENSE file for copyright and license details. */ | |
2 #include "zahl.h" | |
3 | |
4 #include <stdio.h> | |
5 #include <string.h> | |
6 | |
7 #define assert(expr, expected)\ | |
8 do {\ | |
9 int got = (expr);\ | |
10 if (!(got expected)) {\ | |
11 fprintf(stderr,\ | |
12 "Failure at line %i: %s, expected %s, bu… | |
13 __LINE__, #expr, #expected, got);\ | |
14 ret = 1;\ | |
15 goto done;\ | |
16 }\ | |
17 } while (0) | |
18 | |
19 #define assert_zu(expr, expected)\ | |
20 do {\ | |
21 size_t got = (expr);\ | |
22 if (got != (expected)) {\ | |
23 fprintf(stderr,\ | |
24 "Failure at line %i: %s, expected %zu, b… | |
25 __LINE__, #expr, (size_t)(expected), got… | |
26 ret = 1;\ | |
27 goto done;\ | |
28 }\ | |
29 } while (0) | |
30 | |
31 #define assert_s(expr, expected)\ | |
32 do {\ | |
33 const char *got = (expr);\ | |
34 if (strcmp(got, expected)) {\ | |
35 fprintf(stderr,\ | |
36 "Failure at line %i: %s, expected %s, bu… | |
37 __LINE__, #expr, expected, got);\ | |
38 ret = 1;\ | |
39 goto done;\ | |
40 }\ | |
41 } while (0) | |
42 | |
43 #define assert_nr(expr)\ | |
44 do {\ | |
45 if (setjmp(env2)) {\ | |
46 ret = 0;\ | |
47 zsetup(env);\ | |
48 } else {\ | |
49 zsetup(env2);\ | |
50 expr;\ | |
51 fprintf(stderr,\ | |
52 "Failure at line %i: %s, should not have… | |
53 __LINE__, #expr);\ | |
54 ret = 1;\ | |
55 goto done;\ | |
56 }\ | |
57 } while (0) | |
58 | |
59 int | |
60 main(void) | |
61 { | |
62 /* static because otherwise it would have to be volatile yeildin… | |
63 * warnings. auto variables are not guaranteed to be readable af… | |
64 static z_t a, b, c, d, _0, _1, _2, _3; | |
65 static char buf[2000]; | |
66 static int ret = 0; | |
67 static jmp_buf env, env2; | |
68 static size_t n; | |
69 | |
70 #define BUF_N (sizeof(buf) - 1) | |
71 | |
72 if (setjmp(env)) { | |
73 zperror(0); | |
74 ret = 2; | |
75 goto done; | |
76 } | |
77 | |
78 zsetup(env); | |
79 zinit(a), zinit(b), zinit(c), zinit(d), zinit(_0), zinit(_1), zi… | |
80 | |
81 zsetu(_0, 0); | |
82 zsetu(_1, 1); | |
83 zsetu(_2, 2); | |
84 zsetu(_3, 3); | |
85 | |
86 assert(zeven(_0), == 1); | |
87 assert(zodd(_0), == 0); | |
88 assert(zzero(_0), == 1); | |
89 assert(zsignum(_0), == 0); | |
90 assert(zeven(_1), == 0); | |
91 assert(zodd(_1), == 1); | |
92 assert(zzero(_1), == 0); | |
93 assert(zsignum(_1), == 1); | |
94 assert(zeven(_2), == 1); | |
95 assert(zodd(_2), == 0); | |
96 assert(zzero(_2), == 0); | |
97 assert(zsignum(_2), == 1); | |
98 | |
99 zswap(_1, _2); | |
100 assert(zeven(_2), == 0); | |
101 assert(zodd(_2), == 1); | |
102 assert(zzero(_2), == 0); | |
103 assert(zsignum(_2), == 1); | |
104 assert(zeven(_1), == 1); | |
105 assert(zodd(_1), == 0); | |
106 assert(zzero(_1), == 0); | |
107 assert(zsignum(_1), == 1); | |
108 zswap(_2, _1); | |
109 assert(zeven(_1), == 0); | |
110 assert(zodd(_1), == 1); | |
111 assert(zzero(_1), == 0); | |
112 assert(zsignum(_1), == 1); | |
113 assert(zeven(_2), == 1); | |
114 assert(zodd(_2), == 0); | |
115 assert(zzero(_2), == 0); | |
116 assert(zsignum(_2), == 1); | |
117 | |
118 assert((zneg(_2, _2), zsignum(_2)), == -1); zneg(_2, _2); | |
119 assert(zsignum(_2), == 1); | |
120 | |
121 assert(zcmp(_0, _0), == 0); | |
122 assert(zcmp(_1, _1), == 0); | |
123 assert(zcmp(_0, _1), < 0); | |
124 assert(zcmp(_1, _0), > 0); | |
125 assert(zcmp(_1, _2), < 0); | |
126 assert(zcmp(_2, _1), > 0); | |
127 assert(zcmp(_0, _2), < 0); | |
128 assert(zcmp(_2, _0), > 0); | |
129 | |
130 zbset(a, _0, 0, 1); | |
131 assert(zcmp(a, _1), == 0); | |
132 zbset(a, a, 1, 1); | |
133 assert(zcmp(a, _3), == 0); | |
134 zbset(a, a, 0, 0); | |
135 assert(zcmp(a, _2), == 0); | |
136 zbset(a, a, 0, 0); | |
137 assert(zcmp(a, _2), == 0); | |
138 zbset(a, a, 0, -1); | |
139 assert(zcmp(a, _3), == 0); | |
140 zbset(a, a, 0, -1); | |
141 assert(zcmp(a, _2), == 0); | |
142 | |
143 zadd(a, _0, _1); | |
144 assert(zsignum(a), == 1); | |
145 assert(zcmp(a, _1), == 0); | |
146 assert(zcmpi(a, 1), == 0); | |
147 assert(zcmpu(a, 1), == 0); | |
148 zneg(a, a); | |
149 assert(zsignum(a), == -1); | |
150 assert(zcmp(a, _1), < 0); | |
151 assert(zcmpi(a, 1), < 0); | |
152 assert(zcmpu(a, 1), < 0); | |
153 zadd(a, _2, _0); | |
154 assert(zsignum(a), == 1); | |
155 assert(zcmp(a, _2), == 0); | |
156 assert(zcmpi(a, 2), == 0); | |
157 assert(zcmpu(a, 2), == 0); | |
158 zneg(a, a); | |
159 assert(zsignum(a), == -1); | |
160 assert(zcmp(a, _2), < 0); | |
161 assert(zcmpi(a, 2), < 0); | |
162 assert(zcmpu(a, 2), < 0); | |
163 assert(zsignum(_1), == 1); | |
164 zadd(a, _1, _1); | |
165 assert(zsignum(a), == 1); | |
166 assert(zcmp(a, _2), == 0); | |
167 assert(zcmpi(a, 2), == 0); | |
168 assert(zcmpu(a, 2), == 0); | |
169 zset(b, _1); | |
170 zadd(a, b, _1); | |
171 assert(zsignum(a), == 1); | |
172 assert(zcmp(a, _2), == 0); | |
173 assert(zcmpi(a, 2), == 0); | |
174 assert(zcmpu(a, 2), == 0); | |
175 zneg(a, a); | |
176 zset(b, _2); | |
177 zneg(b, b); | |
178 assert(zsignum(a), == -1); | |
179 assert(zcmp(a, b), == 0); | |
180 assert(zcmp(a, _2), < 0); | |
181 assert(zcmpmag(a, b), == 0); | |
182 assert(zcmpmag(a, _2), == 0); | |
183 assert(zcmpi(a, 2), < 0); | |
184 assert(zcmpu(a, 2), < 0); | |
185 assert(zcmpi(a, -2), == 0); | |
186 assert((zneg(_2, _2), zcmp(a, _2)), == 0); zneg(_2, _2); | |
187 zadd(a, _1, _2); | |
188 assert(zsignum(a), == 1); | |
189 assert(zcmp(a, _2), > 0); | |
190 assert(zcmpi(a, 2), > 0); | |
191 assert(zcmpu(a, 2), > 0); | |
192 zneg(a, a); | |
193 zset(b, _2); | |
194 zneg(b, b); | |
195 assert(zsignum(a), == -1); | |
196 assert(zcmpmag(a, _2), > 0); | |
197 assert(zcmpmag(a, b), > 0); | |
198 assert(zcmp(a, b), < 0); | |
199 assert(zcmp(a, _2), < 0); | |
200 assert(zcmpi(a, 2), < 0); | |
201 assert(zcmpu(a, 2), < 0); | |
202 assert(zcmpi(a, -2), < 0); | |
203 assert((zneg(_2, _2), zcmp(a, _2)), < 0); zneg(_2, _2); | |
204 zneg(b, _3); | |
205 assert(zcmp(a, b), == 0); | |
206 | |
207 zunsetup(); | |
208 zsetup(env); | |
209 | |
210 zsub(a, _2, _1); | |
211 assert(zcmpmag(_2, _1), > 0); | |
212 assert(zcmpmag(_2, _0), > 0); | |
213 assert(zcmpmag(_1, _0), > 0); | |
214 zsub(b, _1, _2); | |
215 assert(zcmpmag(_2, _0), > 0); | |
216 assert(zcmpmag(_1, _0), > 0); | |
217 assert(zcmpmag(_2, _1), > 0); | |
218 assert(zcmpmag(a, b), == 0); | |
219 assert(zcmpmag(a, _1), == 0); | |
220 assert(zcmp(a, b), > 0); | |
221 assert(zcmp(a, _1), == 0); | |
222 assert(zcmp(b, _1), < 0); | |
223 zsub(a, _1, _1); | |
224 assert(zcmp(a, _0), == 0); | |
225 zseti(b, 0); | |
226 zsetu(c, 0); | |
227 zsub(a, b, c); | |
228 assert(zcmp(a, _0), == 0); | |
229 assert(zcmpmag(_2, _1), > 0); | |
230 assert(zcmp(_2, _1), > 0); | |
231 zsub(a, _2, _1); | |
232 assert(zsignum(a), == 1); | |
233 assert(zcmpmag(a, _1), == 0); | |
234 assert(zcmp(a, _1), == 0); | |
235 zsub(a, a, _1); | |
236 assert(zcmp(a, _0), == 0); | |
237 zsub(a, a, _0); | |
238 assert(zcmp(a, _0), == 0); | |
239 zsub(a, _1, _2); | |
240 assert(zcmp(a, _1), < 0); | |
241 assert(zcmpmag(a, _1), == 0); | |
242 zabs(a, a); | |
243 assert(zcmp(a, _1), == 0); | |
244 zabs(a, a); | |
245 assert(zcmp(a, _1), == 0); | |
246 zabs(a, _1); | |
247 assert(zcmp(a, _1), == 0); | |
248 zabs(a, _0); | |
249 assert(zcmp(a, _0), == 0); | |
250 | |
251 zseti(b, -1); | |
252 zseti(c, -2); | |
253 zadd(a, _0, b); | |
254 assert(zcmp(a, _0), < 0); | |
255 assert(zcmpi(a, -1), == 0); | |
256 assert(zcmpmag(a, _1), == 0); | |
257 assert(zcmp(a, _1), < 0); | |
258 zadd(a, b, _0); | |
259 assert(zcmp(a, _0), < 0); | |
260 assert(zcmpi(a, -1), == 0); | |
261 assert(zcmpmag(a, _1), == 0); | |
262 assert(zcmp(a, _1), < 0); | |
263 zadd(a, b, c); | |
264 assert(zcmp(a, c), < 0); | |
265 assert(zcmpmag(a, _2), > 0); | |
266 zadd(a, c, b); | |
267 assert(zcmp(a, c), < 0); | |
268 assert(zcmpmag(a, _2), > 0); | |
269 zadd(a, b, _1); | |
270 assert(zcmp(a, _0), == 0); | |
271 assert(zcmpmag(a, _0), == 0); | |
272 zadd(a, _1, b); | |
273 assert(zcmp(a, _0), == 0); | |
274 assert(zcmpmag(a, _0), == 0); | |
275 | |
276 zneg(b, _1); | |
277 zneg(c, _2); | |
278 zsub(a, _0, b); | |
279 assert(zcmp(a, _1), == 0); | |
280 zsub(a, b, _0); | |
281 assert(zcmpmag(a, _1), == 0); | |
282 assert(zcmp(a, _1), < 0); | |
283 zsub(a, b, c); | |
284 assert(zcmpmag(a, _1), == 0); | |
285 assert(zcmp(a, _1), == 0); | |
286 zsub(a, c, b); | |
287 assert(zcmpmag(a, _1), == 0); | |
288 assert(zcmp(a, _1), < 0); | |
289 zsub(a, b, _1); | |
290 assert(zcmpmag(a, _2), == 0); | |
291 assert(zcmp(a, _2), < 0); | |
292 assert(zcmp(a, c), == 0); | |
293 zsub(a, _1, b); | |
294 assert(zcmp(b, _1), < 0); | |
295 assert(zcmpmag(b, _1), == 0); | |
296 assert(zcmp(a, _2), == 0); | |
297 | |
298 zsetu(a, 1000); | |
299 zsetu(b, 0); | |
300 assert(zcmp(a, b), != 0); | |
301 n = zsave(a, buf); | |
302 assert(n > 0, > 0); | |
303 assert_zu(zload(b, buf), n); | |
304 assert(zcmp(a, b), == 0); | |
305 | |
306 zneg(b, _1); | |
307 zneg(c, _2); | |
308 | |
309 assert((zadd_unsigned(a, _1, _2), zcmp(a, _3)), == 0); | |
310 assert((zadd_unsigned(a, b, c), zcmp(a, _3)), == 0); | |
311 assert((zadd_unsigned(a, b, _2), zcmp(a, _3)), == 0); | |
312 assert((zadd_unsigned(a, _1, c), zcmp(a, _3)), == 0); | |
313 | |
314 assert((zadd_unsigned(a, _0, _0), zcmp(a, _0)), == 0); | |
315 assert((zadd_unsigned(a, _0, _1), zcmp(a, _1)), == 0); | |
316 assert((zadd_unsigned(a, _1, _1), zcmp(a, _2)), == 0); | |
317 assert((zadd_unsigned(a, _1, _0), zcmp(a, _1)), == 0); | |
318 zneg(_1, _1); | |
319 assert((zadd_unsigned(a, _0, _0), zcmp(a, _0)), == 0); | |
320 assert((zadd_unsigned(a, _0, _1), zcmp(a, _1)), != 0); | |
321 assert((zadd_unsigned(a, _0, _1), zcmpmag(a, _1)), == 0); | |
322 assert((zadd_unsigned(a, _1, _1), zcmp(a, _2)), == 0); | |
323 assert((zadd_unsigned(a, _1, _0), zcmp(a, _1)), != 0); | |
324 assert((zadd_unsigned(a, _1, _0), zcmpmag(a, _1)), == 0); | |
325 zneg(_1, _1); | |
326 | |
327 assert((zsub_unsigned(a, _2, _1), zcmp(a, _1)), == 0); | |
328 assert((zsub_unsigned(a, _2, b), zcmp(a, _1)), == 0); | |
329 assert((zsub_unsigned(a, c, _1), zcmp(a, _1)), == 0); | |
330 assert((zsub_unsigned(a, c, b), zcmp(a, _1)), == 0); | |
331 | |
332 assert((zsub_unsigned(a, _1, _2), zcmp(a, b)), == 0); | |
333 assert((zsub_unsigned(a, b, _2), zcmp(a, b)), == 0); | |
334 assert((zsub_unsigned(a, _1, c), zcmp(a, b)), == 0); | |
335 assert((zsub_unsigned(a, b, c), zcmp(a, b)), == 0); | |
336 | |
337 assert_zu(zbits(_0), 1); | |
338 assert_zu(zbits(_1), 1); | |
339 assert_zu(zbits(_2), 2); | |
340 assert_zu(zbits(_3), 2); | |
341 | |
342 assert_zu(zlsb(_0), SIZE_MAX); | |
343 assert_zu(zlsb(_1), 0); | |
344 assert_zu(zlsb(_2), 1); | |
345 assert_zu(zlsb(_3), 0); | |
346 | |
347 assert((zand(a, _0, _0), zcmp(a, _0)), == 0); | |
348 assert(zzero(a), == 1); | |
349 assert((zand(a, _0, _1), zcmp(a, _0)), == 0); | |
350 assert(zzero(a), == 1); | |
351 assert((zand(a, _0, _2), zcmp(a, _0)), == 0); | |
352 assert(zzero(a), == 1); | |
353 assert((zand(a, _0, _3), zcmp(a, _0)), == 0); | |
354 assert(zzero(a), == 1); | |
355 assert((zand(a, _1, _1), zcmp(a, _1)), == 0); | |
356 assert((zand(a, _1, _2), zcmp(a, _0)), == 0); | |
357 assert(zzero(a), == 1); | |
358 assert((zand(a, _1, _3), zcmp(a, _1)), == 0); | |
359 assert((zand(a, _2, _2), zcmp(a, _2)), == 0); | |
360 assert((zand(a, _2, _3), zcmp(a, _2)), == 0); | |
361 assert((zand(a, _3, _3), zcmp(a, _3)), == 0); | |
362 | |
363 assert((zor(a, _0, _0), zcmp(a, _0)), == 0); | |
364 assert(zzero(a), == 1); | |
365 assert((zor(a, _0, _1), zcmp(a, _1)), == 0); | |
366 assert((zor(a, _0, _2), zcmp(a, _2)), == 0); | |
367 assert((zor(a, _0, _3), zcmp(a, _3)), == 0); | |
368 assert((zor(a, _1, _1), zcmp(a, _1)), == 0); | |
369 assert((zor(a, _1, _2), zcmp(a, _3)), == 0); | |
370 assert((zor(a, _1, _3), zcmp(a, _3)), == 0); | |
371 assert((zor(a, _2, _2), zcmp(a, _2)), == 0); | |
372 assert((zor(a, _2, _3), zcmp(a, _3)), == 0); | |
373 assert((zor(a, _3, _3), zcmp(a, _3)), == 0); | |
374 | |
375 assert((zxor(a, _0, _0), zcmp(a, _0)), == 0); | |
376 assert(zzero(a), == 1); | |
377 assert((zxor(a, _0, _1), zcmp(a, _1)), == 0); | |
378 assert((zxor(a, _0, _2), zcmp(a, _2)), == 0); | |
379 assert((zxor(a, _0, _3), zcmp(a, _3)), == 0); | |
380 assert((zxor(a, _1, _1), zcmp(a, _0)), == 0); | |
381 assert(zzero(a), == 1); | |
382 assert((zxor(a, _1, _2), zcmp(a, _3)), == 0); | |
383 assert((zxor(a, _1, _3), zcmp(a, _2)), == 0); | |
384 assert((zxor(a, _2, _2), zcmp(a, _0)), == 0); | |
385 assert(zzero(a), == 1); | |
386 assert((zxor(a, _2, _3), zcmp(a, _1)), == 0); | |
387 assert((zxor(a, _3, _3), zcmp(a, _0)), == 0); | |
388 assert(zzero(a), == 1); | |
389 | |
390 zneg(b, _1); | |
391 zneg(c, _3); | |
392 zneg(_1, _1); | |
393 zand(a, b, c); | |
394 assert(zcmpmag(a, _1), == 0); | |
395 assert(zcmp(a, _1), == 0); | |
396 zneg(_1, _1); | |
397 assert((zand(a, b, _3), zcmp(a, _1)), == 0); | |
398 assert((zand(a, _1, c), zcmp(a, _1)), == 0); | |
399 assert((zand(a, _0, c), zcmp(a, _0)), == 0); | |
400 assert((zand(a, b, _0), zcmp(a, _0)), == 0); | |
401 | |
402 zneg(b, _1); | |
403 zneg(c, _2); | |
404 zneg(_3, _3); | |
405 zor(a, b, c); | |
406 assert(zcmpmag(a, _3), == 0); | |
407 assert(zcmp(a, _3), == 0); | |
408 zor(a, b, _2); | |
409 assert(zcmpmag(a, _3), == 0); | |
410 assert(zcmp(a, _3), == 0); | |
411 zor(a, _1, c); | |
412 assert((zcmpmag(a, _3)), == 0); | |
413 assert((zcmp(a, _3)), == 0); | |
414 assert((zor(a, _0, c), zcmp(a, c)), == 0); | |
415 assert((zor(a, b, _0), zcmp(a, b)), == 0); | |
416 zneg(_3, _3); | |
417 | |
418 zneg(b, _1); | |
419 zneg(c, _2); | |
420 zxor(a, b, c); | |
421 assert(zcmpmag(a, _3), == 0); | |
422 assert(zcmp(a, _3), == 0); | |
423 zneg(_3, _3); | |
424 zxor(a, b, _2); | |
425 assert(zcmpmag(a, _3), == 0); | |
426 assert(zcmp(a, _3), == 0); | |
427 zxor(a, _1, c); | |
428 assert(zcmpmag(a, _3), == 0); | |
429 assert(zcmp(a, _3), == 0); | |
430 zxor(a, b, _0); | |
431 assert(zcmpmag(a, b), == 0); | |
432 assert(zcmp(a, b), == 0); | |
433 zxor(a, _0, c); | |
434 assert(zcmpmag(a, c), == 0); | |
435 assert(zcmp(a, c), == 0); | |
436 zneg(_3, _3); | |
437 | |
438 assert((zlsh(a, _0, 0), zcmp(a, _0)), == 0); | |
439 assert(zzero(a), == 1); | |
440 assert((zlsh(a, _0, 1), zcmp(a, _0)), == 0); | |
441 assert(zzero(a), == 1); | |
442 assert((zlsh(a, _1, 0), zcmp(a, _1)), == 0); | |
443 assert((zlsh(a, _1, 1), zcmp(a, _2)), == 0); | |
444 assert((zlsh(a, _1, 2), zcmp(a, _2)), > 0); | |
445 assert((zlsh(a, _2, 0), zcmp(a, _2)), == 0); | |
446 assert((zlsh(a, _2, 1), zcmp(a, _2)), > 0); | |
447 | |
448 zset(a, _0); | |
449 assert((zlsh(a, a, 0), zcmp(a, _0)), == 0); | |
450 assert(zzero(a), == 1); | |
451 assert((zlsh(a, a, 1), zcmp(a, _0)), == 0); | |
452 assert(zzero(a), == 1); | |
453 zset(a, _1); | |
454 assert((zlsh(a, a, 0), zcmp(a, _1)), == 0); | |
455 assert((zlsh(a, a, 1), zcmp(a, _2)), == 0); | |
456 assert((zlsh(a, a, 2), zcmp(a, _2)), > 0); | |
457 zset(a, _2); | |
458 assert((zlsh(a, a, 0), zcmp(a, _2)), == 0); | |
459 assert((zlsh(a, a, 1), zcmp(a, _2)), > 0); | |
460 | |
461 assert((zrsh(a, _0, 0), zcmp(a, _0)), == 0); | |
462 assert(zzero(a), == 1); | |
463 assert((zrsh(a, _0, 1), zcmp(a, _0)), == 0); | |
464 assert(zzero(a), == 1); | |
465 assert((zrsh(a, _1, 0), zcmp(a, _1)), == 0); | |
466 assert((zrsh(a, _1, 1), zcmp(a, _0)), == 0); | |
467 assert(zzero(a), == 1); | |
468 assert((zrsh(a, _1, 2), zcmp(a, _0)), == 0); | |
469 assert(zzero(a), == 1); | |
470 assert((zrsh(a, _2, 0), zcmp(a, _2)), == 0); | |
471 assert((zrsh(a, _2, 1), zcmp(a, _1)), == 0); | |
472 assert((zrsh(a, _2, 2), zcmp(a, _0)), == 0); | |
473 assert(zzero(a), == 1); | |
474 | |
475 zset(a, _0); | |
476 assert((zrsh(a, a, 0), zcmp(a, _0)), == 0); | |
477 assert(zzero(a), == 1); | |
478 assert((zrsh(a, a, 1), zcmp(a, _0)), == 0); | |
479 assert(zzero(a), == 1); | |
480 zset(a, _1); | |
481 assert((zrsh(a, a, 0), zcmp(a, _1)), == 0); | |
482 assert((zrsh(a, a, 1), zcmp(a, _0)), == 0); | |
483 assert(zzero(a), == 1); | |
484 assert((zrsh(a, a, 2), zcmp(a, _0)), == 0); | |
485 assert(zzero(a), == 1); | |
486 zset(a, _2); | |
487 assert((zrsh(a, a, 0), zcmp(a, _2)), == 0); | |
488 assert((zrsh(a, a, 1), zcmp(a, _1)), == 0); | |
489 assert((zrsh(a, a, 2), zcmp(a, _0)), == 0); | |
490 assert(zzero(a), == 1); | |
491 | |
492 assert(zbtest(_0, 0), == 0); | |
493 assert(zbtest(_1, 0), == 1); | |
494 assert(zbtest(_2, 0), == 0); | |
495 assert(zbtest(_3, 0), == 1); | |
496 assert(zbtest(_0, 1), == 0); | |
497 assert(zbtest(_1, 1), == 0); | |
498 assert(zbtest(_2, 1), == 1); | |
499 assert(zbtest(_3, 1), == 1); | |
500 assert(zbtest(_0, 2), == 0); | |
501 assert(zbtest(_1, 2), == 0); | |
502 assert(zbtest(_2, 2), == 0); | |
503 assert(zbtest(_3, 2), == 0); | |
504 | |
505 znot(a, _2); | |
506 assert(zcmpmag(a, _1), == 0); | |
507 assert(zcmp(a, _1), != 0); | |
508 znot(a, a); | |
509 assert(zcmp(a, _0), == 0); | |
510 | |
511 zsetu(a, 0x1234); | |
512 zsetu(c, 0x234); | |
513 ztrunc(a, a, 12); | |
514 assert(zcmp(a, c), == 0); | |
515 | |
516 zsetu(a, 0xEEFF); | |
517 zsetu(c, 0xEE); | |
518 zsetu(d, 0xFF); | |
519 zsplit(a, b, a, 8); | |
520 assert(zcmpmag(a, c), == 0); | |
521 assert(zcmpmag(b, d), == 0); | |
522 zsetu(a, 0xEEFF); | |
523 zsplit(b, a, a, 8); | |
524 assert(zcmpmag(b, c), == 0); | |
525 assert(zcmpmag(a, d), == 0); | |
526 | |
527 zmul(a, _2, _3); | |
528 assert(zcmpi(a, 6), == 0); | |
529 zneg(_3, _3); | |
530 zmul(a, _2, _3); | |
531 assert(zcmpi(a, -6), == 0); | |
532 zneg(_3, _3); | |
533 zneg(_2, _2); | |
534 zmul(a, _2, _3); | |
535 assert(zcmpi(a, -6), == 0); | |
536 zneg(_3, _3); | |
537 zmul(a, _2, _3); | |
538 assert(zcmpi(a, 6), == 0); | |
539 zneg(_3, _3); | |
540 zneg(_2, _2); | |
541 | |
542 zmul(a, _3, _3); | |
543 assert(zcmpi(a, 9), == 0); | |
544 zsqr(a, _3); | |
545 assert(zcmpi(a, 9), == 0); | |
546 zneg(_3, _3); | |
547 zmul(a, _3, _3); | |
548 assert(zcmpi(a, 9), == 0); | |
549 zsqr(a, _3); | |
550 assert(zcmpi(a, 9), == 0); | |
551 zneg(_3, _3); | |
552 | |
553 zseti(a, 8); | |
554 zseti(b, 2); | |
555 zdiv(c, a, b); | |
556 assert(zcmpi(c, 4), == 0); | |
557 zseti(b, -2); | |
558 zdiv(c, a, b); | |
559 assert(zcmpi(c, -4), == 0); | |
560 zseti(a, -8); | |
561 zseti(b, 2); | |
562 zdiv(c, a, b); | |
563 assert(zcmpi(c, -4), == 0); | |
564 zseti(b, -2); | |
565 zdiv(c, a, b); | |
566 assert(zcmpi(c, 4), == 0); | |
567 | |
568 zseti(a, 1000); | |
569 zseti(b, 10); | |
570 zdiv(c, a, b); | |
571 assert(zcmpi(c, 100), == 0); | |
572 zseti(b, -10); | |
573 zdiv(c, a, b); | |
574 assert(zcmpi(c, -100), == 0); | |
575 zseti(a, -1000); | |
576 zseti(b, 10); | |
577 zdiv(c, a, b); | |
578 assert(zcmpi(c, -100), == 0); | |
579 zseti(b, -10); | |
580 zdiv(c, a, b); | |
581 assert(zcmpi(c, 100), == 0); | |
582 | |
583 zseti(a, 7); | |
584 zseti(b, 3); | |
585 zmod(c, a, b); | |
586 assert(zcmpi(c, 1), == 0); | |
587 zseti(b, -3); | |
588 zmod(c, a, b); | |
589 assert(zcmpi(c, 1), == 0); | |
590 zseti(a, -7); | |
591 zseti(b, 3); | |
592 zmod(c, a, b); | |
593 assert(zcmpi(c, -1), == 0); | |
594 zseti(b, -3); | |
595 zmod(c, a, b); | |
596 assert(zcmpi(c, -1), == 0); | |
597 | |
598 zseti(a, 7); | |
599 zseti(b, 3); | |
600 zdivmod(d, c, a, b); | |
601 assert(zcmpi(d, 2), == 0); | |
602 assert(zcmpi(c, 1), == 0); | |
603 zseti(b, -3); | |
604 zdivmod(d, c, a, b); | |
605 assert(zcmpi(d, -2), == 0); | |
606 assert(zcmpi(c, 1), == 0); | |
607 zseti(a, -7); | |
608 zseti(b, 3); | |
609 zdivmod(d, c, a, b); | |
610 assert(zcmpi(d, -2), == 0); | |
611 assert(zcmpi(c, -1), == 0); | |
612 zseti(b, -3); | |
613 zdivmod(d, c, a, b); | |
614 assert(zcmpi(d, 2), == 0); | |
615 assert(zcmpi(c, -1), == 0); | |
616 | |
617 zseti(a, 10); | |
618 zseti(b, -1); | |
619 zpow(a, a, b); | |
620 assert(zcmp(a, _0), == 0); | |
621 | |
622 zseti(a, 10); | |
623 zseti(b, -1); | |
624 zseti(a, 20); | |
625 zmodpow(a, a, b, c); | |
626 assert(zcmp(a, _0), == 0); | |
627 | |
628 zseti(a, 10); | |
629 zseti(c, 100000L); | |
630 zpowu(a, a, 5); | |
631 assert(zcmpmag(a, c), == 0); | |
632 assert(zcmp(a, c), == 0); | |
633 | |
634 zseti(a, -10); | |
635 zseti(c, -100000L); | |
636 zpowu(a, a, 5); | |
637 assert(zcmpmag(a, c), == 0); | |
638 assert(zcmp(a, c), == 0); | |
639 | |
640 zseti(a, -10); | |
641 zseti(c, 10000L); | |
642 zpowu(a, a, 4); | |
643 assert(zcmpmag(a, c), == 0); | |
644 assert(zcmp(a, c), == 0); | |
645 | |
646 zseti(a, 10); | |
647 zseti(c, 3); | |
648 zmodpowu(a, a, 5, c); | |
649 assert(zcmpmag(a, _1), == 0); | |
650 assert(zcmp(a, _1), == 0); | |
651 | |
652 zseti(a, 10); | |
653 zseti(b, 5); | |
654 zseti(c, 100000L); | |
655 zpow(a, a, b); | |
656 assert(zcmpmag(a, c), == 0); | |
657 assert(zcmp(a, c), == 0); | |
658 | |
659 zseti(a, -10); | |
660 zseti(b, 5); | |
661 zseti(c, -100000L); | |
662 zpow(a, a, b); | |
663 assert(zcmpmag(a, c), == 0); | |
664 assert(zcmp(a, c), == 0); | |
665 | |
666 zseti(a, -10); | |
667 zseti(b, 4); | |
668 zseti(c, 10000L); | |
669 zpow(a, a, b); | |
670 assert(zcmpmag(a, c), == 0); | |
671 assert(zcmp(a, c), == 0); | |
672 | |
673 zseti(a, 10); | |
674 zseti(b, 5); | |
675 zseti(c, 3); | |
676 zmodpow(a, a, b, c); | |
677 assert(zcmpmag(a, _1), == 0); | |
678 assert(zcmp(a, _1), == 0); | |
679 | |
680 zseti(a, 102); | |
681 zseti(b, 501); | |
682 zseti(c, 5); | |
683 zmodmul(a, a, b, c); | |
684 assert(zcmp(a, _2), == 0); | |
685 | |
686 zseti(b, 2 * 3 * 3 * 7); | |
687 zseti(c, 3 * 7 * 11); | |
688 zseti(d, 3 * 7); | |
689 assert((zgcd(a, _0, _0), zcmp(a, _0)), == 0); | |
690 assert((zgcd(a, b, _0), zcmp(a, b)), == 0); | |
691 assert((zgcd(a, _0, c), zcmp(a, c)), == 0); | |
692 assert((zgcd(a, b, b), zcmp(a, b)), == 0); | |
693 assert((zgcd(a, b, _2), zcmp(a, _2)), == 0); | |
694 assert((zgcd(a, _2, b), zcmp(a, _2)), == 0); | |
695 assert((zgcd(a, _2, _2), zcmp(a, _2)), == 0); | |
696 assert((zgcd(a, c, _2), zcmp(a, _1)), == 0); | |
697 assert((zgcd(a, _2, c), zcmp(a, _1)), == 0); | |
698 assert((zgcd(a, b, _1), zcmp(a, _1)), == 0); | |
699 assert((zgcd(a, _1, c), zcmp(a, _1)), == 0); | |
700 assert((zgcd(a, _1, _1), zcmp(a, _1)), == 0); | |
701 assert((zgcd(a, b, c), zcmp(a, d)), == 0); | |
702 assert((zgcd(a, c, b), zcmp(a, d)), == 0); | |
703 | |
704 zsets(a, "1234"); | |
705 assert(zcmpi(a, 1234), == 0); | |
706 zsets(b, "+1234"); | |
707 assert(zcmp(a, b), == 0); | |
708 assert_zu(zstr_length(_0, 10), 1); | |
709 assert_zu(zstr_length(_1, 10), 1); | |
710 assert_zu(zstr_length(_2, 10), 1); | |
711 assert_zu(zstr_length(_3, 10), 1); | |
712 zneg(_2, _2); | |
713 assert_zu(zstr_length(_2, 10), 2); | |
714 zneg(_2, _2); | |
715 assert_zu(zstr_length(a, 10), 4); | |
716 zstr(a, buf, 0); | |
717 assert_s(buf, "1234"); | |
718 zsets(a, "-1234"); | |
719 zseti(b, -1234); | |
720 zseti(c, 1234); | |
721 assert(zcmp(a, _0), < 0); | |
722 assert(zcmp(a, b), == 0); | |
723 assert(zcmpmag(a, c), == 0); | |
724 assert(zcmp(a, c), < 0); | |
725 zstr(a, buf, 0); | |
726 assert_s(buf, "-1234"); | |
727 assert_s(zstr(a, buf, 0), "-1234"); | |
728 | |
729 zsetu(d, 100000UL); | |
730 zrand(a, FAST_RANDOM, UNIFORM, d); | |
731 assert(zcmp(a, _0), >= 0); | |
732 assert(zcmp(a, d), <= 0); | |
733 zrand(b, SECURE_RANDOM, UNIFORM, d); | |
734 assert(zcmp(b, _0), >= 0); | |
735 assert(zcmp(b, d), <= 0); | |
736 zrand(c, FASTEST_RANDOM, UNIFORM, d); | |
737 assert(zcmp(c, _0), >= 0); | |
738 assert(zcmp(c, d), <= 0); | |
739 assert(zcmp(a, b), != 0); | |
740 assert(zcmp(a, c), != 0); | |
741 assert(zcmp(b, c), != 0); | |
742 | |
743 zsetu(d, 100000UL); | |
744 zrand(a, DEFAULT_RANDOM, QUASIUNIFORM, d); | |
745 assert(zcmp(a, _0), >= 0); | |
746 assert(zcmp(a, d), <= 0); | |
747 zrand(b, DEFAULT_RANDOM, QUASIUNIFORM, d); | |
748 assert(zcmp(b, _0), >= 0); | |
749 assert(zcmp(b, d), <= 0); | |
750 zrand(c, DEFAULT_RANDOM, QUASIUNIFORM, d); | |
751 assert(zcmp(c, _0), >= 0); | |
752 assert(zcmp(c, d), <= 0); | |
753 assert(zcmp(a, b), != 0); | |
754 assert(zcmp(a, c), != 0); | |
755 assert(zcmp(b, c), != 0); | |
756 | |
757 zsetu(d, 100000UL); | |
758 zrand(a, DEFAULT_RANDOM, MODUNIFORM, d); | |
759 assert(zcmp(a, _0), >= 0); | |
760 assert(zcmp(a, d), <= 0); | |
761 zrand(b, DEFAULT_RANDOM, MODUNIFORM, d); | |
762 assert(zcmp(b, _0), >= 0); | |
763 assert(zcmp(b, d), <= 0); | |
764 zrand(c, DEFAULT_RANDOM, MODUNIFORM, d); | |
765 assert(zcmp(c, _0), >= 0); | |
766 assert(zcmp(c, d), <= 0); | |
767 assert(zcmp(a, b), != 0); | |
768 assert(zcmp(a, c), != 0); | |
769 assert(zcmp(b, c), != 0); | |
770 | |
771 assert((zseti(a, -5), zptest(0, a, 100)), == NONPRIME); | |
772 assert((zseti(a, -4), zptest(0, a, 100)), == NONPRIME); | |
773 assert((zseti(a, -3), zptest(0, a, 100)), == NONPRIME); | |
774 assert((zseti(a, -2), zptest(0, a, 100)), == NONPRIME); | |
775 assert((zseti(a, -1), zptest(0, a, 100)), == NONPRIME); | |
776 assert((zseti(a, 0), zptest(0, a, 100)), == NONPRIME); | |
777 assert((zseti(a, 1), zptest(0, a, 100)), == NONPRIME); | |
778 assert((zseti(a, 2), zptest(0, a, 100)), == PRIME); | |
779 assert((zseti(a, 3), zptest(0, a, 100)), == PRIME); | |
780 assert((zseti(a, 4), zptest(0, a, 100)), == NONPRIME); | |
781 assert((zseti(a, 5), zptest(0, a, 100)), != NONPRIME); | |
782 assert((zseti(a, 6), zptest(0, a, 100)), == NONPRIME); | |
783 assert((zseti(a, 7), zptest(0, a, 100)), != NONPRIME); | |
784 assert((zseti(a, 8), zptest(0, a, 100)), == NONPRIME); | |
785 assert((zseti(a, 9), zptest(0, a, 100)), == NONPRIME); | |
786 assert((zseti(a, 10), zptest(0, a, 100)), == NONPRIME); | |
787 assert((zseti(a, 11), zptest(0, a, 100)), != NONPRIME); | |
788 assert((zseti(a, 101), zptest(0, a, 100)), != NONPRIME); | |
789 | |
790 #if defined(ZAHL_UNSAFE) | |
791 (void) env2; | |
792 #else | |
793 assert_nr(zdivmod(a, b, _0, _0)); | |
794 assert_nr(zdivmod(a, b, _1, _0)); | |
795 zdivmod(a, b, _0, _1); | |
796 zdivmod(a, b, _1, _1); | |
797 assert_nr(zdiv(a, _0, _0)); | |
798 assert_nr(zdiv(a, _1, _0)); | |
799 zdiv(a, _0, _1); | |
800 zdiv(a, _1, _1); | |
801 assert_nr(zmod(a, _0, _0)); | |
802 assert_nr(zmod(a, _1, _0)); | |
803 zmod(a, _0, _1); | |
804 zmod(a, _1, _1); | |
805 assert_nr(zpow(a, _0, _0)); | |
806 assert_nr((zneg(_1, _1), zpow(a, _0, _1))); zneg(_1, _1); | |
807 zpow(a, _0, _1); | |
808 zpow(a, _1, _0); | |
809 zneg(_1, _1), zpow(a, _1, _0), zneg(_1, _1); | |
810 assert_nr(zmodmul(a, _1, _1, _0)); | |
811 assert_nr(zmodpow(a, _0, _0, _1)); | |
812 assert_nr((zneg(_1, _1), zmodpow(a, _0, _1, _1))); zneg(_1, _1); | |
813 zmodpow(a, _0, _1, _1); | |
814 zmodpow(a, _1, _0, _1); | |
815 zneg(_1, _1), zmodpow(a, _1, _0, _1), zneg(_1, _1); | |
816 assert_nr(zmodpow(a, _0, _0, _0)); | |
817 assert_nr((zneg(_1, _1), zmodpow(a, _0, _1, _0))); zneg(_1, _1); | |
818 assert_nr(zmodpow(a, _0, _1, _0)); | |
819 assert_nr(zmodpow(a, _1, _0, _0)); | |
820 assert_nr((zneg(_1, _1), zmodpow(a, _1, _0, _0))); zneg(_1, _1); | |
821 assert_nr(zpowu(a, _0, 0)); | |
822 zpowu(a, _0, 1); | |
823 zpowu(a, _1, 0); | |
824 zneg(_1, _1), zpowu(a, _1, 0), zneg(_1, _1); | |
825 assert_nr(zmodpowu(a, _0, 0, _1)); | |
826 zmodpowu(a, _0, 1, _1); | |
827 zmodpowu(a, _1, 0, _1); | |
828 zneg(_1, _1), zmodpowu(a, _1, 0, _1), zneg(_1, _1); | |
829 assert_nr(zmodpowu(a, _0, 0, _0)); | |
830 assert_nr((zneg(_1, _1), zmodpowu(a, _0, 1, _0))); zneg(_1, _1); | |
831 assert_nr(zmodpowu(a, _0, 1, _0)); | |
832 assert_nr(zmodpowu(a, _1, 0, _0)); | |
833 assert_nr((zneg(_1, _1), zmodpowu(a, _1, 0, _0))); zneg(_1, _1); | |
834 assert_nr(zstr_length(a, 0)); | |
835 assert_nr(zstr_length(a, 1)); | |
836 zstr_length(a, 2); | |
837 zstr_length(a, 3); | |
838 #endif | |
839 | |
840 zsetu(a, 1LL); | |
841 assert_s(zstr(a, buf, 1), "1"); | |
842 zsetu(a, 10LL); | |
843 assert_s(zstr(a, buf, 2), "10"); | |
844 zsetu(a, 100LL); | |
845 assert_s(zstr(a, buf, 3), "100"); | |
846 zsetu(a, 1000LL); | |
847 assert_s(zstr(a, buf, 4), "1000"); | |
848 zsetu(a, 10000LL); | |
849 assert_s(zstr(a, buf, BUF_N), "10000"); | |
850 zsetu(a, 100000LL); | |
851 assert_s(zstr(a, buf, BUF_N), "100000"); | |
852 zsetu(a, 1000000LL); | |
853 assert_s(zstr(a, buf, BUF_N), "1000000"); | |
854 zsetu(a, 10000000LL); | |
855 assert_s(zstr(a, buf, BUF_N), "10000000"); | |
856 zsetu(a, 100000000LL); | |
857 assert_s(zstr(a, buf, BUF_N), "100000000"); | |
858 zsetu(a, 999999999LL); | |
859 assert_s(zstr(a, buf, BUF_N), "999999999"); | |
860 zsetu(a, 1000000000LL); | |
861 assert_s(zstr(a, buf, BUF_N), "1000000000"); | |
862 zsetu(a, 1000000001LL); | |
863 assert_s(zstr(a, buf, BUF_N), "1000000001"); | |
864 zsetu(a, 2000000000LL); | |
865 assert_s(zstr(a, buf, BUF_N), "2000000000"); | |
866 zsetu(a, 2050000000LL); | |
867 assert_s(zstr(a, buf, BUF_N), "2050000000"); | |
868 zsetu(a, 2100000000LL); | |
869 assert_s(zstr(a, buf, BUF_N), "2100000000"); | |
870 zsetu(a, 2140000000LL); | |
871 assert_s(zstr(a, buf, BUF_N), "2140000000"); | |
872 zsetu(a, 2147000000LL); | |
873 assert_s(zstr(a, buf, BUF_N), "2147000000"); | |
874 zsetu(a, 2147483000LL); | |
875 assert_s(zstr(a, buf, BUF_N), "2147483000"); | |
876 zsetu(a, 2147483640LL); | |
877 assert_s(zstr(a, buf, BUF_N), "2147483640"); | |
878 zsetu(a, 2147483646LL); | |
879 assert_s(zstr(a, buf, BUF_N), "2147483646"); | |
880 | |
881 zseti(a, 2147483647LL); | |
882 assert_s(zstr(a, buf, BUF_N), "2147483647"); | |
883 zseti(a, -2147483647LL); | |
884 assert_s(zstr(a, buf, BUF_N), "-2147483647"); | |
885 zseti(a, -2147483647LL - 1LL); | |
886 assert_s(zstr(a, buf, BUF_N), "-2147483648"); | |
887 | |
888 zsetu(a, 2147483647ULL); | |
889 assert_s(zstr(a, buf, BUF_N), "2147483647"); | |
890 zsetu(a, 2147483648ULL); | |
891 assert_s(zstr(a, buf, BUF_N), "2147483648"); | |
892 zsetu(a, 2147483649ULL); | |
893 assert_s(zstr(a, buf, BUF_N), "2147483649"); | |
894 | |
895 zsetu(a, 3000000000ULL); | |
896 assert_s(zstr(a, buf, BUF_N), "3000000000"); | |
897 zsetu(a, 3100000000ULL); | |
898 assert_s(zstr(a, buf, BUF_N), "3100000000"); | |
899 zsetu(a, 3200000000ULL); | |
900 assert_s(zstr(a, buf, BUF_N), "3200000000"); | |
901 zsetu(a, 3300000000ULL); | |
902 assert_s(zstr(a, buf, BUF_N), "3300000000"); | |
903 zsetu(a, 3400000000ULL); | |
904 assert_s(zstr(a, buf, BUF_N), "3400000000"); | |
905 zsetu(a, 3500000000ULL); | |
906 assert_s(zstr(a, buf, BUF_N), "3500000000"); | |
907 zsetu(a, 3600000000ULL); | |
908 assert_s(zstr(a, buf, BUF_N), "3600000000"); | |
909 zsetu(a, 3700000000ULL); | |
910 assert_s(zstr(a, buf, BUF_N), "3700000000"); | |
911 zsetu(a, 3800000000ULL); | |
912 assert_s(zstr(a, buf, BUF_N), "3800000000"); | |
913 zsetu(a, 3900000000ULL); | |
914 assert_s(zstr(a, buf, BUF_N), "3900000000"); | |
915 zsetu(a, 3999999999ULL); | |
916 assert_s(zstr(a, buf, BUF_N), "3999999999"); | |
917 zsetu(a, 4000000000ULL); | |
918 assert_s(zstr(a, buf, BUF_N), "4000000000"); | |
919 zsetu(a, 4000000001ULL); | |
920 assert_zu(zstr_length(a, 10), 10); | |
921 assert_s(zstr(a, buf, BUF_N), "4000000001"); | |
922 | |
923 zsetu(a, 4000000000ULL); | |
924 zsetu(b, 4000000000ULL); | |
925 zadd(c, a, a); | |
926 zsets(d, "8000000000"); | |
927 assert(zcmp(c, d), == 0); | |
928 zadd(c, a, b); | |
929 assert(zcmp(c, d), == 0); | |
930 zadd(c, c, a); | |
931 zsets(d, "12000000000"); | |
932 assert(zcmp(c, d), == 0); | |
933 zsub(c, c, a); | |
934 zsets(d, "8000000000"); | |
935 assert(zcmp(c, d), == 0); | |
936 zsub(c, c, a); | |
937 zsets(d, "4000000000"); | |
938 assert(zcmp(c, d), == 0); | |
939 zsets(d, "8000000000"); | |
940 zrsh(d, d, 1); | |
941 assert(zcmp(c, d), == 0); | |
942 zsets(a, "6234216714"); | |
943 zsets(b, "9424614147"); | |
944 zsets(d, "830476546"); | |
945 zand(c, a, b); | |
946 assert(zcmp(c, d), == 0); | |
947 zsets(a, "234216714"); | |
948 zsets(b, "9424614147"); | |
949 zsets(d, "9629466379"); | |
950 zor(c, a, b); | |
951 assert(zcmp(c, d), == 0); | |
952 zsets(a, "6234216714"); | |
953 zsets(b, "9424614147"); | |
954 zsets(d, "13997877769"); | |
955 zxor(c, a, b); | |
956 assert(zcmp(c, d), == 0); | |
957 zsets(a, "34216714"); | |
958 zsets(b, "9424614147"); | |
959 zsets(d, "9458821129"); | |
960 zxor(c, a, b); | |
961 assert(zcmp(c, d), == 0); | |
962 zsetu(a, 1000000000ULL); | |
963 zsets(d, "1000000000000000000"); | |
964 zmul(c, a, a); | |
965 assert(zcmp(c, d), == 0); | |
966 zdiv(c, c, a); | |
967 assert(zcmp(c, a), == 0); | |
968 zsetu(a, 1000000000ULL); | |
969 zsets(d, "1000000000000000000"); | |
970 zsqr(c, a); | |
971 assert(zcmp(c, d), == 0); | |
972 zsetu(a, 1000000000ULL); | |
973 zmodpowu(c, a, 5, _3); | |
974 assert(zcmpu(c, 1), == 0); | |
975 zsetu(a, 1000000000ULL); | |
976 zsets(d, "1"); | |
977 zpowu(c, a, 0); | |
978 assert(zcmp(c, d), == 0); | |
979 zsetu(a, 1000000000ULL); | |
980 zsets(d, "1000000000"); | |
981 zpowu(c, a, 1); | |
982 assert(zcmp(c, d), == 0); | |
983 zsetu(a, 1000000000ULL); | |
984 zsets(d, "1000000000000000000"); | |
985 zpowu(c, a, 2); | |
986 assert(zcmp(c, d), == 0); | |
987 zsetu(a, 1000000000ULL); | |
988 zsets(b, "1000000000000000000"); | |
989 zsets(d, "1000000000000000000000000000"); | |
990 zmul(c, a, b); | |
991 assert(zcmp(c, d), == 0); | |
992 zsetu(a, 1000000000ULL); | |
993 zsets(d, "1000000000000000000000000000"); | |
994 zmul(b, a, a); | |
995 zmul(b, b, a); | |
996 assert(zcmp(c, d), == 0); | |
997 zsetu(a, 1000000000ULL); | |
998 zsets(d, "1000000000000000000000000000"); | |
999 zpowu(c, a, 3); | |
1000 assert(zcmp(c, d), == 0); | |
1001 zsetu(a, 1000000000ULL); | |
1002 zsets(d, "1000000000000000000000000000000000000"); | |
1003 zpowu(c, a, 4); | |
1004 assert(zcmp(c, d), == 0); | |
1005 zsetu(a, 1000000000ULL); | |
1006 zsets(d, "1000000000000000000000000000000000000000000000"); | |
1007 zpowu(c, a, 5); | |
1008 assert(zcmp(c, d), == 0); | |
1009 | |
1010 zsetu(a, 4294967294ULL); | |
1011 assert_s(zstr(a, buf, BUF_N), "4294967294"); | |
1012 zsetu(a, 4294967295ULL); | |
1013 assert_s(zstr(a, buf, BUF_N), "4294967295"); | |
1014 zsetu(a, 4294967296ULL); | |
1015 assert_s(zstr(a, buf, BUF_N), "4294967296"); | |
1016 zsetu(a, 4294967297ULL); | |
1017 assert_s(zstr(a, buf, BUF_N), "4294967297"); | |
1018 | |
1019 zseti(a, 9223372036854775807LL); | |
1020 assert_s(zstr(a, buf, BUF_N), "9223372036854775807"); | |
1021 zseti(a, -9223372036854775807LL); | |
1022 assert_s(zstr(a, buf, BUF_N), "-9223372036854775807"); | |
1023 zseti(a, -9223372036854775807LL - 1LL); | |
1024 assert_s(zstr(a, buf, BUF_N), "-9223372036854775808"); | |
1025 | |
1026 zsetu(a, 18446744073709551614ULL); | |
1027 assert_s(zstr(a, buf, BUF_N), "18446744073709551614"); | |
1028 zsetu(a, 18446744073709551615ULL); | |
1029 assert_s(zstr(a, buf, BUF_N), "18446744073709551615"); | |
1030 zadd(a, a, _1); | |
1031 assert_s(zstr(a, buf, BUF_N), "18446744073709551616"); | |
1032 zadd(a, a, _1); | |
1033 assert_s(zstr(a, buf, BUF_N), "18446744073709551617"); | |
1034 | |
1035 zsets(a, "1000000000000000000000000000000"); | |
1036 assert_s(zstr(a, buf, BUF_N), "1000000000000000000000000000000"); | |
1037 zsets(a, "+1000000000000000000000000000000"); | |
1038 assert_s(zstr(a, buf, BUF_N), "1000000000000000000000000000000"); | |
1039 zsets(a, "-1000000000000000000000000000000"); | |
1040 assert_s(zstr(a, buf, BUF_N), "-1000000000000000000000000000000"… | |
1041 | |
1042 zsetu(a, 1000000000000000ULL); | |
1043 zsqr(a, a); | |
1044 assert_s(zstr(a, buf, BUF_N), "1000000000000000000000000000000"); | |
1045 | |
1046 #include "test-random.c" | |
1047 | |
1048 done: | |
1049 zfree(a), zfree(b), zfree(c), zfree(d), zfree(_0), zfree(_1), zf… | |
1050 zunsetup(); | |
1051 return ret; | |
1052 } | |
1053 |