lib/test_bits.c: add tests of GENMASK

Add tests of GENMASK and GENMASK_ULL.

A few test cases that should fail compilation are provided under #ifdef
TEST_GENMASK_FAILURES

[rd.dunlap@gmail.com: add MODULE_LICENSE()]
  Link: http://lkml.kernel.org/r/dfc74524-0789-2827-4eff-476ddab65699@gmail.com
[weiyongjun1@huawei.com: make some functions static]
  Link: http://lkml.kernel.org/r/20200702150336.4756-1-weiyongjun1@huawei.com

Suggested-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: Rikard Falkeborn <rikard.falkeborn@gmail.com>
Signed-off-by: Randy Dunlap <rd.dunlap@gmail.com>
Signed-off-by: Wei Yongjun <weiyongjun1@huawei.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Acked-by: William Breathitt Gray <vilhelm.gray@gmail.com>
Cc: Emil Velikov <emil.l.velikov@gmail.com>
Cc: Syed Nayyar Waris <syednwaris@gmail.com>
Cc: Andy Shevchenko <andy.shevchenko@gmail.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Kees Cook <keescook@chromium.org>
Cc: Linus Walleij <linus.walleij@linaro.org>
Cc: Masahiro Yamada <yamada.masahiro@socionext.com>
Link: http://lkml.kernel.org/r/20200621054210.14804-2-rikard.falkeborn@gmail.com
Link: http://lkml.kernel.org/r/20200608221823.35799-2-rikard.falkeborn@gmail.com
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Rikard Falkeborn 2020-08-11 18:35:03 -07:00 committed by Linus Torvalds
parent ef0f268533
commit 6d511020e1
3 changed files with 87 additions and 0 deletions

View File

@ -2236,6 +2236,17 @@ config LINEAR_RANGES_TEST
If unsure, say N.
config BITS_TEST
tristate "KUnit test for bits.h"
depends on KUNIT
help
This builds the bits unit test.
Tests the logic of macros defined in bits.h.
For more information on KUnit and unit tests in general please refer
to the KUnit documentation in Documentation/dev-tools/kunit/.
If unsure, say N.
config TEST_UDELAY
tristate "udelay test driver"
help

View File

@ -342,3 +342,4 @@ obj-$(CONFIG_PLDMFW) += pldmfw/
# KUnit tests
obj-$(CONFIG_LIST_KUNIT_TEST) += list-test.o
obj-$(CONFIG_LINEAR_RANGES_TEST) += test_linear_ranges.o
obj-$(CONFIG_BITS_TEST) += test_bits.o

75
lib/test_bits.c Normal file
View File

@ -0,0 +1,75 @@
// SPDX-License-Identifier: GPL-2.0+
/*
* Test cases for functions and macros in bits.h
*/
#include <kunit/test.h>
#include <linux/bits.h>
static void genmask_test(struct kunit *test)
{
KUNIT_EXPECT_EQ(test, 1ul, GENMASK(0, 0));
KUNIT_EXPECT_EQ(test, 3ul, GENMASK(1, 0));
KUNIT_EXPECT_EQ(test, 6ul, GENMASK(2, 1));
KUNIT_EXPECT_EQ(test, 0xFFFFFFFFul, GENMASK(31, 0));
#ifdef TEST_GENMASK_FAILURES
/* these should fail compilation */
GENMASK(0, 1);
GENMASK(0, 10);
GENMASK(9, 10);
#endif
}
static void genmask_ull_test(struct kunit *test)
{
KUNIT_EXPECT_EQ(test, 1ull, GENMASK_ULL(0, 0));
KUNIT_EXPECT_EQ(test, 3ull, GENMASK_ULL(1, 0));
KUNIT_EXPECT_EQ(test, 0x000000ffffe00000ull, GENMASK_ULL(39, 21));
KUNIT_EXPECT_EQ(test, 0xffffffffffffffffull, GENMASK_ULL(63, 0));
#ifdef TEST_GENMASK_FAILURES
/* these should fail compilation */
GENMASK_ULL(0, 1);
GENMASK_ULL(0, 10);
GENMASK_ULL(9, 10);
#endif
}
static void genmask_input_check_test(struct kunit *test)
{
unsigned int x, y;
int z, w;
/* Unknown input */
KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(x, 0));
KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(0, x));
KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(x, y));
KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(z, 0));
KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(0, z));
KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(z, w));
/* Valid input */
KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(1, 1));
KUNIT_EXPECT_EQ(test, 0, GENMASK_INPUT_CHECK(39, 21));
}
static struct kunit_case bits_test_cases[] = {
KUNIT_CASE(genmask_test),
KUNIT_CASE(genmask_ull_test),
KUNIT_CASE(genmask_input_check_test),
{}
};
static struct kunit_suite bits_test_suite = {
.name = "bits-test",
.test_cases = bits_test_cases,
};
kunit_test_suite(bits_test_suite);
MODULE_LICENSE("GPL");