1 #define _POSIX_C_SOURCE 200809L
10 #define B(t) void t();
16 void error__(const char *n, int l, const char *s, ...) {
17 fprintf(stderr, "use error in tests only\n");
21 static unsigned long long start;
22 static unsigned long long dt;
23 //static unsigned long long bytes;
25 #define SEC 1000000000ULL
26 #define MAXN 1000000000
28 static unsigned long long tic() {
31 if (clock_gettime(CLOCK_MONOTONIC, &ts) < 0) {
32 fprintf(stderr, "bench: clock_gettime failed: %s\n", strerror(errno));
35 return ts.tv_sec*SEC + ts.tv_nsec;
56 unsigned long long n = dt/N;
72 static void run(const char *name, void (*f)()) {
73 fprintf(stderr, "%s:", name);
74 for (N=1; ; N=nextN()) {
79 // fprintf(stderr, "%10d%12llu\n", N, ns);
80 if (dt >= SEC || N >= MAXN)
83 fprintf(stderr, "bench: fatal: N <= 0\n");
88 fprintf(stderr, "%10d%10llu ns/op\n", N, dt/N);
90 fprintf(stderr, "%10d%13.2f ns/op\n", N, (double)dt/N);
94 #define B(t) run(#t, t);