diff options
| author | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2017-05-02 09:48:26 -0700 | 
|---|---|---|
| committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2017-05-02 09:48:26 -0700 | 
| commit | 0337966d121ebebf73a1c346123e8112796e684e (patch) | |
| tree | c0d4388591e72dc5a26ee976a9cbca70f6bafbbd /lib/test_sort.c | |
| parent | 7c5bb4ac2b76d2a09256aec8a7d584bf3e2b0466 (diff) | |
| parent | 8a038b83e012097a7ac6cfb9f6c5fac1da8fad6e (diff) | |
Merge branch 'next' into for-linus
Prepare input updates for 4.12 merge window.
Diffstat (limited to 'lib/test_sort.c')
| -rw-r--r-- | lib/test_sort.c | 44 | 
1 files changed, 44 insertions, 0 deletions
diff --git a/lib/test_sort.c b/lib/test_sort.c new file mode 100644 index 000000000000..4db3911db50a --- /dev/null +++ b/lib/test_sort.c @@ -0,0 +1,44 @@ +#include <linux/sort.h> +#include <linux/slab.h> +#include <linux/init.h> + +/* + * A simple boot-time regression test + * License: GPL + */ + +#define TEST_LEN 1000 + +static int __init cmpint(const void *a, const void *b) +{ +	return *(int *)a - *(int *)b; +} + +static int __init test_sort_init(void) +{ +	int *a, i, r = 1, err = -ENOMEM; + +	a = kmalloc_array(TEST_LEN, sizeof(*a), GFP_KERNEL); +	if (!a) +		return err; + +	for (i = 0; i < TEST_LEN; i++) { +		r = (r * 725861) % 6599; +		a[i] = r; +	} + +	sort(a, TEST_LEN, sizeof(*a), cmpint, NULL); + +	err = -EINVAL; +	for (i = 0; i < TEST_LEN-1; i++) +		if (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; +} +subsys_initcall(test_sort_init);  | 
