xref: /linux/lib/test-kstrtox.c (revision 2d2e4715)
133ee3b2eSAlexey Dobriyan #include <linux/init.h>
233ee3b2eSAlexey Dobriyan #include <linux/kernel.h>
333ee3b2eSAlexey Dobriyan #include <linux/module.h>
433ee3b2eSAlexey Dobriyan 
533ee3b2eSAlexey Dobriyan #define for_each_test(i, test)	\
6129965a9SFabian Frederick 	for (i = 0; i < ARRAY_SIZE(test); i++)
733ee3b2eSAlexey Dobriyan 
833ee3b2eSAlexey Dobriyan struct test_fail {
933ee3b2eSAlexey Dobriyan 	const char *str;
1033ee3b2eSAlexey Dobriyan 	unsigned int base;
1133ee3b2eSAlexey Dobriyan };
1233ee3b2eSAlexey Dobriyan 
1333ee3b2eSAlexey Dobriyan #define DEFINE_TEST_FAIL(test)	\
1426d7b99bSUwe Kleine-König 	const struct test_fail test[] __initconst
1533ee3b2eSAlexey Dobriyan 
1633ee3b2eSAlexey Dobriyan #define DECLARE_TEST_OK(type, test_type)	\
1733ee3b2eSAlexey Dobriyan 	test_type {				\
1833ee3b2eSAlexey Dobriyan 		const char *str;		\
1933ee3b2eSAlexey Dobriyan 		unsigned int base;		\
2033ee3b2eSAlexey Dobriyan 		type expected_res;		\
2133ee3b2eSAlexey Dobriyan 	}
2233ee3b2eSAlexey Dobriyan 
2333ee3b2eSAlexey Dobriyan #define DEFINE_TEST_OK(type, test)	\
2426d7b99bSUwe Kleine-König 	const type test[] __initconst
2533ee3b2eSAlexey Dobriyan 
2633ee3b2eSAlexey Dobriyan #define TEST_FAIL(fn, type, fmt, test)					\
2733ee3b2eSAlexey Dobriyan {									\
2833ee3b2eSAlexey Dobriyan 	unsigned int i;							\
2933ee3b2eSAlexey Dobriyan 									\
3033ee3b2eSAlexey Dobriyan 	for_each_test(i, test) {					\
3133ee3b2eSAlexey Dobriyan 		const struct test_fail *t = &test[i];			\
3233ee3b2eSAlexey Dobriyan 		type tmp;						\
3333ee3b2eSAlexey Dobriyan 		int rv;							\
3433ee3b2eSAlexey Dobriyan 									\
3533ee3b2eSAlexey Dobriyan 		tmp = 0;						\
3633ee3b2eSAlexey Dobriyan 		rv = fn(t->str, t->base, &tmp);				\
3733ee3b2eSAlexey Dobriyan 		if (rv >= 0) {						\
3833ee3b2eSAlexey Dobriyan 			WARN(1, "str '%s', base %u, expected -E, got %d/" fmt "\n",	\
3933ee3b2eSAlexey Dobriyan 				t->str, t->base, rv, tmp);		\
4033ee3b2eSAlexey Dobriyan 			continue;					\
4133ee3b2eSAlexey Dobriyan 		}							\
4233ee3b2eSAlexey Dobriyan 	}								\
4333ee3b2eSAlexey Dobriyan }
4433ee3b2eSAlexey Dobriyan 
4533ee3b2eSAlexey Dobriyan #define TEST_OK(fn, type, fmt, test)					\
4633ee3b2eSAlexey Dobriyan {									\
4733ee3b2eSAlexey Dobriyan 	unsigned int i;							\
4833ee3b2eSAlexey Dobriyan 									\
4933ee3b2eSAlexey Dobriyan 	for_each_test(i, test) {					\
5033ee3b2eSAlexey Dobriyan 		const typeof(test[0]) *t = &test[i];			\
5133ee3b2eSAlexey Dobriyan 		type res;						\
5233ee3b2eSAlexey Dobriyan 		int rv;							\
5333ee3b2eSAlexey Dobriyan 									\
5433ee3b2eSAlexey Dobriyan 		rv = fn(t->str, t->base, &res);				\
5533ee3b2eSAlexey Dobriyan 		if (rv != 0) {						\
5633ee3b2eSAlexey Dobriyan 			WARN(1, "str '%s', base %u, expected 0/" fmt ", got %d\n",	\
5733ee3b2eSAlexey Dobriyan 				t->str, t->base, t->expected_res, rv);	\
5833ee3b2eSAlexey Dobriyan 			continue;					\
5933ee3b2eSAlexey Dobriyan 		}							\
6033ee3b2eSAlexey Dobriyan 		if (res != t->expected_res) {				\
6133ee3b2eSAlexey Dobriyan 			WARN(1, "str '%s', base %u, expected " fmt ", got " fmt "\n",	\
6233ee3b2eSAlexey Dobriyan 				t->str, t->base, t->expected_res, res);	\
6333ee3b2eSAlexey Dobriyan 			continue;					\
6433ee3b2eSAlexey Dobriyan 		}							\
6533ee3b2eSAlexey Dobriyan 	}								\
6633ee3b2eSAlexey Dobriyan }
6733ee3b2eSAlexey Dobriyan 
test_kstrtoull_ok(void)6833ee3b2eSAlexey Dobriyan static void __init test_kstrtoull_ok(void)
6933ee3b2eSAlexey Dobriyan {
7033ee3b2eSAlexey Dobriyan 	DECLARE_TEST_OK(unsigned long long, struct test_ull);
7133ee3b2eSAlexey Dobriyan 	static DEFINE_TEST_OK(struct test_ull, test_ull_ok) = {
7233ee3b2eSAlexey Dobriyan 		{"0",	10,	0ULL},
7333ee3b2eSAlexey Dobriyan 		{"1",	10,	1ULL},
7433ee3b2eSAlexey Dobriyan 		{"127",	10,	127ULL},
7533ee3b2eSAlexey Dobriyan 		{"128",	10,	128ULL},
7633ee3b2eSAlexey Dobriyan 		{"129",	10,	129ULL},
7733ee3b2eSAlexey Dobriyan 		{"255",	10,	255ULL},
7833ee3b2eSAlexey Dobriyan 		{"256",	10,	256ULL},
7933ee3b2eSAlexey Dobriyan 		{"257",	10,	257ULL},
8033ee3b2eSAlexey Dobriyan 		{"32767",	10,	32767ULL},
8133ee3b2eSAlexey Dobriyan 		{"32768",	10,	32768ULL},
8233ee3b2eSAlexey Dobriyan 		{"32769",	10,	32769ULL},
8333ee3b2eSAlexey Dobriyan 		{"65535",	10,	65535ULL},
8433ee3b2eSAlexey Dobriyan 		{"65536",	10,	65536ULL},
8533ee3b2eSAlexey Dobriyan 		{"65537",	10,	65537ULL},
8633ee3b2eSAlexey Dobriyan 		{"2147483647",	10,	2147483647ULL},
8733ee3b2eSAlexey Dobriyan 		{"2147483648",	10,	2147483648ULL},
8833ee3b2eSAlexey Dobriyan 		{"2147483649",	10,	2147483649ULL},
8933ee3b2eSAlexey Dobriyan 		{"4294967295",	10,	4294967295ULL},
9033ee3b2eSAlexey Dobriyan 		{"4294967296",	10,	4294967296ULL},
9133ee3b2eSAlexey Dobriyan 		{"4294967297",	10,	4294967297ULL},
9233ee3b2eSAlexey Dobriyan 		{"9223372036854775807",	10,	9223372036854775807ULL},
9333ee3b2eSAlexey Dobriyan 		{"9223372036854775808",	10,	9223372036854775808ULL},
9433ee3b2eSAlexey Dobriyan 		{"9223372036854775809",	10,	9223372036854775809ULL},
9533ee3b2eSAlexey Dobriyan 		{"18446744073709551614",	10,	18446744073709551614ULL},
9633ee3b2eSAlexey Dobriyan 		{"18446744073709551615",	10,	18446744073709551615ULL},
9733ee3b2eSAlexey Dobriyan 
9833ee3b2eSAlexey Dobriyan 		{"00",		8,	00ULL},
9933ee3b2eSAlexey Dobriyan 		{"01",		8,	01ULL},
10033ee3b2eSAlexey Dobriyan 		{"0177",	8,	0177ULL},
10133ee3b2eSAlexey Dobriyan 		{"0200",	8,	0200ULL},
10233ee3b2eSAlexey Dobriyan 		{"0201",	8,	0201ULL},
10333ee3b2eSAlexey Dobriyan 		{"0377",	8,	0377ULL},
10433ee3b2eSAlexey Dobriyan 		{"0400",	8,	0400ULL},
10533ee3b2eSAlexey Dobriyan 		{"0401",	8,	0401ULL},
10633ee3b2eSAlexey Dobriyan 		{"077777",	8,	077777ULL},
10733ee3b2eSAlexey Dobriyan 		{"0100000",	8,	0100000ULL},
10833ee3b2eSAlexey Dobriyan 		{"0100001",	8,	0100001ULL},
10933ee3b2eSAlexey Dobriyan 		{"0177777",	8,	0177777ULL},
11033ee3b2eSAlexey Dobriyan 		{"0200000",	8,	0200000ULL},
11133ee3b2eSAlexey Dobriyan 		{"0200001",	8,	0200001ULL},
11233ee3b2eSAlexey Dobriyan 		{"017777777777",	8,	017777777777ULL},
11333ee3b2eSAlexey Dobriyan 		{"020000000000",	8,	020000000000ULL},
11433ee3b2eSAlexey Dobriyan 		{"020000000001",	8,	020000000001ULL},
11533ee3b2eSAlexey Dobriyan 		{"037777777777",	8,	037777777777ULL},
11633ee3b2eSAlexey Dobriyan 		{"040000000000",	8,	040000000000ULL},
11733ee3b2eSAlexey Dobriyan 		{"040000000001",	8,	040000000001ULL},
11833ee3b2eSAlexey Dobriyan 		{"0777777777777777777777",	8,	0777777777777777777777ULL},
11933ee3b2eSAlexey Dobriyan 		{"01000000000000000000000",	8,	01000000000000000000000ULL},
12033ee3b2eSAlexey Dobriyan 		{"01000000000000000000001",	8,	01000000000000000000001ULL},
12133ee3b2eSAlexey Dobriyan 		{"01777777777777777777776",	8,	01777777777777777777776ULL},
12233ee3b2eSAlexey Dobriyan 		{"01777777777777777777777",	8,	01777777777777777777777ULL},
12333ee3b2eSAlexey Dobriyan 
12433ee3b2eSAlexey Dobriyan 		{"0x0",		16,	0x0ULL},
12533ee3b2eSAlexey Dobriyan 		{"0x1",		16,	0x1ULL},
12633ee3b2eSAlexey Dobriyan 		{"0x7f",	16,	0x7fULL},
12733ee3b2eSAlexey Dobriyan 		{"0x80",	16,	0x80ULL},
12833ee3b2eSAlexey Dobriyan 		{"0x81",	16,	0x81ULL},
12933ee3b2eSAlexey Dobriyan 		{"0xff",	16,	0xffULL},
13033ee3b2eSAlexey Dobriyan 		{"0x100",	16,	0x100ULL},
13133ee3b2eSAlexey Dobriyan 		{"0x101",	16,	0x101ULL},
13233ee3b2eSAlexey Dobriyan 		{"0x7fff",	16,	0x7fffULL},
13333ee3b2eSAlexey Dobriyan 		{"0x8000",	16,	0x8000ULL},
13433ee3b2eSAlexey Dobriyan 		{"0x8001",	16,	0x8001ULL},
13533ee3b2eSAlexey Dobriyan 		{"0xffff",	16,	0xffffULL},
13633ee3b2eSAlexey Dobriyan 		{"0x10000",	16,	0x10000ULL},
13733ee3b2eSAlexey Dobriyan 		{"0x10001",	16,	0x10001ULL},
13833ee3b2eSAlexey Dobriyan 		{"0x7fffffff",	16,	0x7fffffffULL},
13933ee3b2eSAlexey Dobriyan 		{"0x80000000",	16,	0x80000000ULL},
14033ee3b2eSAlexey Dobriyan 		{"0x80000001",	16,	0x80000001ULL},
14133ee3b2eSAlexey Dobriyan 		{"0xffffffff",	16,	0xffffffffULL},
14233ee3b2eSAlexey Dobriyan 		{"0x100000000",	16,	0x100000000ULL},
14333ee3b2eSAlexey Dobriyan 		{"0x100000001",	16,	0x100000001ULL},
14433ee3b2eSAlexey Dobriyan 		{"0x7fffffffffffffff",	16,	0x7fffffffffffffffULL},
14533ee3b2eSAlexey Dobriyan 		{"0x8000000000000000",	16,	0x8000000000000000ULL},
14633ee3b2eSAlexey Dobriyan 		{"0x8000000000000001",	16,	0x8000000000000001ULL},
14733ee3b2eSAlexey Dobriyan 		{"0xfffffffffffffffe",	16,	0xfffffffffffffffeULL},
14833ee3b2eSAlexey Dobriyan 		{"0xffffffffffffffff",	16,	0xffffffffffffffffULL},
14933ee3b2eSAlexey Dobriyan 
15033ee3b2eSAlexey Dobriyan 		{"0\n",	0,	0ULL},
15133ee3b2eSAlexey Dobriyan 	};
15233ee3b2eSAlexey Dobriyan 	TEST_OK(kstrtoull, unsigned long long, "%llu", test_ull_ok);
15333ee3b2eSAlexey Dobriyan }
15433ee3b2eSAlexey Dobriyan 
test_kstrtoull_fail(void)15533ee3b2eSAlexey Dobriyan static void __init test_kstrtoull_fail(void)
15633ee3b2eSAlexey Dobriyan {
15733ee3b2eSAlexey Dobriyan 	static DEFINE_TEST_FAIL(test_ull_fail) = {
15833ee3b2eSAlexey Dobriyan 		{"",	0},
15933ee3b2eSAlexey Dobriyan 		{"",	8},
16033ee3b2eSAlexey Dobriyan 		{"",	10},
16133ee3b2eSAlexey Dobriyan 		{"",	16},
16233ee3b2eSAlexey Dobriyan 		{"\n",	0},
16333ee3b2eSAlexey Dobriyan 		{"\n",	8},
16433ee3b2eSAlexey Dobriyan 		{"\n",	10},
16533ee3b2eSAlexey Dobriyan 		{"\n",	16},
16633ee3b2eSAlexey Dobriyan 		{"\n0",	0},
16733ee3b2eSAlexey Dobriyan 		{"\n0",	8},
16833ee3b2eSAlexey Dobriyan 		{"\n0",	10},
16933ee3b2eSAlexey Dobriyan 		{"\n0",	16},
17033ee3b2eSAlexey Dobriyan 		{"+",	0},
17133ee3b2eSAlexey Dobriyan 		{"+",	8},
17233ee3b2eSAlexey Dobriyan 		{"+",	10},
17333ee3b2eSAlexey Dobriyan 		{"+",	16},
17433ee3b2eSAlexey Dobriyan 		{"-",	0},
17533ee3b2eSAlexey Dobriyan 		{"-",	8},
17633ee3b2eSAlexey Dobriyan 		{"-",	10},
17733ee3b2eSAlexey Dobriyan 		{"-",	16},
17833ee3b2eSAlexey Dobriyan 		{"0x",	0},
17933ee3b2eSAlexey Dobriyan 		{"0x",	16},
18033ee3b2eSAlexey Dobriyan 		{"0X",	0},
18133ee3b2eSAlexey Dobriyan 		{"0X",	16},
18233ee3b2eSAlexey Dobriyan 		{"0 ",	0},
18333ee3b2eSAlexey Dobriyan 		{"1+",	0},
18433ee3b2eSAlexey Dobriyan 		{"1-",	0},
18533ee3b2eSAlexey Dobriyan 		{" 2",	0},
18633ee3b2eSAlexey Dobriyan 		/* base autodetection */
18733ee3b2eSAlexey Dobriyan 		{"0x0z",	0},
18833ee3b2eSAlexey Dobriyan 		{"0z",		0},
18933ee3b2eSAlexey Dobriyan 		{"a",		0},
19033ee3b2eSAlexey Dobriyan 		/* digit >= base */
19133ee3b2eSAlexey Dobriyan 		{"2",	2},
19233ee3b2eSAlexey Dobriyan 		{"8",	8},
19333ee3b2eSAlexey Dobriyan 		{"a",	10},
19433ee3b2eSAlexey Dobriyan 		{"A",	10},
19533ee3b2eSAlexey Dobriyan 		{"g",	16},
19633ee3b2eSAlexey Dobriyan 		{"G",	16},
19733ee3b2eSAlexey Dobriyan 		/* overflow */
19833ee3b2eSAlexey Dobriyan 		{"10000000000000000000000000000000000000000000000000000000000000000",	2},
19933ee3b2eSAlexey Dobriyan 		{"2000000000000000000000",	8},
20033ee3b2eSAlexey Dobriyan 		{"18446744073709551616",	10},
20133ee3b2eSAlexey Dobriyan 		{"10000000000000000",	16},
20233ee3b2eSAlexey Dobriyan 		/* negative */
20333ee3b2eSAlexey Dobriyan 		{"-0", 0},
20433ee3b2eSAlexey Dobriyan 		{"-0", 8},
20533ee3b2eSAlexey Dobriyan 		{"-0", 10},
20633ee3b2eSAlexey Dobriyan 		{"-0", 16},
20733ee3b2eSAlexey Dobriyan 		{"-1", 0},
20833ee3b2eSAlexey Dobriyan 		{"-1", 8},
20933ee3b2eSAlexey Dobriyan 		{"-1", 10},
21033ee3b2eSAlexey Dobriyan 		{"-1", 16},
21133ee3b2eSAlexey Dobriyan 		/* sign is first character if any */
21233ee3b2eSAlexey Dobriyan 		{"-+1", 0},
21333ee3b2eSAlexey Dobriyan 		{"-+1", 8},
21433ee3b2eSAlexey Dobriyan 		{"-+1", 10},
21533ee3b2eSAlexey Dobriyan 		{"-+1", 16},
21633ee3b2eSAlexey Dobriyan 		/* nothing after \n */
21733ee3b2eSAlexey Dobriyan 		{"0\n0", 0},
21833ee3b2eSAlexey Dobriyan 		{"0\n0", 8},
21933ee3b2eSAlexey Dobriyan 		{"0\n0", 10},
22033ee3b2eSAlexey Dobriyan 		{"0\n0", 16},
22133ee3b2eSAlexey Dobriyan 		{"0\n+", 0},
22233ee3b2eSAlexey Dobriyan 		{"0\n+", 8},
22333ee3b2eSAlexey Dobriyan 		{"0\n+", 10},
22433ee3b2eSAlexey Dobriyan 		{"0\n+", 16},
22533ee3b2eSAlexey Dobriyan 		{"0\n-", 0},
22633ee3b2eSAlexey Dobriyan 		{"0\n-", 8},
22733ee3b2eSAlexey Dobriyan 		{"0\n-", 10},
22833ee3b2eSAlexey Dobriyan 		{"0\n-", 16},
22933ee3b2eSAlexey Dobriyan 		{"0\n ", 0},
23033ee3b2eSAlexey Dobriyan 		{"0\n ", 8},
23133ee3b2eSAlexey Dobriyan 		{"0\n ", 10},
23233ee3b2eSAlexey Dobriyan 		{"0\n ", 16},
23333ee3b2eSAlexey Dobriyan 	};
23433ee3b2eSAlexey Dobriyan 	TEST_FAIL(kstrtoull, unsigned long long, "%llu", test_ull_fail);
23533ee3b2eSAlexey Dobriyan }
23633ee3b2eSAlexey Dobriyan 
test_kstrtoll_ok(void)23733ee3b2eSAlexey Dobriyan static void __init test_kstrtoll_ok(void)
23833ee3b2eSAlexey Dobriyan {
23933ee3b2eSAlexey Dobriyan 	DECLARE_TEST_OK(long long, struct test_ll);
24033ee3b2eSAlexey Dobriyan 	static DEFINE_TEST_OK(struct test_ll, test_ll_ok) = {
24133ee3b2eSAlexey Dobriyan 		{"0",	10,	0LL},
24233ee3b2eSAlexey Dobriyan 		{"1",	10,	1LL},
24333ee3b2eSAlexey Dobriyan 		{"127",	10,	127LL},
24433ee3b2eSAlexey Dobriyan 		{"128",	10,	128LL},
24533ee3b2eSAlexey Dobriyan 		{"129",	10,	129LL},
24633ee3b2eSAlexey Dobriyan 		{"255",	10,	255LL},
24733ee3b2eSAlexey Dobriyan 		{"256",	10,	256LL},
24833ee3b2eSAlexey Dobriyan 		{"257",	10,	257LL},
24933ee3b2eSAlexey Dobriyan 		{"32767",	10,	32767LL},
25033ee3b2eSAlexey Dobriyan 		{"32768",	10,	32768LL},
25133ee3b2eSAlexey Dobriyan 		{"32769",	10,	32769LL},
25233ee3b2eSAlexey Dobriyan 		{"65535",	10,	65535LL},
25333ee3b2eSAlexey Dobriyan 		{"65536",	10,	65536LL},
25433ee3b2eSAlexey Dobriyan 		{"65537",	10,	65537LL},
25533ee3b2eSAlexey Dobriyan 		{"2147483647",	10,	2147483647LL},
25633ee3b2eSAlexey Dobriyan 		{"2147483648",	10,	2147483648LL},
25733ee3b2eSAlexey Dobriyan 		{"2147483649",	10,	2147483649LL},
25833ee3b2eSAlexey Dobriyan 		{"4294967295",	10,	4294967295LL},
25933ee3b2eSAlexey Dobriyan 		{"4294967296",	10,	4294967296LL},
26033ee3b2eSAlexey Dobriyan 		{"4294967297",	10,	4294967297LL},
26133ee3b2eSAlexey Dobriyan 		{"9223372036854775807",	10,	9223372036854775807LL},
26233ee3b2eSAlexey Dobriyan 
263*2d2e4715SAlexey Dobriyan 		{"-0",	10,	0LL},
26433ee3b2eSAlexey Dobriyan 		{"-1",	10,	-1LL},
26533ee3b2eSAlexey Dobriyan 		{"-2",	10,	-2LL},
26633ee3b2eSAlexey Dobriyan 		{"-9223372036854775808",	10,	LLONG_MIN},
26733ee3b2eSAlexey Dobriyan 	};
26833ee3b2eSAlexey Dobriyan 	TEST_OK(kstrtoll, long long, "%lld", test_ll_ok);
26933ee3b2eSAlexey Dobriyan }
27033ee3b2eSAlexey Dobriyan 
test_kstrtoll_fail(void)27133ee3b2eSAlexey Dobriyan static void __init test_kstrtoll_fail(void)
27233ee3b2eSAlexey Dobriyan {
27333ee3b2eSAlexey Dobriyan 	static DEFINE_TEST_FAIL(test_ll_fail) = {
27433ee3b2eSAlexey Dobriyan 		{"9223372036854775808",	10},
27533ee3b2eSAlexey Dobriyan 		{"9223372036854775809",	10},
27633ee3b2eSAlexey Dobriyan 		{"18446744073709551614",	10},
27733ee3b2eSAlexey Dobriyan 		{"18446744073709551615",	10},
27833ee3b2eSAlexey Dobriyan 		{"-9223372036854775809",	10},
27933ee3b2eSAlexey Dobriyan 		{"-18446744073709551614",	10},
28033ee3b2eSAlexey Dobriyan 		{"-18446744073709551615",	10},
28133ee3b2eSAlexey Dobriyan 		/* sign is first character if any */
28233ee3b2eSAlexey Dobriyan 		{"-+1", 0},
28333ee3b2eSAlexey Dobriyan 		{"-+1", 8},
28433ee3b2eSAlexey Dobriyan 		{"-+1", 10},
28533ee3b2eSAlexey Dobriyan 		{"-+1", 16},
28633ee3b2eSAlexey Dobriyan 	};
28733ee3b2eSAlexey Dobriyan 	TEST_FAIL(kstrtoll, long long, "%lld", test_ll_fail);
28833ee3b2eSAlexey Dobriyan }
28933ee3b2eSAlexey Dobriyan 
test_kstrtou64_ok(void)29033ee3b2eSAlexey Dobriyan static void __init test_kstrtou64_ok(void)
29133ee3b2eSAlexey Dobriyan {
29233ee3b2eSAlexey Dobriyan 	DECLARE_TEST_OK(u64, struct test_u64);
29333ee3b2eSAlexey Dobriyan 	static DEFINE_TEST_OK(struct test_u64, test_u64_ok) = {
29433ee3b2eSAlexey Dobriyan 		{"0",	10,	0},
29533ee3b2eSAlexey Dobriyan 		{"1",	10,	1},
29633ee3b2eSAlexey Dobriyan 		{"126",	10,	126},
29733ee3b2eSAlexey Dobriyan 		{"127",	10,	127},
29833ee3b2eSAlexey Dobriyan 		{"128",	10,	128},
29933ee3b2eSAlexey Dobriyan 		{"129",	10,	129},
30033ee3b2eSAlexey Dobriyan 		{"254",	10,	254},
30133ee3b2eSAlexey Dobriyan 		{"255",	10,	255},
30233ee3b2eSAlexey Dobriyan 		{"256",	10,	256},
30333ee3b2eSAlexey Dobriyan 		{"257",	10,	257},
30433ee3b2eSAlexey Dobriyan 		{"32766",	10,	32766},
30533ee3b2eSAlexey Dobriyan 		{"32767",	10,	32767},
30633ee3b2eSAlexey Dobriyan 		{"32768",	10,	32768},
30733ee3b2eSAlexey Dobriyan 		{"32769",	10,	32769},
30833ee3b2eSAlexey Dobriyan 		{"65534",	10,	65534},
30933ee3b2eSAlexey Dobriyan 		{"65535",	10,	65535},
31033ee3b2eSAlexey Dobriyan 		{"65536",	10,	65536},
31133ee3b2eSAlexey Dobriyan 		{"65537",	10,	65537},
31233ee3b2eSAlexey Dobriyan 		{"2147483646",	10,	2147483646},
31333ee3b2eSAlexey Dobriyan 		{"2147483647",	10,	2147483647},
31401eda2e0SAlexey Dobriyan 		{"2147483648",	10,	2147483648ULL},
31501eda2e0SAlexey Dobriyan 		{"2147483649",	10,	2147483649ULL},
31601eda2e0SAlexey Dobriyan 		{"4294967294",	10,	4294967294ULL},
31701eda2e0SAlexey Dobriyan 		{"4294967295",	10,	4294967295ULL},
31801eda2e0SAlexey Dobriyan 		{"4294967296",	10,	4294967296ULL},
31901eda2e0SAlexey Dobriyan 		{"4294967297",	10,	4294967297ULL},
32033ee3b2eSAlexey Dobriyan 		{"9223372036854775806",	10,	9223372036854775806ULL},
32133ee3b2eSAlexey Dobriyan 		{"9223372036854775807",	10,	9223372036854775807ULL},
32233ee3b2eSAlexey Dobriyan 		{"9223372036854775808",	10,	9223372036854775808ULL},
32333ee3b2eSAlexey Dobriyan 		{"9223372036854775809",	10,	9223372036854775809ULL},
32433ee3b2eSAlexey Dobriyan 		{"18446744073709551614",	10,	18446744073709551614ULL},
32533ee3b2eSAlexey Dobriyan 		{"18446744073709551615",	10,	18446744073709551615ULL},
32633ee3b2eSAlexey Dobriyan 	};
32733ee3b2eSAlexey Dobriyan 	TEST_OK(kstrtou64, u64, "%llu", test_u64_ok);
32833ee3b2eSAlexey Dobriyan }
32933ee3b2eSAlexey Dobriyan 
test_kstrtou64_fail(void)33033ee3b2eSAlexey Dobriyan static void __init test_kstrtou64_fail(void)
33133ee3b2eSAlexey Dobriyan {
33233ee3b2eSAlexey Dobriyan 	static DEFINE_TEST_FAIL(test_u64_fail) = {
33333ee3b2eSAlexey Dobriyan 		{"-2",	10},
33433ee3b2eSAlexey Dobriyan 		{"-1",	10},
33533ee3b2eSAlexey Dobriyan 		{"18446744073709551616",	10},
33633ee3b2eSAlexey Dobriyan 		{"18446744073709551617",	10},
33733ee3b2eSAlexey Dobriyan 	};
33833ee3b2eSAlexey Dobriyan 	TEST_FAIL(kstrtou64, u64, "%llu", test_u64_fail);
33933ee3b2eSAlexey Dobriyan }
34033ee3b2eSAlexey Dobriyan 
test_kstrtos64_ok(void)34133ee3b2eSAlexey Dobriyan static void __init test_kstrtos64_ok(void)
34233ee3b2eSAlexey Dobriyan {
34333ee3b2eSAlexey Dobriyan 	DECLARE_TEST_OK(s64, struct test_s64);
34433ee3b2eSAlexey Dobriyan 	static DEFINE_TEST_OK(struct test_s64, test_s64_ok) = {
34533ee3b2eSAlexey Dobriyan 		{"-128",	10,	-128},
34633ee3b2eSAlexey Dobriyan 		{"-127",	10,	-127},
34733ee3b2eSAlexey Dobriyan 		{"-1",	10,	-1},
34833ee3b2eSAlexey Dobriyan 		{"0",	10,	0},
34933ee3b2eSAlexey Dobriyan 		{"1",	10,	1},
35033ee3b2eSAlexey Dobriyan 		{"126",	10,	126},
35133ee3b2eSAlexey Dobriyan 		{"127",	10,	127},
35233ee3b2eSAlexey Dobriyan 		{"128",	10,	128},
35333ee3b2eSAlexey Dobriyan 		{"129",	10,	129},
35433ee3b2eSAlexey Dobriyan 		{"254",	10,	254},
35533ee3b2eSAlexey Dobriyan 		{"255",	10,	255},
35633ee3b2eSAlexey Dobriyan 		{"256",	10,	256},
35733ee3b2eSAlexey Dobriyan 		{"257",	10,	257},
35833ee3b2eSAlexey Dobriyan 		{"32766",	10,	32766},
35933ee3b2eSAlexey Dobriyan 		{"32767",	10,	32767},
36033ee3b2eSAlexey Dobriyan 		{"32768",	10,	32768},
36133ee3b2eSAlexey Dobriyan 		{"32769",	10,	32769},
36233ee3b2eSAlexey Dobriyan 		{"65534",	10,	65534},
36333ee3b2eSAlexey Dobriyan 		{"65535",	10,	65535},
36433ee3b2eSAlexey Dobriyan 		{"65536",	10,	65536},
36533ee3b2eSAlexey Dobriyan 		{"65537",	10,	65537},
36633ee3b2eSAlexey Dobriyan 		{"2147483646",	10,	2147483646},
36733ee3b2eSAlexey Dobriyan 		{"2147483647",	10,	2147483647},
36801eda2e0SAlexey Dobriyan 		{"2147483648",	10,	2147483648LL},
36901eda2e0SAlexey Dobriyan 		{"2147483649",	10,	2147483649LL},
37001eda2e0SAlexey Dobriyan 		{"4294967294",	10,	4294967294LL},
37101eda2e0SAlexey Dobriyan 		{"4294967295",	10,	4294967295LL},
37201eda2e0SAlexey Dobriyan 		{"4294967296",	10,	4294967296LL},
37301eda2e0SAlexey Dobriyan 		{"4294967297",	10,	4294967297LL},
37433ee3b2eSAlexey Dobriyan 		{"9223372036854775806",	10,	9223372036854775806LL},
37533ee3b2eSAlexey Dobriyan 		{"9223372036854775807",	10,	9223372036854775807LL},
37633ee3b2eSAlexey Dobriyan 	};
37733ee3b2eSAlexey Dobriyan 	TEST_OK(kstrtos64, s64, "%lld", test_s64_ok);
37833ee3b2eSAlexey Dobriyan }
37933ee3b2eSAlexey Dobriyan 
test_kstrtos64_fail(void)38033ee3b2eSAlexey Dobriyan static void __init test_kstrtos64_fail(void)
38133ee3b2eSAlexey Dobriyan {
38233ee3b2eSAlexey Dobriyan 	static DEFINE_TEST_FAIL(test_s64_fail) = {
38333ee3b2eSAlexey Dobriyan 		{"9223372036854775808",	10},
38433ee3b2eSAlexey Dobriyan 		{"9223372036854775809",	10},
38533ee3b2eSAlexey Dobriyan 		{"18446744073709551614",	10},
38633ee3b2eSAlexey Dobriyan 		{"18446744073709551615",	10},
38733ee3b2eSAlexey Dobriyan 		{"18446744073709551616",	10},
38833ee3b2eSAlexey Dobriyan 		{"18446744073709551617",	10},
38933ee3b2eSAlexey Dobriyan 	};
39033ee3b2eSAlexey Dobriyan 	TEST_FAIL(kstrtos64, s64, "%lld", test_s64_fail);
39133ee3b2eSAlexey Dobriyan }
39233ee3b2eSAlexey Dobriyan 
test_kstrtou32_ok(void)39333ee3b2eSAlexey Dobriyan static void __init test_kstrtou32_ok(void)
39433ee3b2eSAlexey Dobriyan {
39533ee3b2eSAlexey Dobriyan 	DECLARE_TEST_OK(u32, struct test_u32);
39633ee3b2eSAlexey Dobriyan 	static DEFINE_TEST_OK(struct test_u32, test_u32_ok) = {
39733ee3b2eSAlexey Dobriyan 		{"0",	10,	0},
39833ee3b2eSAlexey Dobriyan 		{"1",	10,	1},
39933ee3b2eSAlexey Dobriyan 		{"126",	10,	126},
40033ee3b2eSAlexey Dobriyan 		{"127",	10,	127},
40133ee3b2eSAlexey Dobriyan 		{"128",	10,	128},
40233ee3b2eSAlexey Dobriyan 		{"129",	10,	129},
40333ee3b2eSAlexey Dobriyan 		{"254",	10,	254},
40433ee3b2eSAlexey Dobriyan 		{"255",	10,	255},
40533ee3b2eSAlexey Dobriyan 		{"256",	10,	256},
40633ee3b2eSAlexey Dobriyan 		{"257",	10,	257},
40733ee3b2eSAlexey Dobriyan 		{"32766",	10,	32766},
40833ee3b2eSAlexey Dobriyan 		{"32767",	10,	32767},
40933ee3b2eSAlexey Dobriyan 		{"32768",	10,	32768},
41033ee3b2eSAlexey Dobriyan 		{"32769",	10,	32769},
41133ee3b2eSAlexey Dobriyan 		{"65534",	10,	65534},
41233ee3b2eSAlexey Dobriyan 		{"65535",	10,	65535},
41333ee3b2eSAlexey Dobriyan 		{"65536",	10,	65536},
41433ee3b2eSAlexey Dobriyan 		{"65537",	10,	65537},
41533ee3b2eSAlexey Dobriyan 		{"2147483646",	10,	2147483646},
41633ee3b2eSAlexey Dobriyan 		{"2147483647",	10,	2147483647},
41701eda2e0SAlexey Dobriyan 		{"2147483648",	10,	2147483648U},
41801eda2e0SAlexey Dobriyan 		{"2147483649",	10,	2147483649U},
41901eda2e0SAlexey Dobriyan 		{"4294967294",	10,	4294967294U},
42001eda2e0SAlexey Dobriyan 		{"4294967295",	10,	4294967295U},
42133ee3b2eSAlexey Dobriyan 	};
42233ee3b2eSAlexey Dobriyan 	TEST_OK(kstrtou32, u32, "%u", test_u32_ok);
42333ee3b2eSAlexey Dobriyan }
42433ee3b2eSAlexey Dobriyan 
test_kstrtou32_fail(void)42533ee3b2eSAlexey Dobriyan static void __init test_kstrtou32_fail(void)
42633ee3b2eSAlexey Dobriyan {
42733ee3b2eSAlexey Dobriyan 	static DEFINE_TEST_FAIL(test_u32_fail) = {
42833ee3b2eSAlexey Dobriyan 		{"-2",	10},
42933ee3b2eSAlexey Dobriyan 		{"-1",	10},
43033ee3b2eSAlexey Dobriyan 		{"4294967296",	10},
43133ee3b2eSAlexey Dobriyan 		{"4294967297",	10},
43233ee3b2eSAlexey Dobriyan 		{"9223372036854775806",	10},
43333ee3b2eSAlexey Dobriyan 		{"9223372036854775807",	10},
43433ee3b2eSAlexey Dobriyan 		{"9223372036854775808",	10},
43533ee3b2eSAlexey Dobriyan 		{"9223372036854775809",	10},
43633ee3b2eSAlexey Dobriyan 		{"18446744073709551614",	10},
43733ee3b2eSAlexey Dobriyan 		{"18446744073709551615",	10},
43833ee3b2eSAlexey Dobriyan 		{"18446744073709551616",	10},
43933ee3b2eSAlexey Dobriyan 		{"18446744073709551617",	10},
44033ee3b2eSAlexey Dobriyan 	};
44133ee3b2eSAlexey Dobriyan 	TEST_FAIL(kstrtou32, u32, "%u", test_u32_fail);
44233ee3b2eSAlexey Dobriyan }
44333ee3b2eSAlexey Dobriyan 
test_kstrtos32_ok(void)44433ee3b2eSAlexey Dobriyan static void __init test_kstrtos32_ok(void)
44533ee3b2eSAlexey Dobriyan {
44633ee3b2eSAlexey Dobriyan 	DECLARE_TEST_OK(s32, struct test_s32);
44733ee3b2eSAlexey Dobriyan 	static DEFINE_TEST_OK(struct test_s32, test_s32_ok) = {
44833ee3b2eSAlexey Dobriyan 		{"-128",	10,	-128},
44933ee3b2eSAlexey Dobriyan 		{"-127",	10,	-127},
45033ee3b2eSAlexey Dobriyan 		{"-1",	10,	-1},
45133ee3b2eSAlexey Dobriyan 		{"0",	10,	0},
45233ee3b2eSAlexey Dobriyan 		{"1",	10,	1},
45333ee3b2eSAlexey Dobriyan 		{"126",	10,	126},
45433ee3b2eSAlexey Dobriyan 		{"127",	10,	127},
45533ee3b2eSAlexey Dobriyan 		{"128",	10,	128},
45633ee3b2eSAlexey Dobriyan 		{"129",	10,	129},
45733ee3b2eSAlexey Dobriyan 		{"254",	10,	254},
45833ee3b2eSAlexey Dobriyan 		{"255",	10,	255},
45933ee3b2eSAlexey Dobriyan 		{"256",	10,	256},
46033ee3b2eSAlexey Dobriyan 		{"257",	10,	257},
46133ee3b2eSAlexey Dobriyan 		{"32766",	10,	32766},
46233ee3b2eSAlexey Dobriyan 		{"32767",	10,	32767},
46333ee3b2eSAlexey Dobriyan 		{"32768",	10,	32768},
46433ee3b2eSAlexey Dobriyan 		{"32769",	10,	32769},
46533ee3b2eSAlexey Dobriyan 		{"65534",	10,	65534},
46633ee3b2eSAlexey Dobriyan 		{"65535",	10,	65535},
46733ee3b2eSAlexey Dobriyan 		{"65536",	10,	65536},
46833ee3b2eSAlexey Dobriyan 		{"65537",	10,	65537},
46933ee3b2eSAlexey Dobriyan 		{"2147483646",	10,	2147483646},
47033ee3b2eSAlexey Dobriyan 		{"2147483647",	10,	2147483647},
47133ee3b2eSAlexey Dobriyan 	};
47233ee3b2eSAlexey Dobriyan 	TEST_OK(kstrtos32, s32, "%d", test_s32_ok);
47333ee3b2eSAlexey Dobriyan }
47433ee3b2eSAlexey Dobriyan 
test_kstrtos32_fail(void)47533ee3b2eSAlexey Dobriyan static void __init test_kstrtos32_fail(void)
47633ee3b2eSAlexey Dobriyan {
47733ee3b2eSAlexey Dobriyan 	static DEFINE_TEST_FAIL(test_s32_fail) = {
47833ee3b2eSAlexey Dobriyan 		{"2147483648",	10},
47933ee3b2eSAlexey Dobriyan 		{"2147483649",	10},
48033ee3b2eSAlexey Dobriyan 		{"4294967294",	10},
48133ee3b2eSAlexey Dobriyan 		{"4294967295",	10},
48233ee3b2eSAlexey Dobriyan 		{"4294967296",	10},
48333ee3b2eSAlexey Dobriyan 		{"4294967297",	10},
48433ee3b2eSAlexey Dobriyan 		{"9223372036854775806",	10},
48533ee3b2eSAlexey Dobriyan 		{"9223372036854775807",	10},
48633ee3b2eSAlexey Dobriyan 		{"9223372036854775808",	10},
48733ee3b2eSAlexey Dobriyan 		{"9223372036854775809",	10},
48833ee3b2eSAlexey Dobriyan 		{"18446744073709551614",	10},
48933ee3b2eSAlexey Dobriyan 		{"18446744073709551615",	10},
49033ee3b2eSAlexey Dobriyan 		{"18446744073709551616",	10},
49133ee3b2eSAlexey Dobriyan 		{"18446744073709551617",	10},
49233ee3b2eSAlexey Dobriyan 	};
49333ee3b2eSAlexey Dobriyan 	TEST_FAIL(kstrtos32, s32, "%d", test_s32_fail);
49433ee3b2eSAlexey Dobriyan }
49533ee3b2eSAlexey Dobriyan 
test_kstrtou16_ok(void)49633ee3b2eSAlexey Dobriyan static void __init test_kstrtou16_ok(void)
49733ee3b2eSAlexey Dobriyan {
49833ee3b2eSAlexey Dobriyan 	DECLARE_TEST_OK(u16, struct test_u16);
49933ee3b2eSAlexey Dobriyan 	static DEFINE_TEST_OK(struct test_u16, test_u16_ok) = {
50033ee3b2eSAlexey Dobriyan 		{"0",	10,	0},
50133ee3b2eSAlexey Dobriyan 		{"1",	10,	1},
50233ee3b2eSAlexey Dobriyan 		{"126",	10,	126},
50333ee3b2eSAlexey Dobriyan 		{"127",	10,	127},
50433ee3b2eSAlexey Dobriyan 		{"128",	10,	128},
50533ee3b2eSAlexey Dobriyan 		{"129",	10,	129},
50633ee3b2eSAlexey Dobriyan 		{"254",	10,	254},
50733ee3b2eSAlexey Dobriyan 		{"255",	10,	255},
50833ee3b2eSAlexey Dobriyan 		{"256",	10,	256},
50933ee3b2eSAlexey Dobriyan 		{"257",	10,	257},
51033ee3b2eSAlexey Dobriyan 		{"32766",	10,	32766},
51133ee3b2eSAlexey Dobriyan 		{"32767",	10,	32767},
51233ee3b2eSAlexey Dobriyan 		{"32768",	10,	32768},
51333ee3b2eSAlexey Dobriyan 		{"32769",	10,	32769},
51433ee3b2eSAlexey Dobriyan 		{"65534",	10,	65534},
51533ee3b2eSAlexey Dobriyan 		{"65535",	10,	65535},
51633ee3b2eSAlexey Dobriyan 	};
51733ee3b2eSAlexey Dobriyan 	TEST_OK(kstrtou16, u16, "%hu", test_u16_ok);
51833ee3b2eSAlexey Dobriyan }
51933ee3b2eSAlexey Dobriyan 
test_kstrtou16_fail(void)52033ee3b2eSAlexey Dobriyan static void __init test_kstrtou16_fail(void)
52133ee3b2eSAlexey Dobriyan {
52233ee3b2eSAlexey Dobriyan 	static DEFINE_TEST_FAIL(test_u16_fail) = {
52333ee3b2eSAlexey Dobriyan 		{"-2",	10},
52433ee3b2eSAlexey Dobriyan 		{"-1",	10},
52533ee3b2eSAlexey Dobriyan 		{"65536",	10},
52633ee3b2eSAlexey Dobriyan 		{"65537",	10},
52733ee3b2eSAlexey Dobriyan 		{"2147483646",	10},
52833ee3b2eSAlexey Dobriyan 		{"2147483647",	10},
52933ee3b2eSAlexey Dobriyan 		{"2147483648",	10},
53033ee3b2eSAlexey Dobriyan 		{"2147483649",	10},
53133ee3b2eSAlexey Dobriyan 		{"4294967294",	10},
53233ee3b2eSAlexey Dobriyan 		{"4294967295",	10},
53333ee3b2eSAlexey Dobriyan 		{"4294967296",	10},
53433ee3b2eSAlexey Dobriyan 		{"4294967297",	10},
53533ee3b2eSAlexey Dobriyan 		{"9223372036854775806",	10},
53633ee3b2eSAlexey Dobriyan 		{"9223372036854775807",	10},
53733ee3b2eSAlexey Dobriyan 		{"9223372036854775808",	10},
53833ee3b2eSAlexey Dobriyan 		{"9223372036854775809",	10},
53933ee3b2eSAlexey Dobriyan 		{"18446744073709551614",	10},
54033ee3b2eSAlexey Dobriyan 		{"18446744073709551615",	10},
54133ee3b2eSAlexey Dobriyan 		{"18446744073709551616",	10},
54233ee3b2eSAlexey Dobriyan 		{"18446744073709551617",	10},
54333ee3b2eSAlexey Dobriyan 	};
54433ee3b2eSAlexey Dobriyan 	TEST_FAIL(kstrtou16, u16, "%hu", test_u16_fail);
54533ee3b2eSAlexey Dobriyan }
54633ee3b2eSAlexey Dobriyan 
test_kstrtos16_ok(void)54733ee3b2eSAlexey Dobriyan static void __init test_kstrtos16_ok(void)
54833ee3b2eSAlexey Dobriyan {
54933ee3b2eSAlexey Dobriyan 	DECLARE_TEST_OK(s16, struct test_s16);
55033ee3b2eSAlexey Dobriyan 	static DEFINE_TEST_OK(struct test_s16, test_s16_ok) = {
55133ee3b2eSAlexey Dobriyan 		{"-130",	10,	-130},
55233ee3b2eSAlexey Dobriyan 		{"-129",	10,	-129},
55333ee3b2eSAlexey Dobriyan 		{"-128",	10,	-128},
55433ee3b2eSAlexey Dobriyan 		{"-127",	10,	-127},
55533ee3b2eSAlexey Dobriyan 		{"-1",	10,	-1},
55633ee3b2eSAlexey Dobriyan 		{"0",	10,	0},
55733ee3b2eSAlexey Dobriyan 		{"1",	10,	1},
55833ee3b2eSAlexey Dobriyan 		{"126",	10,	126},
55933ee3b2eSAlexey Dobriyan 		{"127",	10,	127},
56033ee3b2eSAlexey Dobriyan 		{"128",	10,	128},
56133ee3b2eSAlexey Dobriyan 		{"129",	10,	129},
56233ee3b2eSAlexey Dobriyan 		{"254",	10,	254},
56333ee3b2eSAlexey Dobriyan 		{"255",	10,	255},
56433ee3b2eSAlexey Dobriyan 		{"256",	10,	256},
56533ee3b2eSAlexey Dobriyan 		{"257",	10,	257},
56633ee3b2eSAlexey Dobriyan 		{"32766",	10,	32766},
56733ee3b2eSAlexey Dobriyan 		{"32767",	10,	32767},
56833ee3b2eSAlexey Dobriyan 	};
56933ee3b2eSAlexey Dobriyan 	TEST_OK(kstrtos16, s16, "%hd", test_s16_ok);
57033ee3b2eSAlexey Dobriyan }
57133ee3b2eSAlexey Dobriyan 
test_kstrtos16_fail(void)57233ee3b2eSAlexey Dobriyan static void __init test_kstrtos16_fail(void)
57333ee3b2eSAlexey Dobriyan {
57433ee3b2eSAlexey Dobriyan 	static DEFINE_TEST_FAIL(test_s16_fail) = {
57533ee3b2eSAlexey Dobriyan 		{"32768",	10},
57633ee3b2eSAlexey Dobriyan 		{"32769",	10},
57733ee3b2eSAlexey Dobriyan 		{"65534",	10},
57833ee3b2eSAlexey Dobriyan 		{"65535",	10},
57933ee3b2eSAlexey Dobriyan 		{"65536",	10},
58033ee3b2eSAlexey Dobriyan 		{"65537",	10},
58133ee3b2eSAlexey Dobriyan 		{"2147483646",	10},
58233ee3b2eSAlexey Dobriyan 		{"2147483647",	10},
58333ee3b2eSAlexey Dobriyan 		{"2147483648",	10},
58433ee3b2eSAlexey Dobriyan 		{"2147483649",	10},
58533ee3b2eSAlexey Dobriyan 		{"4294967294",	10},
58633ee3b2eSAlexey Dobriyan 		{"4294967295",	10},
58733ee3b2eSAlexey Dobriyan 		{"4294967296",	10},
58833ee3b2eSAlexey Dobriyan 		{"4294967297",	10},
58933ee3b2eSAlexey Dobriyan 		{"9223372036854775806",	10},
59033ee3b2eSAlexey Dobriyan 		{"9223372036854775807",	10},
59133ee3b2eSAlexey Dobriyan 		{"9223372036854775808",	10},
59233ee3b2eSAlexey Dobriyan 		{"9223372036854775809",	10},
59333ee3b2eSAlexey Dobriyan 		{"18446744073709551614",	10},
59433ee3b2eSAlexey Dobriyan 		{"18446744073709551615",	10},
59533ee3b2eSAlexey Dobriyan 		{"18446744073709551616",	10},
59633ee3b2eSAlexey Dobriyan 		{"18446744073709551617",	10},
59733ee3b2eSAlexey Dobriyan 	};
59833ee3b2eSAlexey Dobriyan 	TEST_FAIL(kstrtos16, s16, "%hd", test_s16_fail);
59933ee3b2eSAlexey Dobriyan }
60033ee3b2eSAlexey Dobriyan 
test_kstrtou8_ok(void)60133ee3b2eSAlexey Dobriyan static void __init test_kstrtou8_ok(void)
60233ee3b2eSAlexey Dobriyan {
60333ee3b2eSAlexey Dobriyan 	DECLARE_TEST_OK(u8, struct test_u8);
60433ee3b2eSAlexey Dobriyan 	static DEFINE_TEST_OK(struct test_u8, test_u8_ok) = {
60533ee3b2eSAlexey Dobriyan 		{"0",	10,	0},
60633ee3b2eSAlexey Dobriyan 		{"1",	10,	1},
60733ee3b2eSAlexey Dobriyan 		{"126",	10,	126},
60833ee3b2eSAlexey Dobriyan 		{"127",	10,	127},
60933ee3b2eSAlexey Dobriyan 		{"128",	10,	128},
61033ee3b2eSAlexey Dobriyan 		{"129",	10,	129},
61133ee3b2eSAlexey Dobriyan 		{"254",	10,	254},
61233ee3b2eSAlexey Dobriyan 		{"255",	10,	255},
61333ee3b2eSAlexey Dobriyan 	};
61433ee3b2eSAlexey Dobriyan 	TEST_OK(kstrtou8, u8, "%hhu", test_u8_ok);
61533ee3b2eSAlexey Dobriyan }
61633ee3b2eSAlexey Dobriyan 
test_kstrtou8_fail(void)61733ee3b2eSAlexey Dobriyan static void __init test_kstrtou8_fail(void)
61833ee3b2eSAlexey Dobriyan {
61933ee3b2eSAlexey Dobriyan 	static DEFINE_TEST_FAIL(test_u8_fail) = {
62033ee3b2eSAlexey Dobriyan 		{"-2",	10},
62133ee3b2eSAlexey Dobriyan 		{"-1",	10},
62233ee3b2eSAlexey Dobriyan 		{"256",	10},
62333ee3b2eSAlexey Dobriyan 		{"257",	10},
62433ee3b2eSAlexey Dobriyan 		{"32766",	10},
62533ee3b2eSAlexey Dobriyan 		{"32767",	10},
62633ee3b2eSAlexey Dobriyan 		{"32768",	10},
62733ee3b2eSAlexey Dobriyan 		{"32769",	10},
62833ee3b2eSAlexey Dobriyan 		{"65534",	10},
62933ee3b2eSAlexey Dobriyan 		{"65535",	10},
63033ee3b2eSAlexey Dobriyan 		{"65536",	10},
63133ee3b2eSAlexey Dobriyan 		{"65537",	10},
63233ee3b2eSAlexey Dobriyan 		{"2147483646",	10},
63333ee3b2eSAlexey Dobriyan 		{"2147483647",	10},
63433ee3b2eSAlexey Dobriyan 		{"2147483648",	10},
63533ee3b2eSAlexey Dobriyan 		{"2147483649",	10},
63633ee3b2eSAlexey Dobriyan 		{"4294967294",	10},
63733ee3b2eSAlexey Dobriyan 		{"4294967295",	10},
63833ee3b2eSAlexey Dobriyan 		{"4294967296",	10},
63933ee3b2eSAlexey Dobriyan 		{"4294967297",	10},
64033ee3b2eSAlexey Dobriyan 		{"9223372036854775806",	10},
64133ee3b2eSAlexey Dobriyan 		{"9223372036854775807",	10},
64233ee3b2eSAlexey Dobriyan 		{"9223372036854775808",	10},
64333ee3b2eSAlexey Dobriyan 		{"9223372036854775809",	10},
64433ee3b2eSAlexey Dobriyan 		{"18446744073709551614",	10},
64533ee3b2eSAlexey Dobriyan 		{"18446744073709551615",	10},
64633ee3b2eSAlexey Dobriyan 		{"18446744073709551616",	10},
64733ee3b2eSAlexey Dobriyan 		{"18446744073709551617",	10},
64833ee3b2eSAlexey Dobriyan 	};
64933ee3b2eSAlexey Dobriyan 	TEST_FAIL(kstrtou8, u8, "%hhu", test_u8_fail);
65033ee3b2eSAlexey Dobriyan }
65133ee3b2eSAlexey Dobriyan 
test_kstrtos8_ok(void)65233ee3b2eSAlexey Dobriyan static void __init test_kstrtos8_ok(void)
65333ee3b2eSAlexey Dobriyan {
65433ee3b2eSAlexey Dobriyan 	DECLARE_TEST_OK(s8, struct test_s8);
65533ee3b2eSAlexey Dobriyan 	static DEFINE_TEST_OK(struct test_s8, test_s8_ok) = {
65633ee3b2eSAlexey Dobriyan 		{"-128",	10,	-128},
65733ee3b2eSAlexey Dobriyan 		{"-127",	10,	-127},
65833ee3b2eSAlexey Dobriyan 		{"-1",	10,	-1},
65933ee3b2eSAlexey Dobriyan 		{"0",	10,	0},
66033ee3b2eSAlexey Dobriyan 		{"1",	10,	1},
66133ee3b2eSAlexey Dobriyan 		{"126",	10,	126},
66233ee3b2eSAlexey Dobriyan 		{"127",	10,	127},
66333ee3b2eSAlexey Dobriyan 	};
66433ee3b2eSAlexey Dobriyan 	TEST_OK(kstrtos8, s8, "%hhd", test_s8_ok);
66533ee3b2eSAlexey Dobriyan }
66633ee3b2eSAlexey Dobriyan 
test_kstrtos8_fail(void)66733ee3b2eSAlexey Dobriyan static void __init test_kstrtos8_fail(void)
66833ee3b2eSAlexey Dobriyan {
66933ee3b2eSAlexey Dobriyan 	static DEFINE_TEST_FAIL(test_s8_fail) = {
67033ee3b2eSAlexey Dobriyan 		{"-130",	10},
67133ee3b2eSAlexey Dobriyan 		{"-129",	10},
67233ee3b2eSAlexey Dobriyan 		{"128",	10},
67333ee3b2eSAlexey Dobriyan 		{"129",	10},
67433ee3b2eSAlexey Dobriyan 		{"254",	10},
67533ee3b2eSAlexey Dobriyan 		{"255",	10},
67633ee3b2eSAlexey Dobriyan 		{"256",	10},
67733ee3b2eSAlexey Dobriyan 		{"257",	10},
67833ee3b2eSAlexey Dobriyan 		{"32766",	10},
67933ee3b2eSAlexey Dobriyan 		{"32767",	10},
68033ee3b2eSAlexey Dobriyan 		{"32768",	10},
68133ee3b2eSAlexey Dobriyan 		{"32769",	10},
68233ee3b2eSAlexey Dobriyan 		{"65534",	10},
68333ee3b2eSAlexey Dobriyan 		{"65535",	10},
68433ee3b2eSAlexey Dobriyan 		{"65536",	10},
68533ee3b2eSAlexey Dobriyan 		{"65537",	10},
68633ee3b2eSAlexey Dobriyan 		{"2147483646",	10},
68733ee3b2eSAlexey Dobriyan 		{"2147483647",	10},
68833ee3b2eSAlexey Dobriyan 		{"2147483648",	10},
68933ee3b2eSAlexey Dobriyan 		{"2147483649",	10},
69033ee3b2eSAlexey Dobriyan 		{"4294967294",	10},
69133ee3b2eSAlexey Dobriyan 		{"4294967295",	10},
69233ee3b2eSAlexey Dobriyan 		{"4294967296",	10},
69333ee3b2eSAlexey Dobriyan 		{"4294967297",	10},
69433ee3b2eSAlexey Dobriyan 		{"9223372036854775806",	10},
69533ee3b2eSAlexey Dobriyan 		{"9223372036854775807",	10},
69633ee3b2eSAlexey Dobriyan 		{"9223372036854775808",	10},
69733ee3b2eSAlexey Dobriyan 		{"9223372036854775809",	10},
69833ee3b2eSAlexey Dobriyan 		{"18446744073709551614",	10},
69933ee3b2eSAlexey Dobriyan 		{"18446744073709551615",	10},
70033ee3b2eSAlexey Dobriyan 		{"18446744073709551616",	10},
70133ee3b2eSAlexey Dobriyan 		{"18446744073709551617",	10},
70233ee3b2eSAlexey Dobriyan 	};
70333ee3b2eSAlexey Dobriyan 	TEST_FAIL(kstrtos8, s8, "%hhd", test_s8_fail);
70433ee3b2eSAlexey Dobriyan }
70533ee3b2eSAlexey Dobriyan 
test_kstrtox_init(void)70633ee3b2eSAlexey Dobriyan static int __init test_kstrtox_init(void)
70733ee3b2eSAlexey Dobriyan {
70833ee3b2eSAlexey Dobriyan 	test_kstrtoull_ok();
70933ee3b2eSAlexey Dobriyan 	test_kstrtoull_fail();
71033ee3b2eSAlexey Dobriyan 	test_kstrtoll_ok();
71133ee3b2eSAlexey Dobriyan 	test_kstrtoll_fail();
71233ee3b2eSAlexey Dobriyan 
71333ee3b2eSAlexey Dobriyan 	test_kstrtou64_ok();
71433ee3b2eSAlexey Dobriyan 	test_kstrtou64_fail();
71533ee3b2eSAlexey Dobriyan 	test_kstrtos64_ok();
71633ee3b2eSAlexey Dobriyan 	test_kstrtos64_fail();
71733ee3b2eSAlexey Dobriyan 
71833ee3b2eSAlexey Dobriyan 	test_kstrtou32_ok();
71933ee3b2eSAlexey Dobriyan 	test_kstrtou32_fail();
72033ee3b2eSAlexey Dobriyan 	test_kstrtos32_ok();
72133ee3b2eSAlexey Dobriyan 	test_kstrtos32_fail();
72233ee3b2eSAlexey Dobriyan 
72333ee3b2eSAlexey Dobriyan 	test_kstrtou16_ok();
72433ee3b2eSAlexey Dobriyan 	test_kstrtou16_fail();
72533ee3b2eSAlexey Dobriyan 	test_kstrtos16_ok();
72633ee3b2eSAlexey Dobriyan 	test_kstrtos16_fail();
72733ee3b2eSAlexey Dobriyan 
72833ee3b2eSAlexey Dobriyan 	test_kstrtou8_ok();
72933ee3b2eSAlexey Dobriyan 	test_kstrtou8_fail();
73033ee3b2eSAlexey Dobriyan 	test_kstrtos8_ok();
73133ee3b2eSAlexey Dobriyan 	test_kstrtos8_fail();
73233ee3b2eSAlexey Dobriyan 	return -EINVAL;
73333ee3b2eSAlexey Dobriyan }
73433ee3b2eSAlexey Dobriyan module_init(test_kstrtox_init);
73533ee3b2eSAlexey Dobriyan MODULE_LICENSE("Dual BSD/GPL");
736