code wiki / (root) / nx_bits_test.nx

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}