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