Commit 0405eef6 authored by Lucas De Marchi's avatar Lucas De Marchi Committed by Yury Norov
Browse files

test_bits: add tests for GENMASK_U*()



Add some additional tests in lib/tests/test_bits.c to cover the
expected/non-expected values of the fixed-type GENMASK_U*() macros.

Also check that the result value matches the expected type. Since
those are known at build time, use static_assert() instead of normal
kunit tests.

Signed-off-by: default avatarLucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: default avatarVincent Mailhol <mailhol.vincent@wanadoo.fr>
Reviewed-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: default avatarYury Norov <yury.norov@gmail.com>
parent 4fd225f7
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -5,6 +5,16 @@

#include <kunit/test.h>
#include <linux/bits.h>
#include <linux/types.h>

#define assert_type(t, x) _Generic(x, t: x, default: 0)

static_assert(assert_type(unsigned long, GENMASK(31, 0)) == U32_MAX);
static_assert(assert_type(unsigned long long, GENMASK_ULL(63, 0)) == U64_MAX);
static_assert(assert_type(u8, GENMASK_U8(7, 0)) == U8_MAX);
static_assert(assert_type(u16, GENMASK_U16(15, 0)) == U16_MAX);
static_assert(assert_type(u32, GENMASK_U32(31, 0)) == U32_MAX);
static_assert(assert_type(u64, GENMASK_U64(63, 0)) == U64_MAX);


static void genmask_test(struct kunit *test)
@@ -14,11 +24,21 @@ static void genmask_test(struct kunit *test)
	KUNIT_EXPECT_EQ(test, 6ul, GENMASK(2, 1));
	KUNIT_EXPECT_EQ(test, 0xFFFFFFFFul, GENMASK(31, 0));

	KUNIT_EXPECT_EQ(test, 1u, GENMASK_U8(0, 0));
	KUNIT_EXPECT_EQ(test, 3u, GENMASK_U16(1, 0));
	KUNIT_EXPECT_EQ(test, 0x10000, GENMASK_U32(16, 16));

#ifdef TEST_GENMASK_FAILURES
	/* these should fail compilation */
	GENMASK(0, 1);
	GENMASK(0, 10);
	GENMASK(9, 10);

	GENMASK_U32(0, 31);
	GENMASK_U64(64, 0);
	GENMASK_U32(32, 0);
	GENMASK_U16(16, 0);
	GENMASK_U8(8, 0);
#endif