test_bits.c 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * Test cases for functions and macros in bits.h
  4. */
  5. #include <kunit/test.h>
  6. #include <linux/bits.h>
  7. static void genmask_test(struct kunit *test)
  8. {
  9. KUNIT_EXPECT_EQ(test, 1ul, GENMASK(0, 0));
  10. KUNIT_EXPECT_EQ(test, 3ul, GENMASK(1, 0));
  11. KUNIT_EXPECT_EQ(test, 6ul, GENMASK(2, 1));
  12. KUNIT_EXPECT_EQ(test, 0xFFFFFFFFul, GENMASK(31, 0));
  13. #ifdef TEST_GENMASK_FAILURES
  14. /* these should fail compilation */
  15. GENMASK(0, 1);
  16. GENMASK(0, 10);
  17. GENMASK(9, 10);
  18. #endif
  19. }
  20. static void genmask_ull_test(struct kunit *test)
  21. {
  22. KUNIT_EXPECT_EQ(test, 1ull, GENMASK_ULL(0, 0));
  23. KUNIT_EXPECT_EQ(test, 3ull, GENMASK_ULL(1, 0));
  24. KUNIT_EXPECT_EQ(test, 0x000000ffffe00000ull, GENMASK_ULL(39, 21));
  25. KUNIT_EXPECT_EQ(test, 0xffffffffffffffffull, GENMASK_ULL(63, 0));
  26. #ifdef TEST_GENMASK_FAILURES
  27. /* these should fail compilation */
  28. GENMASK_ULL(0, 1);
  29. GENMASK_ULL(0, 10);
  30. GENMASK_ULL(9, 10);
  31. #endif
  32. }
  33. static void genmask_input_check_test(struct kunit *test)
  34. {
  35. unsigned int x, y;
  36. int z, w;
  37. /* Unknown input */
  38. KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(x, 0));
  39. KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(0, x));
  40. KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(x, y));
  41. KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(z, 0));
  42. KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(0, z));
  43. KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(z, w));
  44. /* Valid input */
  45. KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(1, 1));
  46. KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(39, 21));
  47. }
  48. static struct kunit_case bits_test_cases[] = {
  49. KUNIT_CASE(genmask_test),
  50. KUNIT_CASE(genmask_ull_test),
  51. KUNIT_CASE(genmask_input_check_test),
  52. {}
  53. };
  54. static struct kunit_suite bits_test_suite = {
  55. .name = "bits-test",
  56. .test_cases = bits_test_cases,
  57. };
  58. kunit_test_suite(bits_test_suite);
  59. MODULE_LICENSE("GPL");