Commit 36f33b56 authored by Daniel Latypov's avatar Daniel Latypov Committed by Linus Torvalds

lib/test: convert test_sort.c to use KUnit

This follows up commit ebd09577 ("lib/test: convert
lib/test_list_sort.c to use KUnit").

Converting this test to KUnit makes the test a bit shorter, standardizes
how it reports pass/fail, and adds an easier way to run the test [1].

Like ebd09577, this leaves the file and Kconfig option name the same,
but slightly changes their dependencies (needs CONFIG_KUNIT).

[1] Can be run via
$ ./tools/testing/kunit/kunit.py run --kunitconfig /dev/stdin <<EOF
CONFIG_KUNIT=y
CONFIG_TEST_SORT=y
EOF

[11:30:27] Starting KUnit Kernel ...
[11:30:30] ============================================================
[11:30:30] ======== [PASSED] lib_sort ========
[11:30:30] [PASSED] test_sort
[11:30:30] ============================================================
[11:30:30] Testing complete. 1 tests run. 0 failed. 0 crashed. 0 skipped.
[11:30:30] Elapsed time: 37.032s total, 0.001s configuring, 34.090s building, 0.000s running

Note: this is the time it took after a `make mrproper`.

With an incremental rebuild, this looks more like:
[11:38:58] Elapsed time: 6.444s total, 0.001s configuring, 3.416s building, 0.000s running

Since the test has no dependencies, it can also be run (with some other
tests) with just:
$ ./tools/testing/kunit/kunit.py run

Link: https://lkml.kernel.org/r/20210715232441.1380885-1-dlatypov@google.comSigned-off-by: default avatarDaniel Latypov <dlatypov@google.com>
Cc: Pravin Shedge <pravin.shedge4linux@gmail.com>
Cc: Brendan Higgins <brendanhiggins@google.com>
Cc: David Gow <davidgow@google.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 8ba739ed
...@@ -2078,8 +2078,9 @@ config TEST_MIN_HEAP ...@@ -2078,8 +2078,9 @@ config TEST_MIN_HEAP
If unsure, say N. If unsure, say N.
config TEST_SORT config TEST_SORT
tristate "Array-based sort test" tristate "Array-based sort test" if !KUNIT_ALL_TESTS
depends on DEBUG_KERNEL || m depends on KUNIT
default KUNIT_ALL_TESTS
help help
This option enables the self-test function of 'sort()' at boot, This option enables the self-test function of 'sort()' at boot,
or at module load time. or at module load time.
......
// SPDX-License-Identifier: GPL-2.0-only // SPDX-License-Identifier: GPL-2.0-only
#include <kunit/test.h>
#include <linux/sort.h> #include <linux/sort.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/module.h> #include <linux/module.h>
...@@ -7,18 +10,17 @@ ...@@ -7,18 +10,17 @@
#define TEST_LEN 1000 #define TEST_LEN 1000
static int __init cmpint(const void *a, const void *b) static int cmpint(const void *a, const void *b)
{ {
return *(int *)a - *(int *)b; return *(int *)a - *(int *)b;
} }
static int __init test_sort_init(void) static void test_sort(struct kunit *test)
{ {
int *a, i, r = 1, err = -ENOMEM; int *a, i, r = 1;
a = kmalloc_array(TEST_LEN, sizeof(*a), GFP_KERNEL); a = kunit_kmalloc_array(test, TEST_LEN, sizeof(*a), GFP_KERNEL);
if (!a) KUNIT_ASSERT_NOT_ERR_OR_NULL(test, a);
return err;
for (i = 0; i < TEST_LEN; i++) { for (i = 0; i < TEST_LEN; i++) {
r = (r * 725861) % 6599; r = (r * 725861) % 6599;
...@@ -27,24 +29,20 @@ static int __init test_sort_init(void) ...@@ -27,24 +29,20 @@ static int __init test_sort_init(void)
sort(a, TEST_LEN, sizeof(*a), cmpint, NULL); sort(a, TEST_LEN, sizeof(*a), cmpint, NULL);
err = -EINVAL;
for (i = 0; i < TEST_LEN-1; i++) for (i = 0; i < TEST_LEN-1; i++)
if (a[i] > a[i+1]) { KUNIT_ASSERT_LE(test, a[i], a[i + 1]);
pr_err("test has failed\n");
goto exit;
}
err = 0;
pr_info("test passed\n");
exit:
kfree(a);
return err;
} }
static void __exit test_sort_exit(void) static struct kunit_case sort_test_cases[] = {
{ KUNIT_CASE(test_sort),
} {}
};
static struct kunit_suite sort_test_suite = {
.name = "lib_sort",
.test_cases = sort_test_cases,
};
module_init(test_sort_init); kunit_test_suites(&sort_test_suite);
module_exit(test_sort_exit);
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment