Skip to content

Commit d7bcc37

Browse files
Anshuman KhandualYuryNorov
authored andcommitted
lib/test_bits.c: Add tests for GENMASK_U128()
This adds GENMASK_U128() tests although currently only 64 bit wide masks are being tested. Cc: Andrew Morton <[email protected]> Cc: [email protected] Reviewed-by: Arnd Bergmann <[email protected]> Signed-off-by: Anshuman Khandual <[email protected]> Signed-off-by: Yury Norov <[email protected]>
1 parent 947697c commit d7bcc37

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

lib/test_bits.c

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,36 @@ static void genmask_ull_test(struct kunit *test)
3939
#endif
4040
}
4141

42+
static void genmask_u128_test(struct kunit *test)
43+
{
44+
#ifdef CONFIG_ARCH_SUPPORTS_INT128
45+
/* Below 64 bit masks */
46+
KUNIT_EXPECT_EQ(test, 0x0000000000000001ull, GENMASK_U128(0, 0));
47+
KUNIT_EXPECT_EQ(test, 0x0000000000000003ull, GENMASK_U128(1, 0));
48+
KUNIT_EXPECT_EQ(test, 0x0000000000000006ull, GENMASK_U128(2, 1));
49+
KUNIT_EXPECT_EQ(test, 0x00000000ffffffffull, GENMASK_U128(31, 0));
50+
KUNIT_EXPECT_EQ(test, 0x000000ffffe00000ull, GENMASK_U128(39, 21));
51+
KUNIT_EXPECT_EQ(test, 0xffffffffffffffffull, GENMASK_U128(63, 0));
52+
53+
/* Above 64 bit masks - only 64 bit portion can be validated once */
54+
KUNIT_EXPECT_EQ(test, 0xffffffffffffffffull, GENMASK_U128(64, 0) >> 1);
55+
KUNIT_EXPECT_EQ(test, 0x00000000ffffffffull, GENMASK_U128(81, 50) >> 50);
56+
KUNIT_EXPECT_EQ(test, 0x0000000000ffffffull, GENMASK_U128(87, 64) >> 64);
57+
KUNIT_EXPECT_EQ(test, 0x0000000000ff0000ull, GENMASK_U128(87, 80) >> 64);
58+
59+
KUNIT_EXPECT_EQ(test, 0xffffffffffffffffull, GENMASK_U128(127, 0) >> 64);
60+
KUNIT_EXPECT_EQ(test, 0xffffffffffffffffull, (u64)GENMASK_U128(127, 0));
61+
KUNIT_EXPECT_EQ(test, 0x0000000000000003ull, GENMASK_U128(127, 126) >> 126);
62+
KUNIT_EXPECT_EQ(test, 0x0000000000000001ull, GENMASK_U128(127, 127) >> 127);
63+
#ifdef TEST_GENMASK_FAILURES
64+
/* these should fail compilation */
65+
GENMASK_U128(0, 1);
66+
GENMASK_U128(0, 10);
67+
GENMASK_U128(9, 10);
68+
#endif /* TEST_GENMASK_FAILURES */
69+
#endif /* CONFIG_ARCH_SUPPORTS_INT128 */
70+
}
71+
4272
static void genmask_input_check_test(struct kunit *test)
4373
{
4474
unsigned int x, y;
@@ -56,12 +86,16 @@ static void genmask_input_check_test(struct kunit *test)
5686
/* Valid input */
5787
KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(1, 1));
5888
KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(39, 21));
89+
KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(100, 80));
90+
KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(110, 65));
91+
KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(127, 0));
5992
}
6093

6194

6295
static struct kunit_case bits_test_cases[] = {
6396
KUNIT_CASE(genmask_test),
6497
KUNIT_CASE(genmask_ull_test),
98+
KUNIT_CASE(genmask_u128_test),
6599
KUNIT_CASE(genmask_input_check_test),
66100
{}
67101
};

0 commit comments

Comments
 (0)