xref: /openbmc/linux/lib/test_bits.c (revision 6d511020)
16d511020SRikard Falkeborn // SPDX-License-Identifier: GPL-2.0+
26d511020SRikard Falkeborn /*
36d511020SRikard Falkeborn  * Test cases for functions and macros in bits.h
46d511020SRikard Falkeborn  */
56d511020SRikard Falkeborn 
66d511020SRikard Falkeborn #include <kunit/test.h>
76d511020SRikard Falkeborn #include <linux/bits.h>
86d511020SRikard Falkeborn 
96d511020SRikard Falkeborn 
genmask_test(struct kunit * test)106d511020SRikard Falkeborn static void genmask_test(struct kunit *test)
116d511020SRikard Falkeborn {
126d511020SRikard Falkeborn 	KUNIT_EXPECT_EQ(test, 1ul, GENMASK(0, 0));
136d511020SRikard Falkeborn 	KUNIT_EXPECT_EQ(test, 3ul, GENMASK(1, 0));
146d511020SRikard Falkeborn 	KUNIT_EXPECT_EQ(test, 6ul, GENMASK(2, 1));
156d511020SRikard Falkeborn 	KUNIT_EXPECT_EQ(test, 0xFFFFFFFFul, GENMASK(31, 0));
166d511020SRikard Falkeborn 
176d511020SRikard Falkeborn #ifdef TEST_GENMASK_FAILURES
186d511020SRikard Falkeborn 	/* these should fail compilation */
196d511020SRikard Falkeborn 	GENMASK(0, 1);
206d511020SRikard Falkeborn 	GENMASK(0, 10);
216d511020SRikard Falkeborn 	GENMASK(9, 10);
226d511020SRikard Falkeborn #endif
236d511020SRikard Falkeborn 
246d511020SRikard Falkeborn 
256d511020SRikard Falkeborn }
266d511020SRikard Falkeborn 
genmask_ull_test(struct kunit * test)276d511020SRikard Falkeborn static void genmask_ull_test(struct kunit *test)
286d511020SRikard Falkeborn {
296d511020SRikard Falkeborn 	KUNIT_EXPECT_EQ(test, 1ull, GENMASK_ULL(0, 0));
306d511020SRikard Falkeborn 	KUNIT_EXPECT_EQ(test, 3ull, GENMASK_ULL(1, 0));
316d511020SRikard Falkeborn 	KUNIT_EXPECT_EQ(test, 0x000000ffffe00000ull, GENMASK_ULL(39, 21));
326d511020SRikard Falkeborn 	KUNIT_EXPECT_EQ(test, 0xffffffffffffffffull, GENMASK_ULL(63, 0));
336d511020SRikard Falkeborn 
346d511020SRikard Falkeborn #ifdef TEST_GENMASK_FAILURES
356d511020SRikard Falkeborn 	/* these should fail compilation */
366d511020SRikard Falkeborn 	GENMASK_ULL(0, 1);
376d511020SRikard Falkeborn 	GENMASK_ULL(0, 10);
386d511020SRikard Falkeborn 	GENMASK_ULL(9, 10);
396d511020SRikard Falkeborn #endif
406d511020SRikard Falkeborn }
416d511020SRikard Falkeborn 
genmask_input_check_test(struct kunit * test)426d511020SRikard Falkeborn static void genmask_input_check_test(struct kunit *test)
436d511020SRikard Falkeborn {
446d511020SRikard Falkeborn 	unsigned int x, y;
456d511020SRikard Falkeborn 	int z, w;
466d511020SRikard Falkeborn 
476d511020SRikard Falkeborn 	/* Unknown input */
486d511020SRikard Falkeborn 	KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(x, 0));
496d511020SRikard Falkeborn 	KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(0, x));
506d511020SRikard Falkeborn 	KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(x, y));
516d511020SRikard Falkeborn 
526d511020SRikard Falkeborn 	KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(z, 0));
536d511020SRikard Falkeborn 	KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(0, z));
546d511020SRikard Falkeborn 	KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(z, w));
556d511020SRikard Falkeborn 
566d511020SRikard Falkeborn 	/* Valid input */
576d511020SRikard Falkeborn 	KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(1, 1));
586d511020SRikard Falkeborn 	KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(39, 21));
596d511020SRikard Falkeborn }
606d511020SRikard Falkeborn 
616d511020SRikard Falkeborn 
626d511020SRikard Falkeborn static struct kunit_case bits_test_cases[] = {
636d511020SRikard Falkeborn 	KUNIT_CASE(genmask_test),
646d511020SRikard Falkeborn 	KUNIT_CASE(genmask_ull_test),
656d511020SRikard Falkeborn 	KUNIT_CASE(genmask_input_check_test),
666d511020SRikard Falkeborn 	{}
676d511020SRikard Falkeborn };
686d511020SRikard Falkeborn 
696d511020SRikard Falkeborn static struct kunit_suite bits_test_suite = {
706d511020SRikard Falkeborn 	.name = "bits-test",
716d511020SRikard Falkeborn 	.test_cases = bits_test_cases,
726d511020SRikard Falkeborn };
736d511020SRikard Falkeborn kunit_test_suite(bits_test_suite);
746d511020SRikard Falkeborn 
756d511020SRikard Falkeborn MODULE_LICENSE("GPL");
76