109c434b8SThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only
2*36f33b56SDaniel Latypov
3*36f33b56SDaniel Latypov #include <kunit/test.h>
4*36f33b56SDaniel Latypov
5c5adae95SKostenzer Felix #include <linux/sort.h>
6c5adae95SKostenzer Felix #include <linux/slab.h>
7ebd03a9aSGeert Uytterhoeven #include <linux/module.h>
8c5adae95SKostenzer Felix
9ebd03a9aSGeert Uytterhoeven /* a simple boot-time regression test */
10c5adae95SKostenzer Felix
11c5adae95SKostenzer Felix #define TEST_LEN 1000
12c5adae95SKostenzer Felix
cmpint(const void * a,const void * b)13*36f33b56SDaniel Latypov static int cmpint(const void *a, const void *b)
14c5adae95SKostenzer Felix {
15c5adae95SKostenzer Felix return *(int *)a - *(int *)b;
16c5adae95SKostenzer Felix }
17c5adae95SKostenzer Felix
test_sort(struct kunit * test)18*36f33b56SDaniel Latypov static void test_sort(struct kunit *test)
19c5adae95SKostenzer Felix {
20*36f33b56SDaniel Latypov int *a, i, r = 1;
21c5adae95SKostenzer Felix
22*36f33b56SDaniel Latypov a = kunit_kmalloc_array(test, TEST_LEN, sizeof(*a), GFP_KERNEL);
23*36f33b56SDaniel Latypov KUNIT_ASSERT_NOT_ERR_OR_NULL(test, a);
24c5adae95SKostenzer Felix
25c5adae95SKostenzer Felix for (i = 0; i < TEST_LEN; i++) {
26c5adae95SKostenzer Felix r = (r * 725861) % 6599;
27c5adae95SKostenzer Felix a[i] = r;
28c5adae95SKostenzer Felix }
29c5adae95SKostenzer Felix
30c5adae95SKostenzer Felix sort(a, TEST_LEN, sizeof(*a), cmpint, NULL);
31c5adae95SKostenzer Felix
32c5adae95SKostenzer Felix for (i = 0; i < TEST_LEN-1; i++)
33*36f33b56SDaniel Latypov KUNIT_ASSERT_LE(test, a[i], a[i + 1]);
34c5adae95SKostenzer Felix }
35ebd03a9aSGeert Uytterhoeven
36*36f33b56SDaniel Latypov static struct kunit_case sort_test_cases[] = {
37*36f33b56SDaniel Latypov KUNIT_CASE(test_sort),
38*36f33b56SDaniel Latypov {}
39*36f33b56SDaniel Latypov };
4092fc7cb8SPravin Shedge
41*36f33b56SDaniel Latypov static struct kunit_suite sort_test_suite = {
42*36f33b56SDaniel Latypov .name = "lib_sort",
43*36f33b56SDaniel Latypov .test_cases = sort_test_cases,
44*36f33b56SDaniel Latypov };
45*36f33b56SDaniel Latypov
46*36f33b56SDaniel Latypov kunit_test_suites(&sort_test_suite);
4792fc7cb8SPravin Shedge
48ebd03a9aSGeert Uytterhoeven MODULE_LICENSE("GPL");
49