brintos

brintos / linux-shallow public Read only

0
0
Text · 3.4 KiB · c7b38d9 Raw
111 lines · c
1// SPDX-License-Identifier: GPL-2.0+2/*3 * Test cases for functions and macros in bits.h4 */5 6#include <kunit/test.h>7#include <linux/bits.h>8 9 10static void genmask_test(struct kunit *test)11{12	KUNIT_EXPECT_EQ(test, 1ul, GENMASK(0, 0));13	KUNIT_EXPECT_EQ(test, 3ul, GENMASK(1, 0));14	KUNIT_EXPECT_EQ(test, 6ul, GENMASK(2, 1));15	KUNIT_EXPECT_EQ(test, 0xFFFFFFFFul, GENMASK(31, 0));16 17#ifdef TEST_GENMASK_FAILURES18	/* these should fail compilation */19	GENMASK(0, 1);20	GENMASK(0, 10);21	GENMASK(9, 10);22#endif23 24 25}26 27static void genmask_ull_test(struct kunit *test)28{29	KUNIT_EXPECT_EQ(test, 1ull, GENMASK_ULL(0, 0));30	KUNIT_EXPECT_EQ(test, 3ull, GENMASK_ULL(1, 0));31	KUNIT_EXPECT_EQ(test, 0x000000ffffe00000ull, GENMASK_ULL(39, 21));32	KUNIT_EXPECT_EQ(test, 0xffffffffffffffffull, GENMASK_ULL(63, 0));33 34#ifdef TEST_GENMASK_FAILURES35	/* these should fail compilation */36	GENMASK_ULL(0, 1);37	GENMASK_ULL(0, 10);38	GENMASK_ULL(9, 10);39#endif40}41 42static void genmask_u128_test(struct kunit *test)43{44#ifdef CONFIG_ARCH_SUPPORTS_INT12845	/* 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_FAILURES64	/* 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 72static void genmask_input_check_test(struct kunit *test)73{74	unsigned int x, y;75	int z, w;76 77	/* Unknown input */78	KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(x, 0));79	KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(0, x));80	KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(x, y));81 82	KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(z, 0));83	KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(0, z));84	KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(z, w));85 86	/* Valid input */87	KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(1, 1));88	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));92}93 94 95static struct kunit_case bits_test_cases[] = {96	KUNIT_CASE(genmask_test),97	KUNIT_CASE(genmask_ull_test),98	KUNIT_CASE(genmask_u128_test),99	KUNIT_CASE(genmask_input_check_test),100	{}101};102 103static struct kunit_suite bits_test_suite = {104	.name = "bits-test",105	.test_cases = bits_test_cases,106};107kunit_test_suite(bits_test_suite);108 109MODULE_DESCRIPTION("Test cases for functions and macros in bits.h");110MODULE_LICENSE("GPL");111