| benchmark.c - libzahl - big integer library | |
| git clone git://git.suckless.org/libzahl | |
| Log | |
| Files | |
| Refs | |
| README | |
| LICENSE | |
| --- | |
| benchmark.c (3504B) | |
| --- | |
| 1 #include "util.h" | |
| 2 | |
| 3 | |
| 4 #define BENCHMARK(INSTRUCTION, FAST)\ | |
| 5 do {\ | |
| 6 i = FAST ? 1000000L : 1000L;\ | |
| 7 TIC;\ | |
| 8 while (i--) {\ | |
| 9 (void)INSTRUCTION;\ | |
| 10 }\ | |
| 11 TOC;\ | |
| 12 printf("%s: %s %s (152 bits)\n",\ | |
| 13 #INSTRUCTION, STIME, FAST ? "µs" : "ms");\ | |
| 14 } while (0) | |
| 15 | |
| 16 | |
| 17 int | |
| 18 main(int argc, char *argv[]) | |
| 19 { | |
| 20 char buf[2000]; | |
| 21 z_t a, b, c, d, tiny; | |
| 22 jmp_buf jmp; | |
| 23 size_t i; | |
| 24 | |
| 25 benchmark_init(); | |
| 26 | |
| 27 if (setjmp(jmp)) { | |
| 28 zperror(argv[0]); | |
| 29 return 1; | |
| 30 } | |
| 31 zsetup(jmp); | |
| 32 zinit(a); | |
| 33 zinit(b); | |
| 34 zinit(c); | |
| 35 zinit(d); | |
| 36 zinit(tiny); | |
| 37 | |
| 38 zsets(a, "5495468234592964023447280368442884381000481887"); | |
| 39 zsets(b, "4781084818570683458641843084358135840548636081"); | |
| 40 zsets(tiny, "5"); | |
| 41 | |
| 42 BENCHMARK(zset(c, a), 1); | |
| 43 BENCHMARK(zseti(c, 1000000000LL), 1); | |
| 44 BENCHMARK(zsetu(c, 1000000000ULL), 1); | |
| 45 BENCHMARK(zneg(c, a), 1); | |
| 46 BENCHMARK(zneg(a, a), 1); | |
| 47 BENCHMARK(zabs(c, a), 1); | |
| 48 BENCHMARK(zabs(a, a), 1); | |
| 49 BENCHMARK(zadd_unsigned(c, a, b), 1); | |
| 50 BENCHMARK(zsub_unsigned(c, a, b), 1); | |
| 51 BENCHMARK(zadd(c, a, b), 1); | |
| 52 BENCHMARK(zsub(c, a, b), 1); | |
| 53 BENCHMARK(zand(c, a, b), 1); | |
| 54 BENCHMARK(zor(c, a, b), 1); | |
| 55 BENCHMARK(zxor(c, a, b), 1); | |
| 56 BENCHMARK(znot(c, a), 1); | |
| 57 BENCHMARK(zeven(a), 1); | |
| 58 BENCHMARK(zodd(a), 1); | |
| 59 BENCHMARK(zeven_nonzero(a), 1); | |
| 60 BENCHMARK(zodd_nonzero(a), 1); | |
| 61 BENCHMARK(zzero(a), 1); | |
| 62 BENCHMARK(zsignum(a), 1); | |
| 63 BENCHMARK(zbits(a), 1); | |
| 64 BENCHMARK(zlsb(a), 1); | |
| 65 BENCHMARK(zswap(a, b), 1); | |
| 66 BENCHMARK(zlsh(c, a, 76), 1); | |
| 67 BENCHMARK(zrsh(c, a, 76), 1); | |
| 68 BENCHMARK(ztrunc(c, a, 76), 1); | |
| 69 BENCHMARK(ztrunc(c, c, 76), 1); | |
| 70 BENCHMARK(zsplit(c, d, a, 76), 1); | |
| 71 BENCHMARK(zcmpmag(a, b), 1); | |
| 72 BENCHMARK(zcmp(a, b), 1); | |
| 73 BENCHMARK(zcmpi(a, 1000000000LL), 1); | |
| 74 BENCHMARK(zcmpi(a, -1000000000LL), 1); | |
| 75 BENCHMARK(zcmpu(a, 1000000000ULL), 1); | |
| 76 BENCHMARK(zbset(c, a, 76, 1), 1); | |
| 77 BENCHMARK(zbset(a, a, 76, 1), 1); | |
| 78 BENCHMARK(zbset(c, a, 76, 0), 1); | |
| 79 BENCHMARK(zbset(c, c, 76, 0), 1); | |
| 80 BENCHMARK(zbset(c, a, 76, -1), 1); | |
| 81 BENCHMARK(zbset(a, a, 76, -1), 1); | |
| 82 BENCHMARK(zbtest(a, 76), 1); | |
| 83 #ifndef HEBIMATH /* These take too long in hebimath because of inefficie… | |
| 84 BENCHMARK(zgcd(c, a, b), 0); | |
| 85 #endif | |
| 86 BENCHMARK(zmul(c, a, b), 0); | |
| 87 BENCHMARK(zmul(c, a, a), 0); | |
| 88 BENCHMARK(zsqr(c, a), 0); | |
| 89 #ifndef HEBIMATH /* Ditto. */ | |
| 90 zsets(d, "1484298084218938358480511181388394862858002249"); | |
| 91 BENCHMARK(zmodmul(c, a, b, d), 0); | |
| 92 BENCHMARK(zmodmul(c, a, a, d), 0); | |
| 93 BENCHMARK(zmodsqr(c, a, d), 0); | |
| 94 BENCHMARK(zmodmul(c, a, b, tiny), 0); | |
| 95 BENCHMARK(zmodmul(c, a, a, tiny), 0); | |
| 96 BENCHMARK(zmodsqr(c, a, tiny), 0); | |
| 97 zsets(d, "12"); | |
| 98 BENCHMARK(zpow(c, a, d), 0); /* Memory corruption when using h… | |
| 99 BENCHMARK(zpowu(c, a, 12), 0); /* Memory corruption when using h… | |
| 100 BENCHMARK(zmodpow(c, a, d, b), 0); | |
| 101 BENCHMARK(zmodpowu(c, a, 12, b), 0); | |
| 102 #endif | |
| 103 BENCHMARK(zsets(c, "54954682345929640234472803684428843810004818… | |
| 104 BENCHMARK(zstr_length(a, 10), 0); | |
| 105 BENCHMARK(zstr(a, buf, 0), 0); | |
| 106 BENCHMARK(zstr(a, buf, sizeof(buf) - 1), 0); | |
| 107 BENCHMARK(zrand(c, DEFAULT_RANDOM, QUASIUNIFORM, a), 0); | |
| 108 BENCHMARK(zrand(c, DEFAULT_RANDOM, UNIFORM, a), 0); | |
| 109 BENCHMARK(zrand(c, DEFAULT_RANDOM, MODUNIFORM, a), 0); | |
| 110 BENCHMARK(zptest(d, a, 5), 0); | |
| 111 BENCHMARK(zsave(a, buf), 1); | |
| 112 BENCHMARK(zload(a, buf), 1); | |
| 113 BENCHMARK(zdiv(c, a, b), 1); | |
| 114 BENCHMARK(zmod(c, a, b), 1); | |
| 115 BENCHMARK(zdivmod(c, d, a, b), 1); | |
| 116 #ifndef HEBIMATH /* Ditto. */ | |
| 117 BENCHMARK(zdiv(c, a, tiny), 0); | |
| 118 BENCHMARK(zmod(c, a, tiny), 0); | |
| 119 BENCHMARK(zdivmod(c, d, a, tiny), 0); | |
| 120 #endif | |
| 121 | |
| 122 zfree(a); | |
| 123 zfree(b); | |
| 124 zfree(c); | |
| 125 zfree(d); | |
| 126 zfree(tiny); | |
| 127 zunsetup(); | |
| 128 return 0; | |
| 129 (void) argc; | |
| 130 } |