Introduction
Introduction Statistics Contact Development Disclaimer Help
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
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.