mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-24 23:52:40 +00:00
lib: add CONFIG_TEST_SORT to enable self-test of sort()
Along with the addition made to Kconfig.debug, the prior existing but permanently disabled test function has been slightly refactored. Patch has been tested using QEMU 2.1.2 with a .config obtained through 'make defconfig' (x86_64) and manually enabling the option. [arnd@arndb.de: move sort self-test into a separate file] Link: http://lkml.kernel.org/r/20170112110657.3123790-1-arnd@arndb.de Link: http://lkml.kernel.org/r/HE1PR09MB0394B0418D504DCD27167D4FD49B0@HE1PR09MB0394.eurprd09.prod.outlook.com Signed-off-by: Kostenzer Felix <fkostenzer@live.at> Signed-off-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
f231aebfc4
commit
c5adae9583
4 changed files with 54 additions and 39 deletions
43
lib/test_sort.c
Normal file
43
lib/test_sort.c
Normal file
|
@ -0,0 +1,43 @@
|
|||
#include <linux/sort.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
/* a simple boot-time regression test */
|
||||
|
||||
#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;
|
||||
}
|
||||
|
||||
module_init(test_sort_init);
|
||||
MODULE_LICENSE("GPL");
|
Loading…
Add table
Add a link
Reference in a new issue