nx_bits_test.nx source
↩ module page · 73 lines · 2538 B
1// nx_bits_test.nx -- smoke for nx_bits primitives.
2
3import "syscalls.nx"
4import "nx_bits.nx"
5
6func main() -> i64 {
7 // popcount
8 if nx_bits_popcount64(0) != 0 { return 11 }
9 if nx_bits_popcount64(0xFF) != 8 { return 12 }
10 if nx_bits_popcount64(0xFFFFFFFF) != 32 { return 13 }
11 if nx_bits_popcount64(-1) != 64 { return 14 } // all bits set
12 if nx_bits_popcount32(0xFF) != 8 { return 15 }
13 if nx_bits_popcount32(0xFFFFFFFF) != 32 { return 16 }
14
15 // clz32
16 if nx_bits_clz32(0) != 32 { return 21 }
17 if nx_bits_clz32(1) != 31 { return 22 }
18 if nx_bits_clz32(0x80000000) != 0 { return 23 }
19 if nx_bits_clz32(0x12345678) != 3 { return 24 }
20
21 // ctz32
22 if nx_bits_ctz32(0) != 32 { return 31 }
23 if nx_bits_ctz32(1) != 0 { return 32 }
24 if nx_bits_ctz32(8) != 3 { return 33 }
25 if nx_bits_ctz32(0x80000000) != 31 { return 34 }
26
27 // lowest set bit
28 if nx_bits_lowest(0x12) != 0x2 { return 41 }
29 if nx_bits_lowest(0x80) != 0x80 { return 42 }
30
31 // clear lowest set bit
32 if nx_bits_clear_lowest(0x12) != 0x10 { return 51 }
33 if nx_bits_clear_lowest(0x80) != 0 { return 52 }
34
35 // is_pow2
36 if nx_bits_is_pow2(0) != 0 { return 61 }
37 if nx_bits_is_pow2(1) != 1 { return 62 }
38 if nx_bits_is_pow2(2) != 1 { return 63 }
39 if nx_bits_is_pow2(3) != 0 { return 64 }
40 if nx_bits_is_pow2(1024) != 1 { return 65 }
41 if nx_bits_is_pow2(1023) != 0 { return 66 }
42
43 // next_pow2_32
44 if nx_bits_next_pow2_32(0) != 1 { return 71 }
45 if nx_bits_next_pow2_32(1) != 1 { return 72 }
46 if nx_bits_next_pow2_32(3) != 4 { return 73 }
47 if nx_bits_next_pow2_32(5) != 8 { return 74 }
48 if nx_bits_next_pow2_32(1000) != 1024 { return 75 }
49
50 // bswap64
51 if nx_bits_bswap64(0x0123456789ABCDEF) != 0xEFCDAB8967452301 { return 81 }
52
53 // parity
54 if nx_bits_parity64(0) != 0 { return 91 }
55 if nx_bits_parity64(1) != 1 { return 92 }
56 if nx_bits_parity64(3) != 0 { return 93 }
57 if nx_bits_parity64(0xFF) != 0 { return 94 }
58 if nx_bits_parity64(0x7F) != 1 { return 95 }
59
60 // floor_log2
61 if nx_bits_floor_log2(0) != -1 { return 101 }
62 if nx_bits_floor_log2(1) != 0 { return 102 }
63 if nx_bits_floor_log2(2) != 1 { return 103 }
64 if nx_bits_floor_log2(1024) != 10 { return 104 }
65 if nx_bits_floor_log2(1000000) != 19 { return 105 }
66
67 // bextr
68 if nx_bits_bextr(0x12345678, 0, 8) != 0x78 { return 111 }
69 if nx_bits_bextr(0x12345678, 8, 8) != 0x56 { return 112 }
70 if nx_bits_bextr(0x12345678, 24, 8) != 0x12 { return 113 }
71
72 return 0
73}