d54cad1d1c4a51beb3af6758f4e7f3ee5ab1547c
[ccan] / ccan / tdb2 / test / run-001-fls.c
1 #include <ccan/tdb2/tdb.c>
2 #include <ccan/tdb2/open.c>
3 #include <ccan/tdb2/free.c>
4 #include <ccan/tdb2/lock.c>
5 #include <ccan/tdb2/io.c>
6 #include <ccan/tdb2/hash.c>
7 #include <ccan/tdb2/transaction.c>
8 #include <ccan/tdb2/check.c>
9 #include <ccan/tap/tap.h>
10
11 static unsigned int dumb_fls(uint64_t num)
12 {
13         int i;
14
15         for (i = 63; i >= 0; i--) {
16                 if (num & (1ULL << i))
17                         break;
18         }
19         return i + 1;
20 }
21
22 int main(int argc, char *argv[])
23 {
24         unsigned int i, j;
25
26         plan_tests(64 * 64 + 2);
27
28         ok1(fls64(0) == 0);
29         ok1(dumb_fls(0) == 0);
30
31         for (i = 0; i < 64; i++) {
32                 for (j = 0; j < 64; j++) {
33                         uint64_t val = (1ULL << i) | (1ULL << j);
34                         ok(fls64(val) == dumb_fls(val),
35                            "%llu -> %u should be %u", (long long)val,
36                            fls64(val), dumb_fls(val));
37                 }
38         }
39         return exit_status();
40 }