public inbox for linux-kernel-mentees@lists.linux-foundation.org
 help / color / mirror / Atom feed
* [PATCH v2] lib/math: Add int_sqrt test suite
@ 2024-10-24 19:55 Luis Felipe Hernandez
  2024-10-25 15:20 ` Andy Shevchenko
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Luis Felipe Hernandez @ 2024-10-24 19:55 UTC (permalink / raw)
  To: brendan.higgins, davidgow
  Cc: Luis Felipe Hernandez, linux-kselftest, kunit-dev, skhan, ricardo,
	linux-kernel-mentees, andriy.shevchenko

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>
---
 lib/Kconfig.debug               | 16 +++++++++++
 lib/math/Makefile               |  1 +
 lib/math/tests/Makefile         |  1 +
 lib/math/tests/int_sqrt_kunit.c | 51 +++++++++++++++++++++++++++++++++
 4 files changed, 69 insertions(+)
 create mode 100644 lib/math/tests/int_sqrt_kunit.c

diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index 7312ae7c3cc5..772c681dff3e 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -2993,6 +2993,22 @@ 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..a93aba31cd05
--- /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/math.h>
+#include <linux/module.h>
+#include <linux/string.h>
+#include <limits.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");
-- 
2.47.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH v2] lib/math: Add int_sqrt test suite
  2024-10-24 19:55 [PATCH v2] lib/math: Add int_sqrt test suite Luis Felipe Hernandez
@ 2024-10-25 15:20 ` Andy Shevchenko
  2024-10-25 19:16   ` Luis Felipe Hernandez
  2024-10-25 23:41 ` kernel test robot
  2024-10-26  1:55 ` kernel test robot
  2 siblings, 1 reply; 6+ messages in thread
From: Andy Shevchenko @ 2024-10-25 15:20 UTC (permalink / raw)
  To: Luis Felipe Hernandez
  Cc: brendan.higgins, davidgow, linux-kselftest, kunit-dev, skhan,
	ricardo, linux-kernel-mentees

On Thu, Oct 24, 2024 at 03:55:09PM -0400, 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

int_aqrt()

> math library function.

...

> --- a/lib/Kconfig.debug
> +++ b/lib/Kconfig.debug

> +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
> +
> +

One blank line is enough.

Shouldn't the thing to be in lib/tests/Kconfig?

...

>  obj-$(CONFIG_INT_POW_TEST) += int_pow_kunit.o

Where is this? I don't see it right now in the Linux Next...

...

> +#include <kunit/test.h>
> +#include <linux/math.h>
> +#include <linux/module.h>
> +#include <linux/string.h>
> +#include <limits.h>

linux/limits.h, of course.

Sorry that I wasn't clear about this, but it's kinda rule of thumb that all
headers in 99.999% kernel-space related files in the Linux kernel are from
in-project folders and not from outside.

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v2] lib/math: Add int_sqrt test suite
  2024-10-25 15:20 ` Andy Shevchenko
@ 2024-10-25 19:16   ` Luis Felipe Hernandez
  2024-10-25 20:38     ` Andy Shevchenko
  0 siblings, 1 reply; 6+ messages in thread
From: Luis Felipe Hernandez @ 2024-10-25 19:16 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: brendan.higgins, davidgow, linux-kselftest, kunit-dev, skhan,
	ricardo, linux-kernel-mentees

Thank you for your feedback and patience Andy. I apologize about the
hastiness of the v2 patch. I've addressed the feedback and would like to
wait for any additional reviews before sending out a v3.

In the meantime I wanted to answer the questions posed to the best of
my ability.

> 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+19ysxQ@mail.gmail.com/

> Where is this? I don't see it right now in the Linux Next...

It's a previous kunit test suite, it should be in both next and mainline
Makefile: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/lib/math/tests/Makefile?h=next-20241025
Kunit Test: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/lib/math/tests/int_pow_kunit.c?h=next-20241025
Kconfig entry: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/lib/Kconfig.debug?h=next-20241025#n3103

The Kconfig entry was fixed in next by Kuan-Wei Chiu in https://lore.kernel.org/all/20241005222221.2154393-1-visitorckw@gmail.com/
which I had incorrectly placed at the top-level in my original patch,
hence the discrepancy in the location on mainline: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/lib/Kconfig.debug?h=v6.12-rc4#n3092

One more thing to note is that there is a patch that organized the tests
in lib/math as per the documentation:
https://lore.kernel.org/all/20241005222446.10471-1-luis.hernandez093@gmail.com/
Which resulted in a conflict and the fix was carried over:
https://lore.kernel.org/all/20241009162719.0adaea37@canb.auug.org.au/

Again, I appreciate your time and review. I hope this answered some of your questions.
I'll continue to follow this thread so as to make any additional fixes
from further reviews before sending out the next version.

Best regards,

Felipe

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v2] lib/math: Add int_sqrt test suite
  2024-10-25 19:16   ` Luis Felipe Hernandez
@ 2024-10-25 20:38     ` Andy Shevchenko
  0 siblings, 0 replies; 6+ messages in thread
From: Andy Shevchenko @ 2024-10-25 20:38 UTC (permalink / raw)
  To: Luis Felipe Hernandez
  Cc: brendan.higgins, davidgow, linux-kselftest, kunit-dev, skhan,
	ricardo, linux-kernel-mentees

On Fri, Oct 25, 2024 at 03:16:41PM -0400, Luis Felipe Hernandez wrote:
> Thank you for your feedback and patience Andy. I apologize about the
> hastiness of the v2 patch. I've addressed the feedback and would like to
> wait for any additional reviews before sending out a v3.
> 
> In the meantime I wanted to answer the questions posed to the best of
> my ability.
> 
> > 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+19ysxQ@mail.gmail.com/

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.

> > Where is this? I don't see it right now in the Linux Next...
> 
> It's a previous kunit test suite, it should be in both next and mainline
> Makefile: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/lib/math/tests/Makefile?h=next-20241025
> Kunit Test: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/lib/math/tests/int_pow_kunit.c?h=next-20241025
> Kconfig entry: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/lib/Kconfig.debug?h=next-20241025#n3103
> 
> The Kconfig entry was fixed in next by Kuan-Wei Chiu in https://lore.kernel.org/all/20241005222221.2154393-1-visitorckw@gmail.com/
> which I had incorrectly placed at the top-level in my original patch,
> hence the discrepancy in the location on mainline: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/lib/Kconfig.debug?h=v6.12-rc4#n3092
> 
> One more thing to note is that there is a patch that organized the tests
> in lib/math as per the documentation:
> https://lore.kernel.org/all/20241005222446.10471-1-luis.hernandez093@gmail.com/
> Which resulted in a conflict and the fix was carried over:
> https://lore.kernel.org/all/20241009162719.0adaea37@canb.auug.org.au/
> 
> Again, I appreciate your time and review. I hope this answered some of your questions.
> I'll continue to follow this thread so as to make any additional fixes
> from further reviews before sending out the next version.

Okay, I will wait for new Linux next tags.

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v2] lib/math: Add int_sqrt test suite
  2024-10-24 19:55 [PATCH v2] lib/math: Add int_sqrt test suite Luis Felipe Hernandez
  2024-10-25 15:20 ` Andy Shevchenko
@ 2024-10-25 23:41 ` kernel test robot
  2024-10-26  1:55 ` kernel test robot
  2 siblings, 0 replies; 6+ messages in thread
From: kernel test robot @ 2024-10-25 23:41 UTC (permalink / raw)
  To: Luis Felipe Hernandez, brendan.higgins, davidgow
  Cc: llvm, oe-kbuild-all, Luis Felipe Hernandez, linux-kselftest,
	kunit-dev, skhan, ricardo, linux-kernel-mentees,
	andriy.shevchenko

Hi Luis,

kernel test robot noticed the following build errors:

[auto build test ERROR on v6.12-rc4]
[also build test ERROR on linus/master]
[cannot apply to akpm-mm/mm-nonmm-unstable next-20241025]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Luis-Felipe-Hernandez/lib-math-Add-int_sqrt-test-suite/20241025-035643
base:   v6.12-rc4
patch link:    https://lore.kernel.org/r/20241024195511.72674-1-luis.hernandez093%40gmail.com
patch subject: [PATCH v2] lib/math: Add int_sqrt test suite
config: i386-buildonly-randconfig-001-20241026 (https://download.01.org/0day-ci/archive/20241026/202410260709.2XVfASBv-lkp@intel.com/config)
compiler: clang version 19.1.2 (https://github.com/llvm/llvm-project 7ba7d8e2f7b6445b60679da826210cdde29eaf8b)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20241026/202410260709.2XVfASBv-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202410260709.2XVfASBv-lkp@intel.com/

All errors (new ones prefixed by >>):

>> lib/math/tests/int_sqrt_kunit.c:7:10: fatal error: 'limits.h' file not found
       7 | #include <limits.h>
         |          ^~~~~~~~~~
   1 error generated.

Kconfig warnings: (for reference only)
   WARNING: unmet direct dependencies detected for GET_FREE_REGION
   Depends on [n]: SPARSEMEM [=n]
   Selected by [y]:
   - RESOURCE_KUNIT_TEST [=y] && RUNTIME_TESTING_MENU [=y] && KUNIT [=y]


vim +7 lib/math/tests/int_sqrt_kunit.c

     2	
     3	#include <kunit/test.h>
     4	#include <linux/math.h>
     5	#include <linux/module.h>
     6	#include <linux/string.h>
   > 7	#include <limits.h>
     8	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v2] lib/math: Add int_sqrt test suite
  2024-10-24 19:55 [PATCH v2] lib/math: Add int_sqrt test suite Luis Felipe Hernandez
  2024-10-25 15:20 ` Andy Shevchenko
  2024-10-25 23:41 ` kernel test robot
@ 2024-10-26  1:55 ` kernel test robot
  2 siblings, 0 replies; 6+ messages in thread
From: kernel test robot @ 2024-10-26  1:55 UTC (permalink / raw)
  To: Luis Felipe Hernandez, brendan.higgins, davidgow
  Cc: oe-kbuild-all, Luis Felipe Hernandez, linux-kselftest, kunit-dev,
	skhan, ricardo, linux-kernel-mentees, andriy.shevchenko

Hi Luis,

kernel test robot noticed the following build errors:

[auto build test ERROR on v6.12-rc4]
[also build test ERROR on linus/master]
[cannot apply to akpm-mm/mm-nonmm-unstable next-20241025]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Luis-Felipe-Hernandez/lib-math-Add-int_sqrt-test-suite/20241025-035643
base:   v6.12-rc4
patch link:    https://lore.kernel.org/r/20241024195511.72674-1-luis.hernandez093%40gmail.com
patch subject: [PATCH v2] lib/math: Add int_sqrt test suite
config: m68k-sun3_defconfig (https://download.01.org/0day-ci/archive/20241026/202410260915.z3q6ZOGS-lkp@intel.com/config)
compiler: m68k-linux-gcc (GCC) 13.3.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20241026/202410260915.z3q6ZOGS-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202410260915.z3q6ZOGS-lkp@intel.com/

All errors (new ones prefixed by >>):

>> lib/math/tests/int_sqrt_kunit.c:7:10: fatal error: limits.h: No such file or directory
       7 | #include <limits.h>
         |          ^~~~~~~~~~
   compilation terminated.

Kconfig warnings: (for reference only)
   WARNING: unmet direct dependencies detected for GET_FREE_REGION
   Depends on [n]: SPARSEMEM [=n]
   Selected by [m]:
   - RESOURCE_KUNIT_TEST [=m] && RUNTIME_TESTING_MENU [=y] && KUNIT [=m]


vim +7 lib/math/tests/int_sqrt_kunit.c

     2	
     3	#include <kunit/test.h>
     4	#include <linux/math.h>
     5	#include <linux/module.h>
     6	#include <linux/string.h>
   > 7	#include <limits.h>
     8	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2024-10-26  1:56 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-10-24 19:55 [PATCH v2] lib/math: Add int_sqrt test suite Luis Felipe Hernandez
2024-10-25 15:20 ` Andy Shevchenko
2024-10-25 19:16   ` Luis Felipe Hernandez
2024-10-25 20:38     ` Andy Shevchenko
2024-10-25 23:41 ` kernel test robot
2024-10-26  1:55 ` kernel test robot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox