util/tests: add bitset SHR tests
authorChristian Gmeiner <christian.gmeiner@gmail.com>
Tue, 11 May 2021 06:01:50 +0000 (08:01 +0200)
committerMarge Bot <eric+marge@anholt.net>
Tue, 21 Sep 2021 20:25:31 +0000 (20:25 +0000)
Signed-off-by: Christian Gmeiner <christian.gmeiner@gmail.com>
Reviewed-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11321>

src/util/bitset_test.cpp

index b615d08..9a473f0 100644 (file)
@@ -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);
+}