implement 16 and 8 bits clz, ctz and popcount
This is needed for utils::bitset8 and bitset16.
This commit is contained in:
committed by
Mathias Agopian
parent
bf8bcef35c
commit
420f06bef3
@@ -20,6 +20,8 @@
|
||||
|
||||
#include <array>
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
using namespace utils;
|
||||
|
||||
template <typename T>
|
||||
@@ -58,6 +60,20 @@ TEST(AlgorithmTest, clz) {
|
||||
EXPECT_EQ(j, details::clz(i|1));
|
||||
EXPECT_EQ(j, count_leading_zeros(i));
|
||||
}
|
||||
for (uint16_t i = 1, j = 15; j < 16; i *= 2, j--) {
|
||||
EXPECT_EQ(j, clz(i));
|
||||
EXPECT_EQ(j, clz(uint16_t(i|1)));
|
||||
EXPECT_EQ(j, details::clz(i));
|
||||
EXPECT_EQ(j, details::clz(uint16_t(i|1)));
|
||||
EXPECT_EQ(j, count_leading_zeros(i));
|
||||
}
|
||||
for (uint8_t i = 1, j = 7; j < 8; i *= 2, j--) {
|
||||
EXPECT_EQ(j, clz(i));
|
||||
EXPECT_EQ(j, clz(uint8_t(i|1)));
|
||||
EXPECT_EQ(j, details::clz(i));
|
||||
EXPECT_EQ(j, details::clz(uint8_t(i|1)));
|
||||
EXPECT_EQ(j, count_leading_zeros(i));
|
||||
}
|
||||
}
|
||||
|
||||
TEST(AlgorithmTest, details_ctz) {
|
||||
@@ -80,6 +96,16 @@ TEST(AlgorithmTest, ctz) {
|
||||
EXPECT_EQ(j, details::ctz(i));
|
||||
EXPECT_EQ(j, count_trailing_zeros(i));
|
||||
}
|
||||
for (uint16_t i = 1, j = 0; j < 16; i *= 2, j++) {
|
||||
EXPECT_EQ(j, ctz(i));
|
||||
EXPECT_EQ(j, details::ctz(i));
|
||||
EXPECT_EQ(j, count_trailing_zeros(i));
|
||||
}
|
||||
for (uint8_t i = 1, j = 0; j < 8; i *= 2, j++) {
|
||||
EXPECT_EQ(j, ctz(i));
|
||||
EXPECT_EQ(j, details::ctz(i));
|
||||
EXPECT_EQ(j, count_trailing_zeros(i));
|
||||
}
|
||||
}
|
||||
|
||||
TEST(AlgorithmTest, details_popcount) {
|
||||
|
||||
Reference in New Issue
Block a user