test.c - libzahl - big integer library
 (HTM) git clone git://git.suckless.org/libzahl
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) 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, but got %i.\n",\
           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, but got %zu.\n",\
           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, but got %s.\n",\
           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 returned.\n",\
           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 yeilding a lot of stupid
           63          * warnings. auto variables are not guaranteed to be readable after a long jump. */
           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), zinit(_2), zinit(_3);
           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), zfree(_2), zfree(_3);
         1050         zunsetup();
         1051         return ret;
         1052 }
         1053