xref: /openbmc/linux/lib/test_sort.c (revision adb57164)
1 // SPDX-License-Identifier: GPL-2.0-only
2 #include <linux/sort.h>
3 #include <linux/slab.h>
4 #include <linux/module.h>
5 
6 /* a simple boot-time regression test */
7 
8 #define TEST_LEN 1000
9 
10 static int __init cmpint(const void *a, const void *b)
11 {
12 	return *(int *)a - *(int *)b;
13 }
14 
15 static int __init test_sort_init(void)
16 {
17 	int *a, i, r = 1, err = -ENOMEM;
18 
19 	a = kmalloc_array(TEST_LEN, sizeof(*a), GFP_KERNEL);
20 	if (!a)
21 		return err;
22 
23 	for (i = 0; i < TEST_LEN; i++) {
24 		r = (r * 725861) % 6599;
25 		a[i] = r;
26 	}
27 
28 	sort(a, TEST_LEN, sizeof(*a), cmpint, NULL);
29 
30 	err = -EINVAL;
31 	for (i = 0; i < TEST_LEN-1; i++)
32 		if (a[i] > a[i+1]) {
33 			pr_err("test has failed\n");
34 			goto exit;
35 		}
36 	err = 0;
37 	pr_info("test passed\n");
38 exit:
39 	kfree(a);
40 	return err;
41 }
42 
43 static void __exit test_sort_exit(void)
44 {
45 }
46 
47 module_init(test_sort_init);
48 module_exit(test_sort_exit);
49 
50 MODULE_LICENSE("GPL");
51