xref: /linux/lib/test_sort.c (revision 36f33b56)
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