]> www.infradead.org Git - users/hch/block.git/commitdiff
lib/test_bits.c: Add tests for GENMASK_U128()
authorAnshuman Khandual <anshuman.khandual@arm.com>
Thu, 22 Aug 2024 04:48:53 +0000 (10:18 +0530)
committerYury Norov <yury.norov@gmail.com>
Wed, 28 Aug 2024 13:54:39 +0000 (06:54 -0700)
This adds GENMASK_U128() tests although currently only 64 bit wide masks
are being tested.

Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: linux-kernel@vger.kernel.org
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com>
Signed-off-by: Yury Norov <yury.norov@gmail.com>
lib/test_bits.c

index 01313980f175f19a67ae48563106333146ada883..c7b38d91e1f16d42b7ca92e62fbd6c19b37e76a0 100644 (file)
@@ -39,6 +39,36 @@ static void genmask_ull_test(struct kunit *test)
 #endif
 }
 
+static void genmask_u128_test(struct kunit *test)
+{
+#ifdef CONFIG_ARCH_SUPPORTS_INT128
+       /* Below 64 bit masks */
+       KUNIT_EXPECT_EQ(test, 0x0000000000000001ull, GENMASK_U128(0, 0));
+       KUNIT_EXPECT_EQ(test, 0x0000000000000003ull, GENMASK_U128(1, 0));
+       KUNIT_EXPECT_EQ(test, 0x0000000000000006ull, GENMASK_U128(2, 1));
+       KUNIT_EXPECT_EQ(test, 0x00000000ffffffffull, GENMASK_U128(31, 0));
+       KUNIT_EXPECT_EQ(test, 0x000000ffffe00000ull, GENMASK_U128(39, 21));
+       KUNIT_EXPECT_EQ(test, 0xffffffffffffffffull, GENMASK_U128(63, 0));
+
+       /* Above 64 bit masks - only 64 bit portion can be validated once */
+       KUNIT_EXPECT_EQ(test, 0xffffffffffffffffull, GENMASK_U128(64, 0) >> 1);
+       KUNIT_EXPECT_EQ(test, 0x00000000ffffffffull, GENMASK_U128(81, 50) >> 50);
+       KUNIT_EXPECT_EQ(test, 0x0000000000ffffffull, GENMASK_U128(87, 64) >> 64);
+       KUNIT_EXPECT_EQ(test, 0x0000000000ff0000ull, GENMASK_U128(87, 80) >> 64);
+
+       KUNIT_EXPECT_EQ(test, 0xffffffffffffffffull, GENMASK_U128(127, 0) >> 64);
+       KUNIT_EXPECT_EQ(test, 0xffffffffffffffffull, (u64)GENMASK_U128(127, 0));
+       KUNIT_EXPECT_EQ(test, 0x0000000000000003ull, GENMASK_U128(127, 126) >> 126);
+       KUNIT_EXPECT_EQ(test, 0x0000000000000001ull, GENMASK_U128(127, 127) >> 127);
+#ifdef TEST_GENMASK_FAILURES
+       /* these should fail compilation */
+       GENMASK_U128(0, 1);
+       GENMASK_U128(0, 10);
+       GENMASK_U128(9, 10);
+#endif /* TEST_GENMASK_FAILURES */
+#endif /* CONFIG_ARCH_SUPPORTS_INT128 */
+}
+
 static void genmask_input_check_test(struct kunit *test)
 {
        unsigned int x, y;
@@ -56,12 +86,16 @@ static void genmask_input_check_test(struct kunit *test)
        /* Valid input */
        KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(1, 1));
        KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(39, 21));
+       KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(100, 80));
+       KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(110, 65));
+       KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(127, 0));
 }
 
 
 static struct kunit_case bits_test_cases[] = {
        KUNIT_CASE(genmask_test),
        KUNIT_CASE(genmask_ull_test),
+       KUNIT_CASE(genmask_u128_test),
        KUNIT_CASE(genmask_input_check_test),
        {}
 };