1 #define CCAN_BITOPS_DEBUG 1
2 #include <ccan/bitops/bitops.c>
3 #include <ccan/tap/tap.h>
9 /* This is how many tests you plan to run */
10 plan_tests(68 + 6 * (31 + 63));
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);
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);
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);
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)
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
111 /* This exits depending on whether all tests passed */
112 return exit_status();