@@ -77,3 +77,77 @@ TEST(BitTest, byte_swap_64) {
77
77
ADD_FAILURE () << " BYTE_ORDER is neither BIG_ENDIAN nor LITTLE_ENDIAN." ;
78
78
#endif
79
79
}
80
+
81
+ TEST (BitTest, CountlZero) {
82
+ uint8_t Z8 = 0 ;
83
+ uint16_t Z16 = 0 ;
84
+ uint32_t Z32 = 0 ;
85
+ uint64_t Z64 = 0 ;
86
+ EXPECT_EQ (8 , llvm::countl_zero (Z8));
87
+ EXPECT_EQ (16 , llvm::countl_zero (Z16));
88
+ EXPECT_EQ (32 , llvm::countl_zero (Z32));
89
+ EXPECT_EQ (64 , llvm::countl_zero (Z64));
90
+
91
+ uint8_t NZ8 = 42 ;
92
+ uint16_t NZ16 = 42 ;
93
+ uint32_t NZ32 = 42 ;
94
+ uint64_t NZ64 = 42 ;
95
+ EXPECT_EQ (2 , llvm::countl_zero (NZ8));
96
+ EXPECT_EQ (10 , llvm::countl_zero (NZ16));
97
+ EXPECT_EQ (26 , llvm::countl_zero (NZ32));
98
+ EXPECT_EQ (58 , llvm::countl_zero (NZ64));
99
+
100
+ EXPECT_EQ (8 , llvm::countl_zero (0x00F000FFu ));
101
+ EXPECT_EQ (8 , llvm::countl_zero (0x00F12345u ));
102
+ for (unsigned i = 0 ; i <= 30 ; ++i) {
103
+ EXPECT_EQ (int (31 - i), llvm::countl_zero (1u << i));
104
+ }
105
+
106
+ EXPECT_EQ (8 , llvm::countl_zero (0x00F1234500F12345ULL ));
107
+ EXPECT_EQ (1 , llvm::countl_zero (1ULL << 62 ));
108
+ for (unsigned i = 0 ; i <= 62 ; ++i) {
109
+ EXPECT_EQ (int (63 - i), llvm::countl_zero (1ULL << i));
110
+ }
111
+ }
112
+
113
+ TEST (BitTest, BitWidth) {
114
+ EXPECT_EQ (0 , llvm::bit_width (uint8_t (0 )));
115
+ EXPECT_EQ (0 , llvm::bit_width (uint16_t (0 )));
116
+ EXPECT_EQ (0 , llvm::bit_width (uint32_t (0 )));
117
+ EXPECT_EQ (0 , llvm::bit_width (uint64_t (0 )));
118
+
119
+ EXPECT_EQ (1 , llvm::bit_width (uint8_t (1 )));
120
+ EXPECT_EQ (1 , llvm::bit_width (uint16_t (1 )));
121
+ EXPECT_EQ (1 , llvm::bit_width (uint32_t (1 )));
122
+ EXPECT_EQ (1 , llvm::bit_width (uint64_t (1 )));
123
+
124
+ EXPECT_EQ (2 , llvm::bit_width (uint8_t (2 )));
125
+ EXPECT_EQ (2 , llvm::bit_width (uint16_t (2 )));
126
+ EXPECT_EQ (2 , llvm::bit_width (uint32_t (2 )));
127
+ EXPECT_EQ (2 , llvm::bit_width (uint64_t (2 )));
128
+
129
+ EXPECT_EQ (2 , llvm::bit_width (uint8_t (3 )));
130
+ EXPECT_EQ (2 , llvm::bit_width (uint16_t (3 )));
131
+ EXPECT_EQ (2 , llvm::bit_width (uint32_t (3 )));
132
+ EXPECT_EQ (2 , llvm::bit_width (uint64_t (3 )));
133
+
134
+ EXPECT_EQ (3 , llvm::bit_width (uint8_t (4 )));
135
+ EXPECT_EQ (3 , llvm::bit_width (uint16_t (4 )));
136
+ EXPECT_EQ (3 , llvm::bit_width (uint32_t (4 )));
137
+ EXPECT_EQ (3 , llvm::bit_width (uint64_t (4 )));
138
+
139
+ EXPECT_EQ (7 , llvm::bit_width (uint8_t (0x7f )));
140
+ EXPECT_EQ (15 , llvm::bit_width (uint16_t (0x7fff )));
141
+ EXPECT_EQ (31 , llvm::bit_width (uint32_t (0x7fffffffu )));
142
+ EXPECT_EQ (63 , llvm::bit_width (uint64_t (0x7fffffffffffffffull )));
143
+
144
+ EXPECT_EQ (8 , llvm::bit_width (uint8_t (0x80 )));
145
+ EXPECT_EQ (16 , llvm::bit_width (uint16_t (0x8000 )));
146
+ EXPECT_EQ (32 , llvm::bit_width (uint32_t (0x80000000u )));
147
+ EXPECT_EQ (64 , llvm::bit_width (uint64_t (0x8000000000000000ull )));
148
+
149
+ EXPECT_EQ (8 , llvm::bit_width (uint8_t (0xff )));
150
+ EXPECT_EQ (16 , llvm::bit_width (uint16_t (0xffff )));
151
+ EXPECT_EQ (32 , llvm::bit_width (uint32_t (0xffffffffu )));
152
+ EXPECT_EQ (64 , llvm::bit_width (uint64_t (0xffffffffffffffffull )));
153
+ }
0 commit comments