添加函数 MathUtil::popcount,用于计算一个数字中二进制1的个数
This commit is contained in:
@@ -76,4 +76,26 @@ TEST(MathUtil, Basic)
|
||||
EXPECT_EQ_4X4_T_APPROX(m1, gm1, std::numeric_limits<float>::epsilon() * 100);
|
||||
}
|
||||
}
|
||||
|
||||
//couting bit set
|
||||
{
|
||||
EXPECT_EQ(MathUtil::popcount((uint8_t)(0x0)), 0);
|
||||
EXPECT_EQ(MathUtil::popcount((uint8_t)(0xFF)), 8);
|
||||
EXPECT_EQ(MathUtil::popcount((uint16_t)(0x0)), 0);
|
||||
EXPECT_EQ(MathUtil::popcount((uint16_t)(0xFFFF)), 16);
|
||||
EXPECT_EQ(MathUtil::popcount((uint32_t)(0x0)), 0);
|
||||
EXPECT_EQ(MathUtil::popcount((uint32_t)(0xFFFFFFFF)), 32);
|
||||
|
||||
for(int32_t i=0; i<100; i++)
|
||||
{
|
||||
uint8_t v8 = (uint8_t)MathUtil::rangeRandom(0, 0xFF);
|
||||
EXPECT_EQ(MathUtil::popcount(v8), __popcnt(v8));
|
||||
|
||||
uint16_t v16 = (uint16_t)MathUtil::rangeRandom(0, 0xFFFF);
|
||||
EXPECT_EQ(MathUtil::popcount(v16), __popcnt(v16));
|
||||
|
||||
uint32_t v32 = (uint32_t)MathUtil::rangeRandom(0, 0x7FFFFF);
|
||||
EXPECT_EQ(MathUtil::popcount(v32), __popcnt(v32));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user