cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

test-kstrtox.c (17713B)


      1#include <linux/init.h>
      2#include <linux/kernel.h>
      3#include <linux/module.h>
      4
      5#define for_each_test(i, test)	\
      6	for (i = 0; i < ARRAY_SIZE(test); i++)
      7
      8struct test_fail {
      9	const char *str;
     10	unsigned int base;
     11};
     12
     13#define DEFINE_TEST_FAIL(test)	\
     14	const struct test_fail test[] __initconst
     15
     16#define DECLARE_TEST_OK(type, test_type)	\
     17	test_type {				\
     18		const char *str;		\
     19		unsigned int base;		\
     20		type expected_res;		\
     21	}
     22
     23#define DEFINE_TEST_OK(type, test)	\
     24	const type test[] __initconst
     25
     26#define TEST_FAIL(fn, type, fmt, test)					\
     27{									\
     28	unsigned int i;							\
     29									\
     30	for_each_test(i, test) {					\
     31		const struct test_fail *t = &test[i];			\
     32		type tmp;						\
     33		int rv;							\
     34									\
     35		tmp = 0;						\
     36		rv = fn(t->str, t->base, &tmp);				\
     37		if (rv >= 0) {						\
     38			WARN(1, "str '%s', base %u, expected -E, got %d/" fmt "\n",	\
     39				t->str, t->base, rv, tmp);		\
     40			continue;					\
     41		}							\
     42	}								\
     43}
     44
     45#define TEST_OK(fn, type, fmt, test)					\
     46{									\
     47	unsigned int i;							\
     48									\
     49	for_each_test(i, test) {					\
     50		const typeof(test[0]) *t = &test[i];			\
     51		type res;						\
     52		int rv;							\
     53									\
     54		rv = fn(t->str, t->base, &res);				\
     55		if (rv != 0) {						\
     56			WARN(1, "str '%s', base %u, expected 0/" fmt ", got %d\n",	\
     57				t->str, t->base, t->expected_res, rv);	\
     58			continue;					\
     59		}							\
     60		if (res != t->expected_res) {				\
     61			WARN(1, "str '%s', base %u, expected " fmt ", got " fmt "\n",	\
     62				t->str, t->base, t->expected_res, res);	\
     63			continue;					\
     64		}							\
     65	}								\
     66}
     67
     68static void __init test_kstrtoull_ok(void)
     69{
     70	DECLARE_TEST_OK(unsigned long long, struct test_ull);
     71	static DEFINE_TEST_OK(struct test_ull, test_ull_ok) = {
     72		{"0",	10,	0ULL},
     73		{"1",	10,	1ULL},
     74		{"127",	10,	127ULL},
     75		{"128",	10,	128ULL},
     76		{"129",	10,	129ULL},
     77		{"255",	10,	255ULL},
     78		{"256",	10,	256ULL},
     79		{"257",	10,	257ULL},
     80		{"32767",	10,	32767ULL},
     81		{"32768",	10,	32768ULL},
     82		{"32769",	10,	32769ULL},
     83		{"65535",	10,	65535ULL},
     84		{"65536",	10,	65536ULL},
     85		{"65537",	10,	65537ULL},
     86		{"2147483647",	10,	2147483647ULL},
     87		{"2147483648",	10,	2147483648ULL},
     88		{"2147483649",	10,	2147483649ULL},
     89		{"4294967295",	10,	4294967295ULL},
     90		{"4294967296",	10,	4294967296ULL},
     91		{"4294967297",	10,	4294967297ULL},
     92		{"9223372036854775807",	10,	9223372036854775807ULL},
     93		{"9223372036854775808",	10,	9223372036854775808ULL},
     94		{"9223372036854775809",	10,	9223372036854775809ULL},
     95		{"18446744073709551614",	10,	18446744073709551614ULL},
     96		{"18446744073709551615",	10,	18446744073709551615ULL},
     97
     98		{"00",		8,	00ULL},
     99		{"01",		8,	01ULL},
    100		{"0177",	8,	0177ULL},
    101		{"0200",	8,	0200ULL},
    102		{"0201",	8,	0201ULL},
    103		{"0377",	8,	0377ULL},
    104		{"0400",	8,	0400ULL},
    105		{"0401",	8,	0401ULL},
    106		{"077777",	8,	077777ULL},
    107		{"0100000",	8,	0100000ULL},
    108		{"0100001",	8,	0100001ULL},
    109		{"0177777",	8,	0177777ULL},
    110		{"0200000",	8,	0200000ULL},
    111		{"0200001",	8,	0200001ULL},
    112		{"017777777777",	8,	017777777777ULL},
    113		{"020000000000",	8,	020000000000ULL},
    114		{"020000000001",	8,	020000000001ULL},
    115		{"037777777777",	8,	037777777777ULL},
    116		{"040000000000",	8,	040000000000ULL},
    117		{"040000000001",	8,	040000000001ULL},
    118		{"0777777777777777777777",	8,	0777777777777777777777ULL},
    119		{"01000000000000000000000",	8,	01000000000000000000000ULL},
    120		{"01000000000000000000001",	8,	01000000000000000000001ULL},
    121		{"01777777777777777777776",	8,	01777777777777777777776ULL},
    122		{"01777777777777777777777",	8,	01777777777777777777777ULL},
    123
    124		{"0x0",		16,	0x0ULL},
    125		{"0x1",		16,	0x1ULL},
    126		{"0x7f",	16,	0x7fULL},
    127		{"0x80",	16,	0x80ULL},
    128		{"0x81",	16,	0x81ULL},
    129		{"0xff",	16,	0xffULL},
    130		{"0x100",	16,	0x100ULL},
    131		{"0x101",	16,	0x101ULL},
    132		{"0x7fff",	16,	0x7fffULL},
    133		{"0x8000",	16,	0x8000ULL},
    134		{"0x8001",	16,	0x8001ULL},
    135		{"0xffff",	16,	0xffffULL},
    136		{"0x10000",	16,	0x10000ULL},
    137		{"0x10001",	16,	0x10001ULL},
    138		{"0x7fffffff",	16,	0x7fffffffULL},
    139		{"0x80000000",	16,	0x80000000ULL},
    140		{"0x80000001",	16,	0x80000001ULL},
    141		{"0xffffffff",	16,	0xffffffffULL},
    142		{"0x100000000",	16,	0x100000000ULL},
    143		{"0x100000001",	16,	0x100000001ULL},
    144		{"0x7fffffffffffffff",	16,	0x7fffffffffffffffULL},
    145		{"0x8000000000000000",	16,	0x8000000000000000ULL},
    146		{"0x8000000000000001",	16,	0x8000000000000001ULL},
    147		{"0xfffffffffffffffe",	16,	0xfffffffffffffffeULL},
    148		{"0xffffffffffffffff",	16,	0xffffffffffffffffULL},
    149
    150		{"0\n",	0,	0ULL},
    151	};
    152	TEST_OK(kstrtoull, unsigned long long, "%llu", test_ull_ok);
    153}
    154
    155static void __init test_kstrtoull_fail(void)
    156{
    157	static DEFINE_TEST_FAIL(test_ull_fail) = {
    158		{"",	0},
    159		{"",	8},
    160		{"",	10},
    161		{"",	16},
    162		{"\n",	0},
    163		{"\n",	8},
    164		{"\n",	10},
    165		{"\n",	16},
    166		{"\n0",	0},
    167		{"\n0",	8},
    168		{"\n0",	10},
    169		{"\n0",	16},
    170		{"+",	0},
    171		{"+",	8},
    172		{"+",	10},
    173		{"+",	16},
    174		{"-",	0},
    175		{"-",	8},
    176		{"-",	10},
    177		{"-",	16},
    178		{"0x",	0},
    179		{"0x",	16},
    180		{"0X",	0},
    181		{"0X",	16},
    182		{"0 ",	0},
    183		{"1+",	0},
    184		{"1-",	0},
    185		{" 2",	0},
    186		/* base autodetection */
    187		{"0x0z",	0},
    188		{"0z",		0},
    189		{"a",		0},
    190		/* digit >= base */
    191		{"2",	2},
    192		{"8",	8},
    193		{"a",	10},
    194		{"A",	10},
    195		{"g",	16},
    196		{"G",	16},
    197		/* overflow */
    198		{"10000000000000000000000000000000000000000000000000000000000000000",	2},
    199		{"2000000000000000000000",	8},
    200		{"18446744073709551616",	10},
    201		{"10000000000000000",	16},
    202		/* negative */
    203		{"-0", 0},
    204		{"-0", 8},
    205		{"-0", 10},
    206		{"-0", 16},
    207		{"-1", 0},
    208		{"-1", 8},
    209		{"-1", 10},
    210		{"-1", 16},
    211		/* sign is first character if any */
    212		{"-+1", 0},
    213		{"-+1", 8},
    214		{"-+1", 10},
    215		{"-+1", 16},
    216		/* nothing after \n */
    217		{"0\n0", 0},
    218		{"0\n0", 8},
    219		{"0\n0", 10},
    220		{"0\n0", 16},
    221		{"0\n+", 0},
    222		{"0\n+", 8},
    223		{"0\n+", 10},
    224		{"0\n+", 16},
    225		{"0\n-", 0},
    226		{"0\n-", 8},
    227		{"0\n-", 10},
    228		{"0\n-", 16},
    229		{"0\n ", 0},
    230		{"0\n ", 8},
    231		{"0\n ", 10},
    232		{"0\n ", 16},
    233	};
    234	TEST_FAIL(kstrtoull, unsigned long long, "%llu", test_ull_fail);
    235}
    236
    237static void __init test_kstrtoll_ok(void)
    238{
    239	DECLARE_TEST_OK(long long, struct test_ll);
    240	static DEFINE_TEST_OK(struct test_ll, test_ll_ok) = {
    241		{"0",	10,	0LL},
    242		{"1",	10,	1LL},
    243		{"127",	10,	127LL},
    244		{"128",	10,	128LL},
    245		{"129",	10,	129LL},
    246		{"255",	10,	255LL},
    247		{"256",	10,	256LL},
    248		{"257",	10,	257LL},
    249		{"32767",	10,	32767LL},
    250		{"32768",	10,	32768LL},
    251		{"32769",	10,	32769LL},
    252		{"65535",	10,	65535LL},
    253		{"65536",	10,	65536LL},
    254		{"65537",	10,	65537LL},
    255		{"2147483647",	10,	2147483647LL},
    256		{"2147483648",	10,	2147483648LL},
    257		{"2147483649",	10,	2147483649LL},
    258		{"4294967295",	10,	4294967295LL},
    259		{"4294967296",	10,	4294967296LL},
    260		{"4294967297",	10,	4294967297LL},
    261		{"9223372036854775807",	10,	9223372036854775807LL},
    262
    263		{"-0",	10,	0LL},
    264		{"-1",	10,	-1LL},
    265		{"-2",	10,	-2LL},
    266		{"-9223372036854775808",	10,	LLONG_MIN},
    267	};
    268	TEST_OK(kstrtoll, long long, "%lld", test_ll_ok);
    269}
    270
    271static void __init test_kstrtoll_fail(void)
    272{
    273	static DEFINE_TEST_FAIL(test_ll_fail) = {
    274		{"9223372036854775808",	10},
    275		{"9223372036854775809",	10},
    276		{"18446744073709551614",	10},
    277		{"18446744073709551615",	10},
    278		{"-9223372036854775809",	10},
    279		{"-18446744073709551614",	10},
    280		{"-18446744073709551615",	10},
    281		/* sign is first character if any */
    282		{"-+1", 0},
    283		{"-+1", 8},
    284		{"-+1", 10},
    285		{"-+1", 16},
    286	};
    287	TEST_FAIL(kstrtoll, long long, "%lld", test_ll_fail);
    288}
    289
    290static void __init test_kstrtou64_ok(void)
    291{
    292	DECLARE_TEST_OK(u64, struct test_u64);
    293	static DEFINE_TEST_OK(struct test_u64, test_u64_ok) = {
    294		{"0",	10,	0},
    295		{"1",	10,	1},
    296		{"126",	10,	126},
    297		{"127",	10,	127},
    298		{"128",	10,	128},
    299		{"129",	10,	129},
    300		{"254",	10,	254},
    301		{"255",	10,	255},
    302		{"256",	10,	256},
    303		{"257",	10,	257},
    304		{"32766",	10,	32766},
    305		{"32767",	10,	32767},
    306		{"32768",	10,	32768},
    307		{"32769",	10,	32769},
    308		{"65534",	10,	65534},
    309		{"65535",	10,	65535},
    310		{"65536",	10,	65536},
    311		{"65537",	10,	65537},
    312		{"2147483646",	10,	2147483646},
    313		{"2147483647",	10,	2147483647},
    314		{"2147483648",	10,	2147483648ULL},
    315		{"2147483649",	10,	2147483649ULL},
    316		{"4294967294",	10,	4294967294ULL},
    317		{"4294967295",	10,	4294967295ULL},
    318		{"4294967296",	10,	4294967296ULL},
    319		{"4294967297",	10,	4294967297ULL},
    320		{"9223372036854775806",	10,	9223372036854775806ULL},
    321		{"9223372036854775807",	10,	9223372036854775807ULL},
    322		{"9223372036854775808",	10,	9223372036854775808ULL},
    323		{"9223372036854775809",	10,	9223372036854775809ULL},
    324		{"18446744073709551614",	10,	18446744073709551614ULL},
    325		{"18446744073709551615",	10,	18446744073709551615ULL},
    326	};
    327	TEST_OK(kstrtou64, u64, "%llu", test_u64_ok);
    328}
    329
    330static void __init test_kstrtou64_fail(void)
    331{
    332	static DEFINE_TEST_FAIL(test_u64_fail) = {
    333		{"-2",	10},
    334		{"-1",	10},
    335		{"18446744073709551616",	10},
    336		{"18446744073709551617",	10},
    337	};
    338	TEST_FAIL(kstrtou64, u64, "%llu", test_u64_fail);
    339}
    340
    341static void __init test_kstrtos64_ok(void)
    342{
    343	DECLARE_TEST_OK(s64, struct test_s64);
    344	static DEFINE_TEST_OK(struct test_s64, test_s64_ok) = {
    345		{"-128",	10,	-128},
    346		{"-127",	10,	-127},
    347		{"-1",	10,	-1},
    348		{"0",	10,	0},
    349		{"1",	10,	1},
    350		{"126",	10,	126},
    351		{"127",	10,	127},
    352		{"128",	10,	128},
    353		{"129",	10,	129},
    354		{"254",	10,	254},
    355		{"255",	10,	255},
    356		{"256",	10,	256},
    357		{"257",	10,	257},
    358		{"32766",	10,	32766},
    359		{"32767",	10,	32767},
    360		{"32768",	10,	32768},
    361		{"32769",	10,	32769},
    362		{"65534",	10,	65534},
    363		{"65535",	10,	65535},
    364		{"65536",	10,	65536},
    365		{"65537",	10,	65537},
    366		{"2147483646",	10,	2147483646},
    367		{"2147483647",	10,	2147483647},
    368		{"2147483648",	10,	2147483648LL},
    369		{"2147483649",	10,	2147483649LL},
    370		{"4294967294",	10,	4294967294LL},
    371		{"4294967295",	10,	4294967295LL},
    372		{"4294967296",	10,	4294967296LL},
    373		{"4294967297",	10,	4294967297LL},
    374		{"9223372036854775806",	10,	9223372036854775806LL},
    375		{"9223372036854775807",	10,	9223372036854775807LL},
    376	};
    377	TEST_OK(kstrtos64, s64, "%lld", test_s64_ok);
    378}
    379
    380static void __init test_kstrtos64_fail(void)
    381{
    382	static DEFINE_TEST_FAIL(test_s64_fail) = {
    383		{"9223372036854775808",	10},
    384		{"9223372036854775809",	10},
    385		{"18446744073709551614",	10},
    386		{"18446744073709551615",	10},
    387		{"18446744073709551616",	10},
    388		{"18446744073709551617",	10},
    389	};
    390	TEST_FAIL(kstrtos64, s64, "%lld", test_s64_fail);
    391}
    392
    393static void __init test_kstrtou32_ok(void)
    394{
    395	DECLARE_TEST_OK(u32, struct test_u32);
    396	static DEFINE_TEST_OK(struct test_u32, test_u32_ok) = {
    397		{"0",	10,	0},
    398		{"1",	10,	1},
    399		{"126",	10,	126},
    400		{"127",	10,	127},
    401		{"128",	10,	128},
    402		{"129",	10,	129},
    403		{"254",	10,	254},
    404		{"255",	10,	255},
    405		{"256",	10,	256},
    406		{"257",	10,	257},
    407		{"32766",	10,	32766},
    408		{"32767",	10,	32767},
    409		{"32768",	10,	32768},
    410		{"32769",	10,	32769},
    411		{"65534",	10,	65534},
    412		{"65535",	10,	65535},
    413		{"65536",	10,	65536},
    414		{"65537",	10,	65537},
    415		{"2147483646",	10,	2147483646},
    416		{"2147483647",	10,	2147483647},
    417		{"2147483648",	10,	2147483648U},
    418		{"2147483649",	10,	2147483649U},
    419		{"4294967294",	10,	4294967294U},
    420		{"4294967295",	10,	4294967295U},
    421	};
    422	TEST_OK(kstrtou32, u32, "%u", test_u32_ok);
    423}
    424
    425static void __init test_kstrtou32_fail(void)
    426{
    427	static DEFINE_TEST_FAIL(test_u32_fail) = {
    428		{"-2",	10},
    429		{"-1",	10},
    430		{"4294967296",	10},
    431		{"4294967297",	10},
    432		{"9223372036854775806",	10},
    433		{"9223372036854775807",	10},
    434		{"9223372036854775808",	10},
    435		{"9223372036854775809",	10},
    436		{"18446744073709551614",	10},
    437		{"18446744073709551615",	10},
    438		{"18446744073709551616",	10},
    439		{"18446744073709551617",	10},
    440	};
    441	TEST_FAIL(kstrtou32, u32, "%u", test_u32_fail);
    442}
    443
    444static void __init test_kstrtos32_ok(void)
    445{
    446	DECLARE_TEST_OK(s32, struct test_s32);
    447	static DEFINE_TEST_OK(struct test_s32, test_s32_ok) = {
    448		{"-128",	10,	-128},
    449		{"-127",	10,	-127},
    450		{"-1",	10,	-1},
    451		{"0",	10,	0},
    452		{"1",	10,	1},
    453		{"126",	10,	126},
    454		{"127",	10,	127},
    455		{"128",	10,	128},
    456		{"129",	10,	129},
    457		{"254",	10,	254},
    458		{"255",	10,	255},
    459		{"256",	10,	256},
    460		{"257",	10,	257},
    461		{"32766",	10,	32766},
    462		{"32767",	10,	32767},
    463		{"32768",	10,	32768},
    464		{"32769",	10,	32769},
    465		{"65534",	10,	65534},
    466		{"65535",	10,	65535},
    467		{"65536",	10,	65536},
    468		{"65537",	10,	65537},
    469		{"2147483646",	10,	2147483646},
    470		{"2147483647",	10,	2147483647},
    471	};
    472	TEST_OK(kstrtos32, s32, "%d", test_s32_ok);
    473}
    474
    475static void __init test_kstrtos32_fail(void)
    476{
    477	static DEFINE_TEST_FAIL(test_s32_fail) = {
    478		{"2147483648",	10},
    479		{"2147483649",	10},
    480		{"4294967294",	10},
    481		{"4294967295",	10},
    482		{"4294967296",	10},
    483		{"4294967297",	10},
    484		{"9223372036854775806",	10},
    485		{"9223372036854775807",	10},
    486		{"9223372036854775808",	10},
    487		{"9223372036854775809",	10},
    488		{"18446744073709551614",	10},
    489		{"18446744073709551615",	10},
    490		{"18446744073709551616",	10},
    491		{"18446744073709551617",	10},
    492	};
    493	TEST_FAIL(kstrtos32, s32, "%d", test_s32_fail);
    494}
    495
    496static void __init test_kstrtou16_ok(void)
    497{
    498	DECLARE_TEST_OK(u16, struct test_u16);
    499	static DEFINE_TEST_OK(struct test_u16, test_u16_ok) = {
    500		{"0",	10,	0},
    501		{"1",	10,	1},
    502		{"126",	10,	126},
    503		{"127",	10,	127},
    504		{"128",	10,	128},
    505		{"129",	10,	129},
    506		{"254",	10,	254},
    507		{"255",	10,	255},
    508		{"256",	10,	256},
    509		{"257",	10,	257},
    510		{"32766",	10,	32766},
    511		{"32767",	10,	32767},
    512		{"32768",	10,	32768},
    513		{"32769",	10,	32769},
    514		{"65534",	10,	65534},
    515		{"65535",	10,	65535},
    516	};
    517	TEST_OK(kstrtou16, u16, "%hu", test_u16_ok);
    518}
    519
    520static void __init test_kstrtou16_fail(void)
    521{
    522	static DEFINE_TEST_FAIL(test_u16_fail) = {
    523		{"-2",	10},
    524		{"-1",	10},
    525		{"65536",	10},
    526		{"65537",	10},
    527		{"2147483646",	10},
    528		{"2147483647",	10},
    529		{"2147483648",	10},
    530		{"2147483649",	10},
    531		{"4294967294",	10},
    532		{"4294967295",	10},
    533		{"4294967296",	10},
    534		{"4294967297",	10},
    535		{"9223372036854775806",	10},
    536		{"9223372036854775807",	10},
    537		{"9223372036854775808",	10},
    538		{"9223372036854775809",	10},
    539		{"18446744073709551614",	10},
    540		{"18446744073709551615",	10},
    541		{"18446744073709551616",	10},
    542		{"18446744073709551617",	10},
    543	};
    544	TEST_FAIL(kstrtou16, u16, "%hu", test_u16_fail);
    545}
    546
    547static void __init test_kstrtos16_ok(void)
    548{
    549	DECLARE_TEST_OK(s16, struct test_s16);
    550	static DEFINE_TEST_OK(struct test_s16, test_s16_ok) = {
    551		{"-130",	10,	-130},
    552		{"-129",	10,	-129},
    553		{"-128",	10,	-128},
    554		{"-127",	10,	-127},
    555		{"-1",	10,	-1},
    556		{"0",	10,	0},
    557		{"1",	10,	1},
    558		{"126",	10,	126},
    559		{"127",	10,	127},
    560		{"128",	10,	128},
    561		{"129",	10,	129},
    562		{"254",	10,	254},
    563		{"255",	10,	255},
    564		{"256",	10,	256},
    565		{"257",	10,	257},
    566		{"32766",	10,	32766},
    567		{"32767",	10,	32767},
    568	};
    569	TEST_OK(kstrtos16, s16, "%hd", test_s16_ok);
    570}
    571
    572static void __init test_kstrtos16_fail(void)
    573{
    574	static DEFINE_TEST_FAIL(test_s16_fail) = {
    575		{"32768",	10},
    576		{"32769",	10},
    577		{"65534",	10},
    578		{"65535",	10},
    579		{"65536",	10},
    580		{"65537",	10},
    581		{"2147483646",	10},
    582		{"2147483647",	10},
    583		{"2147483648",	10},
    584		{"2147483649",	10},
    585		{"4294967294",	10},
    586		{"4294967295",	10},
    587		{"4294967296",	10},
    588		{"4294967297",	10},
    589		{"9223372036854775806",	10},
    590		{"9223372036854775807",	10},
    591		{"9223372036854775808",	10},
    592		{"9223372036854775809",	10},
    593		{"18446744073709551614",	10},
    594		{"18446744073709551615",	10},
    595		{"18446744073709551616",	10},
    596		{"18446744073709551617",	10},
    597	};
    598	TEST_FAIL(kstrtos16, s16, "%hd", test_s16_fail);
    599}
    600
    601static void __init test_kstrtou8_ok(void)
    602{
    603	DECLARE_TEST_OK(u8, struct test_u8);
    604	static DEFINE_TEST_OK(struct test_u8, test_u8_ok) = {
    605		{"0",	10,	0},
    606		{"1",	10,	1},
    607		{"126",	10,	126},
    608		{"127",	10,	127},
    609		{"128",	10,	128},
    610		{"129",	10,	129},
    611		{"254",	10,	254},
    612		{"255",	10,	255},
    613	};
    614	TEST_OK(kstrtou8, u8, "%hhu", test_u8_ok);
    615}
    616
    617static void __init test_kstrtou8_fail(void)
    618{
    619	static DEFINE_TEST_FAIL(test_u8_fail) = {
    620		{"-2",	10},
    621		{"-1",	10},
    622		{"256",	10},
    623		{"257",	10},
    624		{"32766",	10},
    625		{"32767",	10},
    626		{"32768",	10},
    627		{"32769",	10},
    628		{"65534",	10},
    629		{"65535",	10},
    630		{"65536",	10},
    631		{"65537",	10},
    632		{"2147483646",	10},
    633		{"2147483647",	10},
    634		{"2147483648",	10},
    635		{"2147483649",	10},
    636		{"4294967294",	10},
    637		{"4294967295",	10},
    638		{"4294967296",	10},
    639		{"4294967297",	10},
    640		{"9223372036854775806",	10},
    641		{"9223372036854775807",	10},
    642		{"9223372036854775808",	10},
    643		{"9223372036854775809",	10},
    644		{"18446744073709551614",	10},
    645		{"18446744073709551615",	10},
    646		{"18446744073709551616",	10},
    647		{"18446744073709551617",	10},
    648	};
    649	TEST_FAIL(kstrtou8, u8, "%hhu", test_u8_fail);
    650}
    651
    652static void __init test_kstrtos8_ok(void)
    653{
    654	DECLARE_TEST_OK(s8, struct test_s8);
    655	static DEFINE_TEST_OK(struct test_s8, test_s8_ok) = {
    656		{"-128",	10,	-128},
    657		{"-127",	10,	-127},
    658		{"-1",	10,	-1},
    659		{"0",	10,	0},
    660		{"1",	10,	1},
    661		{"126",	10,	126},
    662		{"127",	10,	127},
    663	};
    664	TEST_OK(kstrtos8, s8, "%hhd", test_s8_ok);
    665}
    666
    667static void __init test_kstrtos8_fail(void)
    668{
    669	static DEFINE_TEST_FAIL(test_s8_fail) = {
    670		{"-130",	10},
    671		{"-129",	10},
    672		{"128",	10},
    673		{"129",	10},
    674		{"254",	10},
    675		{"255",	10},
    676		{"256",	10},
    677		{"257",	10},
    678		{"32766",	10},
    679		{"32767",	10},
    680		{"32768",	10},
    681		{"32769",	10},
    682		{"65534",	10},
    683		{"65535",	10},
    684		{"65536",	10},
    685		{"65537",	10},
    686		{"2147483646",	10},
    687		{"2147483647",	10},
    688		{"2147483648",	10},
    689		{"2147483649",	10},
    690		{"4294967294",	10},
    691		{"4294967295",	10},
    692		{"4294967296",	10},
    693		{"4294967297",	10},
    694		{"9223372036854775806",	10},
    695		{"9223372036854775807",	10},
    696		{"9223372036854775808",	10},
    697		{"9223372036854775809",	10},
    698		{"18446744073709551614",	10},
    699		{"18446744073709551615",	10},
    700		{"18446744073709551616",	10},
    701		{"18446744073709551617",	10},
    702	};
    703	TEST_FAIL(kstrtos8, s8, "%hhd", test_s8_fail);
    704}
    705
    706static int __init test_kstrtox_init(void)
    707{
    708	test_kstrtoull_ok();
    709	test_kstrtoull_fail();
    710	test_kstrtoll_ok();
    711	test_kstrtoll_fail();
    712
    713	test_kstrtou64_ok();
    714	test_kstrtou64_fail();
    715	test_kstrtos64_ok();
    716	test_kstrtos64_fail();
    717
    718	test_kstrtou32_ok();
    719	test_kstrtou32_fail();
    720	test_kstrtos32_ok();
    721	test_kstrtos32_fail();
    722
    723	test_kstrtou16_ok();
    724	test_kstrtou16_fail();
    725	test_kstrtos16_ok();
    726	test_kstrtos16_fail();
    727
    728	test_kstrtou8_ok();
    729	test_kstrtou8_fail();
    730	test_kstrtos8_ok();
    731	test_kstrtos8_fail();
    732	return -EINVAL;
    733}
    734module_init(test_kstrtox_init);
    735MODULE_LICENSE("Dual BSD/GPL");