Adds test suite for integer based square root function.
The test suite is designed to verify the correctness of the int_sqrt() math library function.
Signed-off-by: Luis Felipe Hernandez luis.hernandez093@gmail.com --- Changes in v2 - Add new line at the end of int_sqrt_kunit.c - Add explicit header includes for MODULE_* macros, strscpy, and ULONG_MAX
Changes in v3 - Remove unnecesary new line after Kconfig entry for INT_SQRT_KUNIT_TEST - Correct int_sqrt instances with int_sqrt() in commit message and kconfig entry desc - Fix limits.h header include path --- lib/Kconfig.debug | 15 ++++++++++ lib/math/Makefile | 1 + lib/math/tests/Makefile | 1 + lib/math/tests/int_sqrt_kunit.c | 51 +++++++++++++++++++++++++++++++++ 4 files changed, 68 insertions(+) create mode 100644 lib/math/tests/int_sqrt_kunit.c
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 7312ae7c3cc5..c83f5dc9bb48 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -2993,6 +2993,21 @@ config TEST_OBJPOOL
If unsure, say N.
+config INT_SQRT_KUNIT_TEST + tristate "Integer square root test test" if !KUNIT_ALL_TESTS + depends on KUNIT + default KUNIT_ALL_TESTS + help + This option enables the KUnit test suite for the int_sqrt() function, + which performs square root calculation. The test suite checks + various scenarios, including edge cases, to ensure correctness. + + Enabling this option will include tests that check various scenarios + and edge cases to ensure the accuracy and reliability of the square root + function. + + If unsure, say N + endif # RUNTIME_TESTING_MENU
config ARCH_USE_MEMTEST diff --git a/lib/math/Makefile b/lib/math/Makefile index 3ef11305f8d2..25bcb968b369 100644 --- a/lib/math/Makefile +++ b/lib/math/Makefile @@ -9,3 +9,4 @@ obj-$(CONFIG_INT_POW_TEST) += tests/int_pow_kunit.o obj-$(CONFIG_TEST_DIV64) += test_div64.o obj-$(CONFIG_TEST_MULDIV64) += test_mul_u64_u64_div_u64.o obj-$(CONFIG_RATIONAL_KUNIT_TEST) += rational-test.o +obj-y += tests/ diff --git a/lib/math/tests/Makefile b/lib/math/tests/Makefile index 6a169123320a..e1a79f093b2d 100644 --- a/lib/math/tests/Makefile +++ b/lib/math/tests/Makefile @@ -1,3 +1,4 @@ # SPDX-License-Identifier: GPL-2.0-only
obj-$(CONFIG_INT_POW_TEST) += int_pow_kunit.o +obj-$(CONFIG_INT_SQRT_KUNIT_TEST) += int_sqrt_kunit.o diff --git a/lib/math/tests/int_sqrt_kunit.c b/lib/math/tests/int_sqrt_kunit.c new file mode 100644 index 000000000000..3590142d2012 --- /dev/null +++ b/lib/math/tests/int_sqrt_kunit.c @@ -0,0 +1,51 @@ +// SPDX-License-Identifier: GPL-2.0-only + +#include <kunit/test.h> +#include <linux/limits.h> +#include <linux/math.h> +#include <linux/module.h> +#include <linux/string.h> + +struct test_case_params { + unsigned long x; + unsigned long expected_result; + const char *name; +}; + +static const struct test_case_params params[] = { + { 0, 0, "edge-case: square root of 0" }, + { 4, 2, "perfect square: square root of 4" }, + { 81, 9, "perfect square: square root of 9" }, + { 2, 1, "non-perfect square: square root of 2" }, + { 5, 2, "non-perfect square: square root of 5"}, + { ULONG_MAX, 4294967295, "large input"}, +}; + +static void get_desc(const struct test_case_params *tc, char *desc) +{ + strscpy(desc, tc->name, KUNIT_PARAM_DESC_SIZE); +} + +KUNIT_ARRAY_PARAM(int_sqrt, params, get_desc); + +static void int_sqrt_test(struct kunit *test) +{ + const struct test_case_params *tc = (const struct test_case_params *)test->param_value; + + KUNIT_EXPECT_EQ(test, tc->expected_result, int_sqrt(tc->x)); +} + +static struct kunit_case math_int_sqrt_test_cases[] = { + KUNIT_CASE_PARAM(int_sqrt_test, int_sqrt_gen_params), + {} +}; + +static struct kunit_suite int_sqrt_test_suite = { + .name = "math-int_sqrt", + .test_cases = math_int_sqrt_test_cases, +}; + +kunit_test_suites(&int_sqrt_test_suite); + +MODULE_DESCRIPTION("math.int_sqrt KUnit test suite"); +MODULE_LICENSE("GPL");
On 10/30/24 07:43, Luis Felipe Hernandez wrote:
Adds test suite for integer based square root function.
The test suite is designed to verify the correctness of the int_sqrt() math library function.
Signed-off-by: Luis Felipe Hernandez luis.hernandez093@gmail.com
Changes in v2
- Add new line at the end of int_sqrt_kunit.c
- Add explicit header includes for MODULE_* macros, strscpy, and ULONG_MAX
Changes in v3
- Remove unnecesary new line after Kconfig entry for INT_SQRT_KUNIT_TEST
- Correct int_sqrt instances with int_sqrt() in commit message and kconfig
entry desc
- Fix limits.h header include path
Adding Andrew to the thread. I think this depends on the other lib kunit content that is already in next.
lib/Kconfig.debug | 15 ++++++++++ lib/math/Makefile | 1 + lib/math/tests/Makefile | 1 + lib/math/tests/int_sqrt_kunit.c | 51 +++++++++++++++++++++++++++++++++ 4 files changed, 68 insertions(+) create mode 100644 lib/math/tests/int_sqrt_kunit.c
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 7312ae7c3cc5..c83f5dc9bb48 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -2993,6 +2993,21 @@ config TEST_OBJPOOL If unsure, say N. +config INT_SQRT_KUNIT_TEST
- tristate "Integer square root test test" if !KUNIT_ALL_TESTS
- depends on KUNIT
- default KUNIT_ALL_TESTS
- help
This option enables the KUnit test suite for the int_sqrt() function,
which performs square root calculation. The test suite checks
various scenarios, including edge cases, to ensure correctness.
Enabling this option will include tests that check various scenarios
and edge cases to ensure the accuracy and reliability of the square root
function.
If unsure, say N
- endif # RUNTIME_TESTING_MENU
config ARCH_USE_MEMTEST diff --git a/lib/math/Makefile b/lib/math/Makefile index 3ef11305f8d2..25bcb968b369 100644 --- a/lib/math/Makefile +++ b/lib/math/Makefile @@ -9,3 +9,4 @@ obj-$(CONFIG_INT_POW_TEST) += tests/int_pow_kunit.o obj-$(CONFIG_TEST_DIV64) += test_div64.o obj-$(CONFIG_TEST_MULDIV64) += test_mul_u64_u64_div_u64.o obj-$(CONFIG_RATIONAL_KUNIT_TEST) += rational-test.o +obj-y += tests/ diff --git a/lib/math/tests/Makefile b/lib/math/tests/Makefile index 6a169123320a..e1a79f093b2d 100644 --- a/lib/math/tests/Makefile +++ b/lib/math/tests/Makefile @@ -1,3 +1,4 @@ # SPDX-License-Identifier: GPL-2.0-only obj-$(CONFIG_INT_POW_TEST) += int_pow_kunit.o +obj-$(CONFIG_INT_SQRT_KUNIT_TEST) += int_sqrt_kunit.o diff --git a/lib/math/tests/int_sqrt_kunit.c b/lib/math/tests/int_sqrt_kunit.c new file mode 100644 index 000000000000..3590142d2012 --- /dev/null +++ b/lib/math/tests/int_sqrt_kunit.c @@ -0,0 +1,51 @@ +// SPDX-License-Identifier: GPL-2.0-only
+#include <kunit/test.h> +#include <linux/limits.h> +#include <linux/math.h> +#include <linux/module.h> +#include <linux/string.h>
+struct test_case_params {
- unsigned long x;
- unsigned long expected_result;
- const char *name;
+};
+static const struct test_case_params params[] = {
- { 0, 0, "edge-case: square root of 0" },
- { 4, 2, "perfect square: square root of 4" },
- { 81, 9, "perfect square: square root of 9" },
- { 2, 1, "non-perfect square: square root of 2" },
- { 5, 2, "non-perfect square: square root of 5"},
- { ULONG_MAX, 4294967295, "large input"},
+};
+static void get_desc(const struct test_case_params *tc, char *desc) +{
- strscpy(desc, tc->name, KUNIT_PARAM_DESC_SIZE);
+}
+KUNIT_ARRAY_PARAM(int_sqrt, params, get_desc);
+static void int_sqrt_test(struct kunit *test) +{
- const struct test_case_params *tc = (const struct test_case_params *)test->param_value;
- KUNIT_EXPECT_EQ(test, tc->expected_result, int_sqrt(tc->x));
+}
+static struct kunit_case math_int_sqrt_test_cases[] = {
- KUNIT_CASE_PARAM(int_sqrt_test, int_sqrt_gen_params),
- {}
+};
+static struct kunit_suite int_sqrt_test_suite = {
- .name = "math-int_sqrt",
- .test_cases = math_int_sqrt_test_cases,
+};
+kunit_test_suites(&int_sqrt_test_suite);
+MODULE_DESCRIPTION("math.int_sqrt KUnit test suite"); +MODULE_LICENSE("GPL");
Acked-by: Shuah Khan skhan@linuxfoundation.org
thanks, -- Shuah
On Thu, 31 Oct 2024 11:50:16 -0600 Shuah Khan skhan@linuxfoundation.org wrote:
On 10/30/24 07:43, Luis Felipe Hernandez wrote:
Adds test suite for integer based square root function.
The test suite is designed to verify the correctness of the int_sqrt() math library function.
Signed-off-by: Luis Felipe Hernandez luis.hernandez093@gmail.com
Changes in v2
- Add new line at the end of int_sqrt_kunit.c
- Add explicit header includes for MODULE_* macros, strscpy, and ULONG_MAX
Changes in v3
- Remove unnecesary new line after Kconfig entry for INT_SQRT_KUNIT_TEST
- Correct int_sqrt instances with int_sqrt() in commit message and kconfig
entry desc
- Fix limits.h header include path
Adding Andrew to the thread.
Thanks.
I think this depends on the other lib kunit content that is already in next.
Actually the patch applies cleanly to 6.12-rc5.
--- a/lib/math/Makefile +++ b/lib/math/Makefile @@ -9,3 +9,4 @@ obj-$(CONFIG_INT_POW_TEST) += tests/int_pow_kunit.o obj-$(CONFIG_TEST_DIV64) += test_div64.o obj-$(CONFIG_TEST_MULDIV64) += test_mul_u64_u64_div_u64.o obj-$(CONFIG_RATIONAL_KUNIT_TEST) += rational-test.o +obj-y += tests/
What's this change about? It seems somewhat unrelated to adding a single test. I mean, there's an unrelated test listed in lib/math/tests/Makefile so what change does this patch have upon that one?
On 10/31/24 18:39, Andrew Morton wrote:
On Thu, 31 Oct 2024 11:50:16 -0600 Shuah Khan skhan@linuxfoundation.org wrote:
On 10/30/24 07:43, Luis Felipe Hernandez wrote:
Adds test suite for integer based square root function.
The test suite is designed to verify the correctness of the int_sqrt() math library function.
Signed-off-by: Luis Felipe Hernandez luis.hernandez093@gmail.com
Changes in v2 - Add new line at the end of int_sqrt_kunit.c - Add explicit header includes for MODULE_* macros, strscpy, and ULONG_MAX
Changes in v3 - Remove unnecesary new line after Kconfig entry for INT_SQRT_KUNIT_TEST - Correct int_sqrt instances with int_sqrt() in commit message and kconfig entry desc - Fix limits.h header include path
Adding Andrew to the thread.
Thanks.
I think this depends on the other lib kunit content that is already in next.
Actually the patch applies cleanly to 6.12-rc5.
--- a/lib/math/Makefile +++ b/lib/math/Makefile @@ -9,3 +9,4 @@ obj-$(CONFIG_INT_POW_TEST) += tests/int_pow_kunit.o obj-$(CONFIG_TEST_DIV64) += test_div64.o obj-$(CONFIG_TEST_MULDIV64) += test_mul_u64_u64_div_u64.o obj-$(CONFIG_RATIONAL_KUNIT_TEST) += rational-test.o +obj-y += tests/
What's this change about? It seems somewhat unrelated to adding a single test. I mean, there's an unrelated test listed in lib/math/tests/Makefile so what change does this patch have upon that one?
I think this is a new test. I can take this for 6.13-rc1
I thought the conflicts might persist in case you have any 6.13 material already in linux-next. Doesn't look like it if you could apply to 6.12-rc5
Sorry for the confusion. I can take this for 6.13-rc1
thanks, -- Shuah
On Thu, 31 Oct 2024 20:25:56 -0600 Shuah Khan skhan@linuxfoundation.org wrote:
What's this change about? It seems somewhat unrelated to adding a single test. I mean, there's an unrelated test listed in lib/math/tests/Makefile so what change does this patch have upon that one?
I think this is a new test. I can take this for 6.13-rc1
I thought the conflicts might persist in case you have any 6.13 material already in linux-next. Doesn't look like it if you could apply to 6.12-rc5
Sorry for the confusion. I can take this for 6.13-rc1
No probs, I'll drop the mm.git copy tomorrow.
On Thu, 31 Oct 2024 20:25:56 -0600 Shuah Khan skhan@linuxfoundation.org wrote:
--- a/lib/math/Makefile +++ b/lib/math/Makefile @@ -9,3 +9,4 @@ obj-$(CONFIG_INT_POW_TEST) += tests/int_pow_kunit.o obj-$(CONFIG_TEST_DIV64) += test_div64.o obj-$(CONFIG_TEST_MULDIV64) += test_mul_u64_u64_div_u64.o obj-$(CONFIG_RATIONAL_KUNIT_TEST) += rational-test.o +obj-y += tests/
What's this change about? It seems somewhat unrelated to adding a single test. I mean, there's an unrelated test listed in lib/math/tests/Makefile so what change does this patch have upon that one?
I think this is a new test. I can take this for 6.13-rc1
I thought the conflicts might persist in case you have any 6.13 material already in linux-next. Doesn't look like it if you could apply to 6.12-rc5
Sorry for the confusion. I can take this for 6.13-rc1
x86_64 allmodconfig:
error: the following would cause module name conflict: lib/math/tests/int_pow_kunit.ko lib/math/tests/int_pow_kunit.ko
On Thu, Oct 31, 2024 at 05:39:41PM -0700, Andrew Morton wrote:
--- a/lib/math/Makefile +++ b/lib/math/Makefile @@ -9,3 +9,4 @@ obj-$(CONFIG_INT_POW_TEST) += tests/int_pow_kunit.o obj-$(CONFIG_TEST_DIV64) += test_div64.o obj-$(CONFIG_TEST_MULDIV64) += test_mul_u64_u64_div_u64.o obj-$(CONFIG_RATIONAL_KUNIT_TEST) += rational-test.o +obj-y += tests/
What's this change about? It seems somewhat unrelated to adding a single test. I mean, there's an unrelated test listed in lib/math/tests/Makefile so what change does this patch have upon that one?
Hello Andrew, I apologize about the late response. I made this change in order to try and stay aligned with this previous patch moving all lib/math/ kunit tests into lib/math/tests/: https://lore.kernel.org/all/20241005222446.10471-1-luis.hernandez093@gmail.c...
From my understanding, kbuild wouldn't pick up the entry if it was just specified in lib/math/tests/Makefile without a reference to it in it's parent lib/math/Makefile. I didn't want to this patch to end up in a situation where it would introduce an explicit object entry in lib/math/Makefile pointing to obj-$(CONFIG_INT_SQRT_KUNIT_TEST) += tests/int_sqrt_kunit.o as is the case in mainline at the moment: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/lib/... This would in a sense introduce a regression in the organization of the Makefile in lib/math/.
I apologize for not adding the reasoning behind the change in the original patch.
Best,
Felipe
Hi David,
I wanted to follow up on this patch to check if any additional fixes are needed. Additionally, I would like to address Andy Shevchenko's andriy.shevchenko@linux.intel.com feedback in v2 regarding moving the lib/math/test/* Kunit test Kconfig entries from lib/Kconfig.debug to lib/tests/Kconfig?
--- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug
Shouldn't the thing to be in lib/tests/Kconfig?
The Kconfig entries for lib/math are located in lib/Kconfig.debug as per David Gow in https://lore.kernel.org/all/CABVgOS=-vh5TqHFCq_jo=ffq8v_nGgr6JsPnOZag3e6+19y...
He put it as "Somehow confusingly, ..." meaning to me as a signal that he will agree with me that moving that to lib/tests/Kconfig seems like a right move.
I am happy to make this change if it would be beneficial.
Best,
Felipe
linux-kselftest-mirror@lists.linaro.org