About Social Code
aboutsummaryrefslogtreecommitdiff
path: root/src/util
diff options
context:
space:
mode:
Diffstat (limited to 'src/util')
-rw-r--r--src/util/bitset_test.cpp76
1 files changed, 76 insertions, 0 deletions
diff --git a/src/util/bitset_test.cpp b/src/util/bitset_test.cpp
index b615d08fa59..9a473f03446 100644
--- a/src/util/bitset_test.cpp
+++ b/src/util/bitset_test.cpp
@@ -229,3 +229,79 @@ TEST(bitset, test_not)
EXPECT_EQ(BITSET_TEST_RANGE(r, 64, 95), false);
EXPECT_EQ(BITSET_TEST_RANGE(r, 96, 127), false);
}
+
+TEST(bitset, test_shr_zero)
+{
+ BITSET_DECLARE(r, 128);
+
+ BITSET_ZERO(r);
+ BITSET_SET(r, 127);
+
+ BITSET_SHR(r, 0);
+
+ EXPECT_EQ(BITSET_TEST(r, 127), true);
+ EXPECT_EQ(BITSET_TEST_RANGE(r, 0, 31), false);
+ EXPECT_EQ(BITSET_TEST_RANGE(r, 32, 63), false);
+ EXPECT_EQ(BITSET_TEST_RANGE(r, 64, 95), false);
+ EXPECT_EQ(BITSET_TEST_RANGE(r, 96, 127), true);
+}
+
+TEST(bitset, test_shr_walking_bit)
+{
+ BITSET_DECLARE(r, 128);
+
+ BITSET_ZERO(r);
+ BITSET_SET(r, 127);
+
+ for (int i = 127; i >= 0; i--) {
+ EXPECT_EQ(BITSET_TEST(r, i), true);
+ BITSET_SHR(r, 1);
+ }
+
+ EXPECT_EQ(BITSET_TEST_RANGE(r, 0, 31), false);
+ EXPECT_EQ(BITSET_TEST_RANGE(r, 32, 63), false);
+ EXPECT_EQ(BITSET_TEST_RANGE(r, 64, 95), false);
+ EXPECT_EQ(BITSET_TEST_RANGE(r, 96, 127), false);
+}
+
+TEST(bitset, test_shr_multiple_words)
+{
+ BITSET_DECLARE(r, 128);
+
+ BITSET_ZERO(r);
+ BITSET_SET(r, 127);
+ BITSET_SHR(r, 50);
+
+ EXPECT_EQ(BITSET_TEST(r, 127), false);
+ EXPECT_EQ(BITSET_TEST(r, 77), true);
+
+
+ BITSET_ZERO(r);
+ BITSET_SET(r, 127);
+ BITSET_SHR(r, 80);
+
+ EXPECT_EQ(BITSET_TEST(r, 127), false);
+ EXPECT_EQ(BITSET_TEST(r, 47), true);
+
+
+ BITSET_ZERO(r);
+ BITSET_SET(r, 127);
+ BITSET_SHR(r, 126);
+
+ EXPECT_EQ(BITSET_TEST(r, 127), false);
+ EXPECT_EQ(BITSET_TEST(r, 1), true);
+}
+
+TEST(bitset, test_shr_two_words)
+{
+ BITSET_DECLARE(r, 64);
+
+ BITSET_ZERO(r);
+ BITSET_SET(r, 63);
+ BITSET_SHR(r, 50);
+
+ EXPECT_EQ(BITSET_TEST(r, 63), false);
+ EXPECT_EQ(BITSET_TEST(r, 13), true);
+ EXPECT_EQ(BITSET_TEST_RANGE(r, 0, 31), true);
+ EXPECT_EQ(BITSET_TEST_RANGE(r, 32, 63), false);
+}