prevPowTwo / faster bit operations
[folly.git] / folly / test / BitsTest.cpp
index 4f6ed6764e5a8ae6f6086a3c2b2407329467e8ab..96abd60c8e0ffe221610165a4ba74ffb35eb19a7 100644 (file)
@@ -114,6 +114,29 @@ TEST(Bits, nextPowTwoClz) {
   EXPECT_EQ(1ull << 63, nextPowTwo((1ull << 62) + 1));
 }
 
+TEST(Bits, prevPowTwoClz) {
+  EXPECT_EQ(0, prevPowTwo(0u));
+  EXPECT_EQ(1, prevPowTwo(1u));
+  EXPECT_EQ(2, prevPowTwo(2u));
+  EXPECT_EQ(2, prevPowTwo(3u));
+  EXPECT_EQ(4, prevPowTwo(4u));
+  EXPECT_EQ(4, prevPowTwo(5u));
+  EXPECT_EQ(4, prevPowTwo(6u));
+  EXPECT_EQ(4, prevPowTwo(7u));
+  EXPECT_EQ(8, prevPowTwo(8u));
+  EXPECT_EQ(8, prevPowTwo(9u));
+  EXPECT_EQ(8, prevPowTwo(13u));
+  EXPECT_EQ(16, prevPowTwo(16u));
+  EXPECT_EQ(256, prevPowTwo(510u));
+  EXPECT_EQ(256, prevPowTwo(511u));
+  EXPECT_EQ(512, prevPowTwo(512u));
+  EXPECT_EQ(512, prevPowTwo(513u));
+  EXPECT_EQ(512, prevPowTwo(777u));
+  EXPECT_EQ(1ul << 30, prevPowTwo((1ul << 31) - 1));
+  EXPECT_EQ(1ull << 31, prevPowTwo((1ull << 32) - 1));
+  EXPECT_EQ(1ull << 62, prevPowTwo((1ull << 62) + 1));
+}
+
 TEST(Bits, isPowTwo) {
   EXPECT_FALSE(isPowTwo(0u));
   EXPECT_TRUE(isPowTwo(1ul));