Message ID | 20250208-prime_numbers-kunit-convert-v3-0-8ffd5816d8dc@gmail.com (mailing list archive) |
---|---|
Headers | show |
Series | lib/prime_numbers: convert self-test to KUnit | expand |
On Sat, 08 Feb 2025 17:52:28 -0500 Tamir Duberstein <tamird@gmail.com> wrote: > This is a clear example of a unit test. > > I tested this using: > > $ tools/testing/kunit/kunit.py run --arch arm64 --make_options LLVM=1 math-prime_numbers > > On success: > ; [08:51:41] ============== math-prime_numbers (1 subtest) ============== > ; [08:51:41] [PASSED] prime_numbers_test > ; [08:51:41] =============== [PASSED] math-prime_numbers ================ > ; [08:51:41] ============================================================ > ; [08:51:41] Testing complete. Ran 1 tests: passed: 1 > > On failure: > ; [08:50:19] ============== math-prime_numbers (1 subtest) ============== > ; [08:50:19] # prime_numbers_test: ASSERTION FAILED at lib/math/tests/prime_numbers_kunit.c:28 > ; [08:50:19] Expected slow == fast, but > ; [08:50:19] slow == 0 (0x0) > ; [08:50:19] fast == 1 (0x1) > ; [08:50:19] is-prime(2) > ; [08:50:19] [FAILED] prime_numbers_test > ; [08:50:19] # module: prime_numbers_kunit > ; [08:50:19] # math-prime_numbers: primes.{last=61, .sz=64, .primes[]=...x28208a20a08a28ac} = 2-3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61 > ; [08:50:19] =============== [FAILED] math-prime_numbers ================ > ; [08:50:19] ============================================================ > ; [08:50:19] Testing complete. Ran 1 tests: failed: 1 > I resolved this against "lib/math: add Kunit test suite for gcd()" (https://lkml.kernel.org/r/20250203075400.3431330-1-eleanor15x@gmail.com) in the obvious fashion then added this fixup: From: Andrew Morton <akpm@linux-foundation.org> Subject: lib-math-hook-up-tests-makefile-fix Date: Sat Feb 8 03:33:59 PM PST 2025 don't link gcd_kunit.o twice Cc: David Gow <davidgow@google.com> Cc: Tamir Duberstein <tamird@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> --- lib/math/Makefile | 1 - 1 file changed, 1 deletion(-) --- a/lib/math/Makefile~lib-math-hook-up-tests-makefile-fix +++ a/lib/math/Makefile @@ -8,5 +8,4 @@ obj-$(CONFIG_RATIONAL) += rational.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-$(CONFIG_GCD_KUNIT_TEST) += tests/gcd_kunit.o obj-y += tests/
On Sat, Feb 8, 2025 at 7:25 PM Andrew Morton <akpm@linux-foundation.org> wrote: > > On Sat, 08 Feb 2025 17:52:28 -0500 Tamir Duberstein <tamird@gmail.com> wrote: > > > This is a clear example of a unit test. > > > > I tested this using: > > > > $ tools/testing/kunit/kunit.py run --arch arm64 --make_options LLVM=1 math-prime_numbers > > > > On success: > > ; [08:51:41] ============== math-prime_numbers (1 subtest) ============== > > ; [08:51:41] [PASSED] prime_numbers_test > > ; [08:51:41] =============== [PASSED] math-prime_numbers ================ > > ; [08:51:41] ============================================================ > > ; [08:51:41] Testing complete. Ran 1 tests: passed: 1 > > > > On failure: > > ; [08:50:19] ============== math-prime_numbers (1 subtest) ============== > > ; [08:50:19] # prime_numbers_test: ASSERTION FAILED at lib/math/tests/prime_numbers_kunit.c:28 > > ; [08:50:19] Expected slow == fast, but > > ; [08:50:19] slow == 0 (0x0) > > ; [08:50:19] fast == 1 (0x1) > > ; [08:50:19] is-prime(2) > > ; [08:50:19] [FAILED] prime_numbers_test > > ; [08:50:19] # module: prime_numbers_kunit > > ; [08:50:19] # math-prime_numbers: primes.{last=61, .sz=64, .primes[]=...x28208a20a08a28ac} = 2-3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61 > > ; [08:50:19] =============== [FAILED] math-prime_numbers ================ > > ; [08:50:19] ============================================================ > > ; [08:50:19] Testing complete. Ran 1 tests: failed: 1 > > > > I resolved this against "lib/math: add Kunit test suite for gcd()" > (https://lkml.kernel.org/r/20250203075400.3431330-1-eleanor15x@gmail.com) > in the obvious fashion then added this fixup: > > From: Andrew Morton <akpm@linux-foundation.org> > Subject: lib-math-hook-up-tests-makefile-fix > Date: Sat Feb 8 03:33:59 PM PST 2025 > > don't link gcd_kunit.o twice > > Cc: David Gow <davidgow@google.com> > Cc: Tamir Duberstein <tamird@gmail.com> > Signed-off-by: Andrew Morton <akpm@linux-foundation.org> > --- > > lib/math/Makefile | 1 - > 1 file changed, 1 deletion(-) > > --- a/lib/math/Makefile~lib-math-hook-up-tests-makefile-fix > +++ a/lib/math/Makefile > @@ -8,5 +8,4 @@ obj-$(CONFIG_RATIONAL) += rational.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-$(CONFIG_GCD_KUNIT_TEST) += tests/gcd_kunit.o > obj-y += tests/ > _ > > and the x86_64 allmodconfig build failed thusly: > > lib/math/tests/prime_numbers_kunit.c: In function 'prime_numbers_test': > lib/math/tests/prime_numbers_kunit.c:25:35: error: implicit declaration of function 'slow_is_prime_number'; did you mean 'is_prime_number'? [-Werror=implicit-function-declaration] > 25 | const bool slow = slow_is_prime_number(x); > | ^~~~~~~~~~~~~~~~~~~~ > | is_prime_number > > > So, please redo against mm.git's mm-everything branch or its > mm-nonmm-unstable branch and retest carefully. Thanks for the clear instructions. I was able to reproduce. v4 is on its way.
This is a clear example of a unit test. I tested this using: $ tools/testing/kunit/kunit.py run --arch arm64 --make_options LLVM=1 math-prime_numbers On success: ; [08:51:41] ============== math-prime_numbers (1 subtest) ============== ; [08:51:41] [PASSED] prime_numbers_test ; [08:51:41] =============== [PASSED] math-prime_numbers ================ ; [08:51:41] ============================================================ ; [08:51:41] Testing complete. Ran 1 tests: passed: 1 On failure: ; [08:50:19] ============== math-prime_numbers (1 subtest) ============== ; [08:50:19] # prime_numbers_test: ASSERTION FAILED at lib/math/tests/prime_numbers_kunit.c:28 ; [08:50:19] Expected slow == fast, but ; [08:50:19] slow == 0 (0x0) ; [08:50:19] fast == 1 (0x1) ; [08:50:19] is-prime(2) ; [08:50:19] [FAILED] prime_numbers_test ; [08:50:19] # module: prime_numbers_kunit ; [08:50:19] # math-prime_numbers: primes.{last=61, .sz=64, .primes[]=...x28208a20a08a28ac} = 2-3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61 ; [08:50:19] =============== [FAILED] math-prime_numbers ================ ; [08:50:19] ============================================================ ; [08:50:19] Testing complete. Ran 1 tests: failed: 1 Signed-off-by: Tamir Duberstein <tamird@gmail.com> --- Changes in v3: - Remove `selftest_max` again; snuck into v2. - Restore `#include <linux/slab.h>`. - Sending v3 early because kernel test robot is sad. - Link to v2: https://lore.kernel.org/r/20250208-prime_numbers-kunit-convert-v2-0-863119447e04@gmail.com Changes in v2: - Keep all the details hidden in prime_numbers.c; expose `with_primes` for debug logging in the test. (David Gow) - Link to v1: https://lore.kernel.org/r/20250207-prime_numbers-kunit-convert-v1-0-6067f2b7c713@gmail.com --- Tamir Duberstein (2): lib/math: Hook up tests/Makefile lib/prime_numbers: convert self-test to KUnit lib/Kconfig.debug | 14 +++++ lib/math/Makefile | 4 +- lib/math/prime_numbers.c | 76 ++++------------------------ lib/math/prime_numbers_private.h | 17 +++++++ lib/math/tests/Makefile | 1 + lib/math/tests/prime_numbers_kunit.c | 59 +++++++++++++++++++++ tools/testing/selftests/lib/config | 1 - tools/testing/selftests/lib/prime_numbers.sh | 4 -- 8 files changed, 102 insertions(+), 74 deletions(-) --- base-commit: 2014c95afecee3e76ca4a56956a936e23283f05b change-id: 20250207-prime_numbers-kunit-convert-71c9b3c1d1d4 Best regards,