]> git.ozlabs.org Git - ccan/blob - ccan/bitops/test/run.c
failtest, rbuf: fix up incorrect lseek arg order.
[ccan] / ccan / bitops / test / run.c
1 #define CCAN_BITOPS_DEBUG 1
2 #include <ccan/bitops/bitops.c>
3 #include <ccan/tap/tap.h>
4
5 int main(void)
6 {
7         int i;
8
9         /* This is how many tests you plan to run */
10         plan_tests(68 + 6 * (31 + 63));
11
12         for (i = 0; i < 32; i++)
13                 ok1(bitops_ffs32(1 << i) == i+1);
14         ok1(bitops_ffs32(0) == 0);
15         for (i = 0; i < 64; i++)
16                 ok1(bitops_ffs64((uint64_t)1 << i) == i+1);
17         ok1(bitops_ffs64(0) == 0);
18
19         /* Higher bits don't affect result */
20         for (i = 0; i < 32; i++)
21                 ok1(bitops_ffs32(0xFFFFFFFFFFFFFFFFULL << i) == i+1);
22         ok1(bitops_ffs32(0) == 0);
23         for (i = 0; i < 64; i++)
24                 ok1(bitops_ffs64(0xFFFFFFFFFFFFFFFFULL << i) == i+1);
25         ok1(bitops_ffs64(0) == 0);
26
27         for (i = 0; i < 32; i++)
28                 ok1(bitops_clz32(1 << i) == 31 - i);
29         for (i = 0; i < 64; i++)
30                 ok1(bitops_clz64((uint64_t)1 << i) == 63 - i);
31
32         /* Lower bits don't effect results */
33         for (i = 0; i < 32; i++)
34                 ok1(bitops_clz32((1 << i) + (1 << i)-1) == 31 - i);
35         for (i = 0; i < 64; i++)
36                 ok1(bitops_clz64(((uint64_t)1 << i) + ((uint64_t)1 << i)-1)
37                     == 63 - i);
38
39         for (i = 0; i < 32; i++)
40                 ok1(bitops_ctz32(1 << i) == i);
41         for (i = 0; i < 64; i++)
42                 ok1(bitops_ctz64((uint64_t)1 << i) == i);
43
44         /* Higher bits don't affect result */
45         for (i = 0; i < 32; i++)
46                 ok1(bitops_ctz32(0xFFFFFFFFFFFFFFFFULL << i) == i);
47         for (i = 0; i < 64; i++)
48                 ok1(bitops_ctz64(0xFFFFFFFFFFFFFFFFULL << i) == i);
49
50         /* Now we've tested low-level, test higher ones */
51         ok1(bitops_ls32(1U) == 0);
52         ok1(bitops_ls32(0xFFFFFFFF) == 0);
53         ok1(bitops_ls32(1U << 31) == 31);
54         ok1(bitops_ls32(0xFFFF0000) == 16);
55
56         ok1(bitops_ls64(1U) == 0);
57         ok1(bitops_ls64(0xFFFFFFFF) == 0);
58         ok1(bitops_ls64(1U << 31) == 31);
59         ok1(bitops_ls64(0xFFFF0000) == 16);
60         ok1(bitops_ls64((uint64_t)1 << 32) == 32);
61         ok1(bitops_ls64((uint64_t)1 << 63) == 63);
62         ok1(bitops_ls64(0xFFFFFFFFFFFF0000ULL) == 16);
63         ok1(bitops_ls64(0xFFFF000000000000ULL) == 48);
64
65         ok1(bitops_hs32(1U) == 0);
66         ok1(bitops_hs32(0xFFFFFFFF) == 31);
67         ok1(bitops_hs32(1U << 31) == 31);
68         ok1(bitops_hs32(0xFFFF0000) == 31);
69         ok1(bitops_hs32(0x0000FFFF) == 15);
70
71         ok1(bitops_hs64(1U) == 0);
72         ok1(bitops_hs64(0xFFFFFFFF) == 31);
73         ok1(bitops_hs64(1U << 31) == 31);
74         ok1(bitops_hs64(0xFFFF0000) == 31);
75         ok1(bitops_hs32(0x0000FFFF) == 15);
76         ok1(bitops_hs64((uint64_t)1 << 32) == 32);
77         ok1(bitops_hs64((uint64_t)1 << 63) == 63);
78         ok1(bitops_hs64(0xFFFFFFFFFFFF0000ULL) == 63);
79         ok1(bitops_hs64(0x0000FFFF00000000ULL) == 47);
80
81         ok1(bitops_lc32(~(1U)) == 0);
82         ok1(bitops_lc32(~(0xFFFFFFFF)) == 0);
83         ok1(bitops_lc32(~(1U << 31)) == 31);
84         ok1(bitops_lc32(~(0xFFFF0000)) == 16);
85
86         ok1(bitops_lc64(~(1U)) == 0);
87         ok1(bitops_lc64(~(0xFFFFFFFF)) == 0);
88         ok1(bitops_lc64(~(1U << 31)) == 31);
89         ok1(bitops_lc64(~(0xFFFF0000)) == 16);
90         ok1(bitops_lc64(~((uint64_t)1 << 32)) == 32);
91         ok1(bitops_lc64(~((uint64_t)1 << 63)) == 63);
92         ok1(bitops_lc64(~(0xFFFFFFFFFFFF0000ULL)) == 16);
93         ok1(bitops_lc64(~(0xFFFF000000000000ULL)) == 48);
94
95         ok1(bitops_hc32(~(1U)) == 0);
96         ok1(bitops_hc32(~(0xFFFFFFFF)) == 31);
97         ok1(bitops_hc32(~(1U << 31)) == 31);
98         ok1(bitops_hc32(~(0xFFFF0000)) == 31);
99         ok1(bitops_hc32(~(0x0000FFFF)) == 15);
100
101         ok1(bitops_hc64(~(1ULL)) == 0);
102         ok1(bitops_hc64(~(0xFFFFFFFFULL)) == 31);
103         ok1(bitops_hc64(~(1ULL << 31)) == 31);
104         ok1(bitops_hc64(~(0xFFFF0000ULL)) == 31);
105         ok1(bitops_hc64(~(0x0000FFFFULL)) == 15);
106         ok1(bitops_hc64(~((uint64_t)1 << 32)) == 32);
107         ok1(bitops_hc64(~((uint64_t)1 << 63)) == 63);
108         ok1(bitops_hc64(~(0xFFFFFFFFFFFF0000ULL)) == 63);
109         ok1(bitops_hc64(~(0x0000FFFF00000000ULL)) == 47);
110
111         /* This exits depending on whether all tests passed */
112         return exit_status();
113 }