18c2ecf20Sopenharmony_ci#include <linux/init.h>
28c2ecf20Sopenharmony_ci#include <linux/kernel.h>
38c2ecf20Sopenharmony_ci#include <linux/module.h>
48c2ecf20Sopenharmony_ci
58c2ecf20Sopenharmony_ci#define for_each_test(i, test)	\
68c2ecf20Sopenharmony_ci	for (i = 0; i < ARRAY_SIZE(test); i++)
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_cistruct test_fail {
98c2ecf20Sopenharmony_ci	const char *str;
108c2ecf20Sopenharmony_ci	unsigned int base;
118c2ecf20Sopenharmony_ci};
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_ci#define DEFINE_TEST_FAIL(test)	\
148c2ecf20Sopenharmony_ci	const struct test_fail test[] __initconst
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_ci#define DECLARE_TEST_OK(type, test_type)	\
178c2ecf20Sopenharmony_ci	test_type {				\
188c2ecf20Sopenharmony_ci		const char *str;		\
198c2ecf20Sopenharmony_ci		unsigned int base;		\
208c2ecf20Sopenharmony_ci		type expected_res;		\
218c2ecf20Sopenharmony_ci	}
228c2ecf20Sopenharmony_ci
238c2ecf20Sopenharmony_ci#define DEFINE_TEST_OK(type, test)	\
248c2ecf20Sopenharmony_ci	const type test[] __initconst
258c2ecf20Sopenharmony_ci
268c2ecf20Sopenharmony_ci#define TEST_FAIL(fn, type, fmt, test)					\
278c2ecf20Sopenharmony_ci{									\
288c2ecf20Sopenharmony_ci	unsigned int i;							\
298c2ecf20Sopenharmony_ci									\
308c2ecf20Sopenharmony_ci	for_each_test(i, test) {					\
318c2ecf20Sopenharmony_ci		const struct test_fail *t = &test[i];			\
328c2ecf20Sopenharmony_ci		type tmp;						\
338c2ecf20Sopenharmony_ci		int rv;							\
348c2ecf20Sopenharmony_ci									\
358c2ecf20Sopenharmony_ci		tmp = 0;						\
368c2ecf20Sopenharmony_ci		rv = fn(t->str, t->base, &tmp);				\
378c2ecf20Sopenharmony_ci		if (rv >= 0) {						\
388c2ecf20Sopenharmony_ci			WARN(1, "str '%s', base %u, expected -E, got %d/" fmt "\n",	\
398c2ecf20Sopenharmony_ci				t->str, t->base, rv, tmp);		\
408c2ecf20Sopenharmony_ci			continue;					\
418c2ecf20Sopenharmony_ci		}							\
428c2ecf20Sopenharmony_ci	}								\
438c2ecf20Sopenharmony_ci}
448c2ecf20Sopenharmony_ci
458c2ecf20Sopenharmony_ci#define TEST_OK(fn, type, fmt, test)					\
468c2ecf20Sopenharmony_ci{									\
478c2ecf20Sopenharmony_ci	unsigned int i;							\
488c2ecf20Sopenharmony_ci									\
498c2ecf20Sopenharmony_ci	for_each_test(i, test) {					\
508c2ecf20Sopenharmony_ci		const typeof(test[0]) *t = &test[i];			\
518c2ecf20Sopenharmony_ci		type res;						\
528c2ecf20Sopenharmony_ci		int rv;							\
538c2ecf20Sopenharmony_ci									\
548c2ecf20Sopenharmony_ci		rv = fn(t->str, t->base, &res);				\
558c2ecf20Sopenharmony_ci		if (rv != 0) {						\
568c2ecf20Sopenharmony_ci			WARN(1, "str '%s', base %u, expected 0/" fmt ", got %d\n",	\
578c2ecf20Sopenharmony_ci				t->str, t->base, t->expected_res, rv);	\
588c2ecf20Sopenharmony_ci			continue;					\
598c2ecf20Sopenharmony_ci		}							\
608c2ecf20Sopenharmony_ci		if (res != t->expected_res) {				\
618c2ecf20Sopenharmony_ci			WARN(1, "str '%s', base %u, expected " fmt ", got " fmt "\n",	\
628c2ecf20Sopenharmony_ci				t->str, t->base, t->expected_res, res);	\
638c2ecf20Sopenharmony_ci			continue;					\
648c2ecf20Sopenharmony_ci		}							\
658c2ecf20Sopenharmony_ci	}								\
668c2ecf20Sopenharmony_ci}
678c2ecf20Sopenharmony_ci
688c2ecf20Sopenharmony_cistatic void __init test_kstrtoull_ok(void)
698c2ecf20Sopenharmony_ci{
708c2ecf20Sopenharmony_ci	DECLARE_TEST_OK(unsigned long long, struct test_ull);
718c2ecf20Sopenharmony_ci	static DEFINE_TEST_OK(struct test_ull, test_ull_ok) = {
728c2ecf20Sopenharmony_ci		{"0",	10,	0ULL},
738c2ecf20Sopenharmony_ci		{"1",	10,	1ULL},
748c2ecf20Sopenharmony_ci		{"127",	10,	127ULL},
758c2ecf20Sopenharmony_ci		{"128",	10,	128ULL},
768c2ecf20Sopenharmony_ci		{"129",	10,	129ULL},
778c2ecf20Sopenharmony_ci		{"255",	10,	255ULL},
788c2ecf20Sopenharmony_ci		{"256",	10,	256ULL},
798c2ecf20Sopenharmony_ci		{"257",	10,	257ULL},
808c2ecf20Sopenharmony_ci		{"32767",	10,	32767ULL},
818c2ecf20Sopenharmony_ci		{"32768",	10,	32768ULL},
828c2ecf20Sopenharmony_ci		{"32769",	10,	32769ULL},
838c2ecf20Sopenharmony_ci		{"65535",	10,	65535ULL},
848c2ecf20Sopenharmony_ci		{"65536",	10,	65536ULL},
858c2ecf20Sopenharmony_ci		{"65537",	10,	65537ULL},
868c2ecf20Sopenharmony_ci		{"2147483647",	10,	2147483647ULL},
878c2ecf20Sopenharmony_ci		{"2147483648",	10,	2147483648ULL},
888c2ecf20Sopenharmony_ci		{"2147483649",	10,	2147483649ULL},
898c2ecf20Sopenharmony_ci		{"4294967295",	10,	4294967295ULL},
908c2ecf20Sopenharmony_ci		{"4294967296",	10,	4294967296ULL},
918c2ecf20Sopenharmony_ci		{"4294967297",	10,	4294967297ULL},
928c2ecf20Sopenharmony_ci		{"9223372036854775807",	10,	9223372036854775807ULL},
938c2ecf20Sopenharmony_ci		{"9223372036854775808",	10,	9223372036854775808ULL},
948c2ecf20Sopenharmony_ci		{"9223372036854775809",	10,	9223372036854775809ULL},
958c2ecf20Sopenharmony_ci		{"18446744073709551614",	10,	18446744073709551614ULL},
968c2ecf20Sopenharmony_ci		{"18446744073709551615",	10,	18446744073709551615ULL},
978c2ecf20Sopenharmony_ci
988c2ecf20Sopenharmony_ci		{"00",		8,	00ULL},
998c2ecf20Sopenharmony_ci		{"01",		8,	01ULL},
1008c2ecf20Sopenharmony_ci		{"0177",	8,	0177ULL},
1018c2ecf20Sopenharmony_ci		{"0200",	8,	0200ULL},
1028c2ecf20Sopenharmony_ci		{"0201",	8,	0201ULL},
1038c2ecf20Sopenharmony_ci		{"0377",	8,	0377ULL},
1048c2ecf20Sopenharmony_ci		{"0400",	8,	0400ULL},
1058c2ecf20Sopenharmony_ci		{"0401",	8,	0401ULL},
1068c2ecf20Sopenharmony_ci		{"077777",	8,	077777ULL},
1078c2ecf20Sopenharmony_ci		{"0100000",	8,	0100000ULL},
1088c2ecf20Sopenharmony_ci		{"0100001",	8,	0100001ULL},
1098c2ecf20Sopenharmony_ci		{"0177777",	8,	0177777ULL},
1108c2ecf20Sopenharmony_ci		{"0200000",	8,	0200000ULL},
1118c2ecf20Sopenharmony_ci		{"0200001",	8,	0200001ULL},
1128c2ecf20Sopenharmony_ci		{"017777777777",	8,	017777777777ULL},
1138c2ecf20Sopenharmony_ci		{"020000000000",	8,	020000000000ULL},
1148c2ecf20Sopenharmony_ci		{"020000000001",	8,	020000000001ULL},
1158c2ecf20Sopenharmony_ci		{"037777777777",	8,	037777777777ULL},
1168c2ecf20Sopenharmony_ci		{"040000000000",	8,	040000000000ULL},
1178c2ecf20Sopenharmony_ci		{"040000000001",	8,	040000000001ULL},
1188c2ecf20Sopenharmony_ci		{"0777777777777777777777",	8,	0777777777777777777777ULL},
1198c2ecf20Sopenharmony_ci		{"01000000000000000000000",	8,	01000000000000000000000ULL},
1208c2ecf20Sopenharmony_ci		{"01000000000000000000001",	8,	01000000000000000000001ULL},
1218c2ecf20Sopenharmony_ci		{"01777777777777777777776",	8,	01777777777777777777776ULL},
1228c2ecf20Sopenharmony_ci		{"01777777777777777777777",	8,	01777777777777777777777ULL},
1238c2ecf20Sopenharmony_ci
1248c2ecf20Sopenharmony_ci		{"0x0",		16,	0x0ULL},
1258c2ecf20Sopenharmony_ci		{"0x1",		16,	0x1ULL},
1268c2ecf20Sopenharmony_ci		{"0x7f",	16,	0x7fULL},
1278c2ecf20Sopenharmony_ci		{"0x80",	16,	0x80ULL},
1288c2ecf20Sopenharmony_ci		{"0x81",	16,	0x81ULL},
1298c2ecf20Sopenharmony_ci		{"0xff",	16,	0xffULL},
1308c2ecf20Sopenharmony_ci		{"0x100",	16,	0x100ULL},
1318c2ecf20Sopenharmony_ci		{"0x101",	16,	0x101ULL},
1328c2ecf20Sopenharmony_ci		{"0x7fff",	16,	0x7fffULL},
1338c2ecf20Sopenharmony_ci		{"0x8000",	16,	0x8000ULL},
1348c2ecf20Sopenharmony_ci		{"0x8001",	16,	0x8001ULL},
1358c2ecf20Sopenharmony_ci		{"0xffff",	16,	0xffffULL},
1368c2ecf20Sopenharmony_ci		{"0x10000",	16,	0x10000ULL},
1378c2ecf20Sopenharmony_ci		{"0x10001",	16,	0x10001ULL},
1388c2ecf20Sopenharmony_ci		{"0x7fffffff",	16,	0x7fffffffULL},
1398c2ecf20Sopenharmony_ci		{"0x80000000",	16,	0x80000000ULL},
1408c2ecf20Sopenharmony_ci		{"0x80000001",	16,	0x80000001ULL},
1418c2ecf20Sopenharmony_ci		{"0xffffffff",	16,	0xffffffffULL},
1428c2ecf20Sopenharmony_ci		{"0x100000000",	16,	0x100000000ULL},
1438c2ecf20Sopenharmony_ci		{"0x100000001",	16,	0x100000001ULL},
1448c2ecf20Sopenharmony_ci		{"0x7fffffffffffffff",	16,	0x7fffffffffffffffULL},
1458c2ecf20Sopenharmony_ci		{"0x8000000000000000",	16,	0x8000000000000000ULL},
1468c2ecf20Sopenharmony_ci		{"0x8000000000000001",	16,	0x8000000000000001ULL},
1478c2ecf20Sopenharmony_ci		{"0xfffffffffffffffe",	16,	0xfffffffffffffffeULL},
1488c2ecf20Sopenharmony_ci		{"0xffffffffffffffff",	16,	0xffffffffffffffffULL},
1498c2ecf20Sopenharmony_ci
1508c2ecf20Sopenharmony_ci		{"0\n",	0,	0ULL},
1518c2ecf20Sopenharmony_ci	};
1528c2ecf20Sopenharmony_ci	TEST_OK(kstrtoull, unsigned long long, "%llu", test_ull_ok);
1538c2ecf20Sopenharmony_ci}
1548c2ecf20Sopenharmony_ci
1558c2ecf20Sopenharmony_cistatic void __init test_kstrtoull_fail(void)
1568c2ecf20Sopenharmony_ci{
1578c2ecf20Sopenharmony_ci	static DEFINE_TEST_FAIL(test_ull_fail) = {
1588c2ecf20Sopenharmony_ci		{"",	0},
1598c2ecf20Sopenharmony_ci		{"",	8},
1608c2ecf20Sopenharmony_ci		{"",	10},
1618c2ecf20Sopenharmony_ci		{"",	16},
1628c2ecf20Sopenharmony_ci		{"\n",	0},
1638c2ecf20Sopenharmony_ci		{"\n",	8},
1648c2ecf20Sopenharmony_ci		{"\n",	10},
1658c2ecf20Sopenharmony_ci		{"\n",	16},
1668c2ecf20Sopenharmony_ci		{"\n0",	0},
1678c2ecf20Sopenharmony_ci		{"\n0",	8},
1688c2ecf20Sopenharmony_ci		{"\n0",	10},
1698c2ecf20Sopenharmony_ci		{"\n0",	16},
1708c2ecf20Sopenharmony_ci		{"+",	0},
1718c2ecf20Sopenharmony_ci		{"+",	8},
1728c2ecf20Sopenharmony_ci		{"+",	10},
1738c2ecf20Sopenharmony_ci		{"+",	16},
1748c2ecf20Sopenharmony_ci		{"-",	0},
1758c2ecf20Sopenharmony_ci		{"-",	8},
1768c2ecf20Sopenharmony_ci		{"-",	10},
1778c2ecf20Sopenharmony_ci		{"-",	16},
1788c2ecf20Sopenharmony_ci		{"0x",	0},
1798c2ecf20Sopenharmony_ci		{"0x",	16},
1808c2ecf20Sopenharmony_ci		{"0X",	0},
1818c2ecf20Sopenharmony_ci		{"0X",	16},
1828c2ecf20Sopenharmony_ci		{"0 ",	0},
1838c2ecf20Sopenharmony_ci		{"1+",	0},
1848c2ecf20Sopenharmony_ci		{"1-",	0},
1858c2ecf20Sopenharmony_ci		{" 2",	0},
1868c2ecf20Sopenharmony_ci		/* base autodetection */
1878c2ecf20Sopenharmony_ci		{"0x0z",	0},
1888c2ecf20Sopenharmony_ci		{"0z",		0},
1898c2ecf20Sopenharmony_ci		{"a",		0},
1908c2ecf20Sopenharmony_ci		/* digit >= base */
1918c2ecf20Sopenharmony_ci		{"2",	2},
1928c2ecf20Sopenharmony_ci		{"8",	8},
1938c2ecf20Sopenharmony_ci		{"a",	10},
1948c2ecf20Sopenharmony_ci		{"A",	10},
1958c2ecf20Sopenharmony_ci		{"g",	16},
1968c2ecf20Sopenharmony_ci		{"G",	16},
1978c2ecf20Sopenharmony_ci		/* overflow */
1988c2ecf20Sopenharmony_ci		{"10000000000000000000000000000000000000000000000000000000000000000",	2},
1998c2ecf20Sopenharmony_ci		{"2000000000000000000000",	8},
2008c2ecf20Sopenharmony_ci		{"18446744073709551616",	10},
2018c2ecf20Sopenharmony_ci		{"10000000000000000",	16},
2028c2ecf20Sopenharmony_ci		/* negative */
2038c2ecf20Sopenharmony_ci		{"-0", 0},
2048c2ecf20Sopenharmony_ci		{"-0", 8},
2058c2ecf20Sopenharmony_ci		{"-0", 10},
2068c2ecf20Sopenharmony_ci		{"-0", 16},
2078c2ecf20Sopenharmony_ci		{"-1", 0},
2088c2ecf20Sopenharmony_ci		{"-1", 8},
2098c2ecf20Sopenharmony_ci		{"-1", 10},
2108c2ecf20Sopenharmony_ci		{"-1", 16},
2118c2ecf20Sopenharmony_ci		/* sign is first character if any */
2128c2ecf20Sopenharmony_ci		{"-+1", 0},
2138c2ecf20Sopenharmony_ci		{"-+1", 8},
2148c2ecf20Sopenharmony_ci		{"-+1", 10},
2158c2ecf20Sopenharmony_ci		{"-+1", 16},
2168c2ecf20Sopenharmony_ci		/* nothing after \n */
2178c2ecf20Sopenharmony_ci		{"0\n0", 0},
2188c2ecf20Sopenharmony_ci		{"0\n0", 8},
2198c2ecf20Sopenharmony_ci		{"0\n0", 10},
2208c2ecf20Sopenharmony_ci		{"0\n0", 16},
2218c2ecf20Sopenharmony_ci		{"0\n+", 0},
2228c2ecf20Sopenharmony_ci		{"0\n+", 8},
2238c2ecf20Sopenharmony_ci		{"0\n+", 10},
2248c2ecf20Sopenharmony_ci		{"0\n+", 16},
2258c2ecf20Sopenharmony_ci		{"0\n-", 0},
2268c2ecf20Sopenharmony_ci		{"0\n-", 8},
2278c2ecf20Sopenharmony_ci		{"0\n-", 10},
2288c2ecf20Sopenharmony_ci		{"0\n-", 16},
2298c2ecf20Sopenharmony_ci		{"0\n ", 0},
2308c2ecf20Sopenharmony_ci		{"0\n ", 8},
2318c2ecf20Sopenharmony_ci		{"0\n ", 10},
2328c2ecf20Sopenharmony_ci		{"0\n ", 16},
2338c2ecf20Sopenharmony_ci	};
2348c2ecf20Sopenharmony_ci	TEST_FAIL(kstrtoull, unsigned long long, "%llu", test_ull_fail);
2358c2ecf20Sopenharmony_ci}
2368c2ecf20Sopenharmony_ci
2378c2ecf20Sopenharmony_cistatic void __init test_kstrtoll_ok(void)
2388c2ecf20Sopenharmony_ci{
2398c2ecf20Sopenharmony_ci	DECLARE_TEST_OK(long long, struct test_ll);
2408c2ecf20Sopenharmony_ci	static DEFINE_TEST_OK(struct test_ll, test_ll_ok) = {
2418c2ecf20Sopenharmony_ci		{"0",	10,	0LL},
2428c2ecf20Sopenharmony_ci		{"1",	10,	1LL},
2438c2ecf20Sopenharmony_ci		{"127",	10,	127LL},
2448c2ecf20Sopenharmony_ci		{"128",	10,	128LL},
2458c2ecf20Sopenharmony_ci		{"129",	10,	129LL},
2468c2ecf20Sopenharmony_ci		{"255",	10,	255LL},
2478c2ecf20Sopenharmony_ci		{"256",	10,	256LL},
2488c2ecf20Sopenharmony_ci		{"257",	10,	257LL},
2498c2ecf20Sopenharmony_ci		{"32767",	10,	32767LL},
2508c2ecf20Sopenharmony_ci		{"32768",	10,	32768LL},
2518c2ecf20Sopenharmony_ci		{"32769",	10,	32769LL},
2528c2ecf20Sopenharmony_ci		{"65535",	10,	65535LL},
2538c2ecf20Sopenharmony_ci		{"65536",	10,	65536LL},
2548c2ecf20Sopenharmony_ci		{"65537",	10,	65537LL},
2558c2ecf20Sopenharmony_ci		{"2147483647",	10,	2147483647LL},
2568c2ecf20Sopenharmony_ci		{"2147483648",	10,	2147483648LL},
2578c2ecf20Sopenharmony_ci		{"2147483649",	10,	2147483649LL},
2588c2ecf20Sopenharmony_ci		{"4294967295",	10,	4294967295LL},
2598c2ecf20Sopenharmony_ci		{"4294967296",	10,	4294967296LL},
2608c2ecf20Sopenharmony_ci		{"4294967297",	10,	4294967297LL},
2618c2ecf20Sopenharmony_ci		{"9223372036854775807",	10,	9223372036854775807LL},
2628c2ecf20Sopenharmony_ci
2638c2ecf20Sopenharmony_ci		{"-0",	10,	0LL},
2648c2ecf20Sopenharmony_ci		{"-1",	10,	-1LL},
2658c2ecf20Sopenharmony_ci		{"-2",	10,	-2LL},
2668c2ecf20Sopenharmony_ci		{"-9223372036854775808",	10,	LLONG_MIN},
2678c2ecf20Sopenharmony_ci	};
2688c2ecf20Sopenharmony_ci	TEST_OK(kstrtoll, long long, "%lld", test_ll_ok);
2698c2ecf20Sopenharmony_ci}
2708c2ecf20Sopenharmony_ci
2718c2ecf20Sopenharmony_cistatic void __init test_kstrtoll_fail(void)
2728c2ecf20Sopenharmony_ci{
2738c2ecf20Sopenharmony_ci	static DEFINE_TEST_FAIL(test_ll_fail) = {
2748c2ecf20Sopenharmony_ci		{"9223372036854775808",	10},
2758c2ecf20Sopenharmony_ci		{"9223372036854775809",	10},
2768c2ecf20Sopenharmony_ci		{"18446744073709551614",	10},
2778c2ecf20Sopenharmony_ci		{"18446744073709551615",	10},
2788c2ecf20Sopenharmony_ci		{"-9223372036854775809",	10},
2798c2ecf20Sopenharmony_ci		{"-18446744073709551614",	10},
2808c2ecf20Sopenharmony_ci		{"-18446744073709551615",	10},
2818c2ecf20Sopenharmony_ci		/* sign is first character if any */
2828c2ecf20Sopenharmony_ci		{"-+1", 0},
2838c2ecf20Sopenharmony_ci		{"-+1", 8},
2848c2ecf20Sopenharmony_ci		{"-+1", 10},
2858c2ecf20Sopenharmony_ci		{"-+1", 16},
2868c2ecf20Sopenharmony_ci	};
2878c2ecf20Sopenharmony_ci	TEST_FAIL(kstrtoll, long long, "%lld", test_ll_fail);
2888c2ecf20Sopenharmony_ci}
2898c2ecf20Sopenharmony_ci
2908c2ecf20Sopenharmony_cistatic void __init test_kstrtou64_ok(void)
2918c2ecf20Sopenharmony_ci{
2928c2ecf20Sopenharmony_ci	DECLARE_TEST_OK(u64, struct test_u64);
2938c2ecf20Sopenharmony_ci	static DEFINE_TEST_OK(struct test_u64, test_u64_ok) = {
2948c2ecf20Sopenharmony_ci		{"0",	10,	0},
2958c2ecf20Sopenharmony_ci		{"1",	10,	1},
2968c2ecf20Sopenharmony_ci		{"126",	10,	126},
2978c2ecf20Sopenharmony_ci		{"127",	10,	127},
2988c2ecf20Sopenharmony_ci		{"128",	10,	128},
2998c2ecf20Sopenharmony_ci		{"129",	10,	129},
3008c2ecf20Sopenharmony_ci		{"254",	10,	254},
3018c2ecf20Sopenharmony_ci		{"255",	10,	255},
3028c2ecf20Sopenharmony_ci		{"256",	10,	256},
3038c2ecf20Sopenharmony_ci		{"257",	10,	257},
3048c2ecf20Sopenharmony_ci		{"32766",	10,	32766},
3058c2ecf20Sopenharmony_ci		{"32767",	10,	32767},
3068c2ecf20Sopenharmony_ci		{"32768",	10,	32768},
3078c2ecf20Sopenharmony_ci		{"32769",	10,	32769},
3088c2ecf20Sopenharmony_ci		{"65534",	10,	65534},
3098c2ecf20Sopenharmony_ci		{"65535",	10,	65535},
3108c2ecf20Sopenharmony_ci		{"65536",	10,	65536},
3118c2ecf20Sopenharmony_ci		{"65537",	10,	65537},
3128c2ecf20Sopenharmony_ci		{"2147483646",	10,	2147483646},
3138c2ecf20Sopenharmony_ci		{"2147483647",	10,	2147483647},
3148c2ecf20Sopenharmony_ci		{"2147483648",	10,	2147483648ULL},
3158c2ecf20Sopenharmony_ci		{"2147483649",	10,	2147483649ULL},
3168c2ecf20Sopenharmony_ci		{"4294967294",	10,	4294967294ULL},
3178c2ecf20Sopenharmony_ci		{"4294967295",	10,	4294967295ULL},
3188c2ecf20Sopenharmony_ci		{"4294967296",	10,	4294967296ULL},
3198c2ecf20Sopenharmony_ci		{"4294967297",	10,	4294967297ULL},
3208c2ecf20Sopenharmony_ci		{"9223372036854775806",	10,	9223372036854775806ULL},
3218c2ecf20Sopenharmony_ci		{"9223372036854775807",	10,	9223372036854775807ULL},
3228c2ecf20Sopenharmony_ci		{"9223372036854775808",	10,	9223372036854775808ULL},
3238c2ecf20Sopenharmony_ci		{"9223372036854775809",	10,	9223372036854775809ULL},
3248c2ecf20Sopenharmony_ci		{"18446744073709551614",	10,	18446744073709551614ULL},
3258c2ecf20Sopenharmony_ci		{"18446744073709551615",	10,	18446744073709551615ULL},
3268c2ecf20Sopenharmony_ci	};
3278c2ecf20Sopenharmony_ci	TEST_OK(kstrtou64, u64, "%llu", test_u64_ok);
3288c2ecf20Sopenharmony_ci}
3298c2ecf20Sopenharmony_ci
3308c2ecf20Sopenharmony_cistatic void __init test_kstrtou64_fail(void)
3318c2ecf20Sopenharmony_ci{
3328c2ecf20Sopenharmony_ci	static DEFINE_TEST_FAIL(test_u64_fail) = {
3338c2ecf20Sopenharmony_ci		{"-2",	10},
3348c2ecf20Sopenharmony_ci		{"-1",	10},
3358c2ecf20Sopenharmony_ci		{"18446744073709551616",	10},
3368c2ecf20Sopenharmony_ci		{"18446744073709551617",	10},
3378c2ecf20Sopenharmony_ci	};
3388c2ecf20Sopenharmony_ci	TEST_FAIL(kstrtou64, u64, "%llu", test_u64_fail);
3398c2ecf20Sopenharmony_ci}
3408c2ecf20Sopenharmony_ci
3418c2ecf20Sopenharmony_cistatic void __init test_kstrtos64_ok(void)
3428c2ecf20Sopenharmony_ci{
3438c2ecf20Sopenharmony_ci	DECLARE_TEST_OK(s64, struct test_s64);
3448c2ecf20Sopenharmony_ci	static DEFINE_TEST_OK(struct test_s64, test_s64_ok) = {
3458c2ecf20Sopenharmony_ci		{"-128",	10,	-128},
3468c2ecf20Sopenharmony_ci		{"-127",	10,	-127},
3478c2ecf20Sopenharmony_ci		{"-1",	10,	-1},
3488c2ecf20Sopenharmony_ci		{"0",	10,	0},
3498c2ecf20Sopenharmony_ci		{"1",	10,	1},
3508c2ecf20Sopenharmony_ci		{"126",	10,	126},
3518c2ecf20Sopenharmony_ci		{"127",	10,	127},
3528c2ecf20Sopenharmony_ci		{"128",	10,	128},
3538c2ecf20Sopenharmony_ci		{"129",	10,	129},
3548c2ecf20Sopenharmony_ci		{"254",	10,	254},
3558c2ecf20Sopenharmony_ci		{"255",	10,	255},
3568c2ecf20Sopenharmony_ci		{"256",	10,	256},
3578c2ecf20Sopenharmony_ci		{"257",	10,	257},
3588c2ecf20Sopenharmony_ci		{"32766",	10,	32766},
3598c2ecf20Sopenharmony_ci		{"32767",	10,	32767},
3608c2ecf20Sopenharmony_ci		{"32768",	10,	32768},
3618c2ecf20Sopenharmony_ci		{"32769",	10,	32769},
3628c2ecf20Sopenharmony_ci		{"65534",	10,	65534},
3638c2ecf20Sopenharmony_ci		{"65535",	10,	65535},
3648c2ecf20Sopenharmony_ci		{"65536",	10,	65536},
3658c2ecf20Sopenharmony_ci		{"65537",	10,	65537},
3668c2ecf20Sopenharmony_ci		{"2147483646",	10,	2147483646},
3678c2ecf20Sopenharmony_ci		{"2147483647",	10,	2147483647},
3688c2ecf20Sopenharmony_ci		{"2147483648",	10,	2147483648LL},
3698c2ecf20Sopenharmony_ci		{"2147483649",	10,	2147483649LL},
3708c2ecf20Sopenharmony_ci		{"4294967294",	10,	4294967294LL},
3718c2ecf20Sopenharmony_ci		{"4294967295",	10,	4294967295LL},
3728c2ecf20Sopenharmony_ci		{"4294967296",	10,	4294967296LL},
3738c2ecf20Sopenharmony_ci		{"4294967297",	10,	4294967297LL},
3748c2ecf20Sopenharmony_ci		{"9223372036854775806",	10,	9223372036854775806LL},
3758c2ecf20Sopenharmony_ci		{"9223372036854775807",	10,	9223372036854775807LL},
3768c2ecf20Sopenharmony_ci	};
3778c2ecf20Sopenharmony_ci	TEST_OK(kstrtos64, s64, "%lld", test_s64_ok);
3788c2ecf20Sopenharmony_ci}
3798c2ecf20Sopenharmony_ci
3808c2ecf20Sopenharmony_cistatic void __init test_kstrtos64_fail(void)
3818c2ecf20Sopenharmony_ci{
3828c2ecf20Sopenharmony_ci	static DEFINE_TEST_FAIL(test_s64_fail) = {
3838c2ecf20Sopenharmony_ci		{"9223372036854775808",	10},
3848c2ecf20Sopenharmony_ci		{"9223372036854775809",	10},
3858c2ecf20Sopenharmony_ci		{"18446744073709551614",	10},
3868c2ecf20Sopenharmony_ci		{"18446744073709551615",	10},
3878c2ecf20Sopenharmony_ci		{"18446744073709551616",	10},
3888c2ecf20Sopenharmony_ci		{"18446744073709551617",	10},
3898c2ecf20Sopenharmony_ci	};
3908c2ecf20Sopenharmony_ci	TEST_FAIL(kstrtos64, s64, "%lld", test_s64_fail);
3918c2ecf20Sopenharmony_ci}
3928c2ecf20Sopenharmony_ci
3938c2ecf20Sopenharmony_cistatic void __init test_kstrtou32_ok(void)
3948c2ecf20Sopenharmony_ci{
3958c2ecf20Sopenharmony_ci	DECLARE_TEST_OK(u32, struct test_u32);
3968c2ecf20Sopenharmony_ci	static DEFINE_TEST_OK(struct test_u32, test_u32_ok) = {
3978c2ecf20Sopenharmony_ci		{"0",	10,	0},
3988c2ecf20Sopenharmony_ci		{"1",	10,	1},
3998c2ecf20Sopenharmony_ci		{"126",	10,	126},
4008c2ecf20Sopenharmony_ci		{"127",	10,	127},
4018c2ecf20Sopenharmony_ci		{"128",	10,	128},
4028c2ecf20Sopenharmony_ci		{"129",	10,	129},
4038c2ecf20Sopenharmony_ci		{"254",	10,	254},
4048c2ecf20Sopenharmony_ci		{"255",	10,	255},
4058c2ecf20Sopenharmony_ci		{"256",	10,	256},
4068c2ecf20Sopenharmony_ci		{"257",	10,	257},
4078c2ecf20Sopenharmony_ci		{"32766",	10,	32766},
4088c2ecf20Sopenharmony_ci		{"32767",	10,	32767},
4098c2ecf20Sopenharmony_ci		{"32768",	10,	32768},
4108c2ecf20Sopenharmony_ci		{"32769",	10,	32769},
4118c2ecf20Sopenharmony_ci		{"65534",	10,	65534},
4128c2ecf20Sopenharmony_ci		{"65535",	10,	65535},
4138c2ecf20Sopenharmony_ci		{"65536",	10,	65536},
4148c2ecf20Sopenharmony_ci		{"65537",	10,	65537},
4158c2ecf20Sopenharmony_ci		{"2147483646",	10,	2147483646},
4168c2ecf20Sopenharmony_ci		{"2147483647",	10,	2147483647},
4178c2ecf20Sopenharmony_ci		{"2147483648",	10,	2147483648U},
4188c2ecf20Sopenharmony_ci		{"2147483649",	10,	2147483649U},
4198c2ecf20Sopenharmony_ci		{"4294967294",	10,	4294967294U},
4208c2ecf20Sopenharmony_ci		{"4294967295",	10,	4294967295U},
4218c2ecf20Sopenharmony_ci	};
4228c2ecf20Sopenharmony_ci	TEST_OK(kstrtou32, u32, "%u", test_u32_ok);
4238c2ecf20Sopenharmony_ci}
4248c2ecf20Sopenharmony_ci
4258c2ecf20Sopenharmony_cistatic void __init test_kstrtou32_fail(void)
4268c2ecf20Sopenharmony_ci{
4278c2ecf20Sopenharmony_ci	static DEFINE_TEST_FAIL(test_u32_fail) = {
4288c2ecf20Sopenharmony_ci		{"-2",	10},
4298c2ecf20Sopenharmony_ci		{"-1",	10},
4308c2ecf20Sopenharmony_ci		{"4294967296",	10},
4318c2ecf20Sopenharmony_ci		{"4294967297",	10},
4328c2ecf20Sopenharmony_ci		{"9223372036854775806",	10},
4338c2ecf20Sopenharmony_ci		{"9223372036854775807",	10},
4348c2ecf20Sopenharmony_ci		{"9223372036854775808",	10},
4358c2ecf20Sopenharmony_ci		{"9223372036854775809",	10},
4368c2ecf20Sopenharmony_ci		{"18446744073709551614",	10},
4378c2ecf20Sopenharmony_ci		{"18446744073709551615",	10},
4388c2ecf20Sopenharmony_ci		{"18446744073709551616",	10},
4398c2ecf20Sopenharmony_ci		{"18446744073709551617",	10},
4408c2ecf20Sopenharmony_ci	};
4418c2ecf20Sopenharmony_ci	TEST_FAIL(kstrtou32, u32, "%u", test_u32_fail);
4428c2ecf20Sopenharmony_ci}
4438c2ecf20Sopenharmony_ci
4448c2ecf20Sopenharmony_cistatic void __init test_kstrtos32_ok(void)
4458c2ecf20Sopenharmony_ci{
4468c2ecf20Sopenharmony_ci	DECLARE_TEST_OK(s32, struct test_s32);
4478c2ecf20Sopenharmony_ci	static DEFINE_TEST_OK(struct test_s32, test_s32_ok) = {
4488c2ecf20Sopenharmony_ci		{"-128",	10,	-128},
4498c2ecf20Sopenharmony_ci		{"-127",	10,	-127},
4508c2ecf20Sopenharmony_ci		{"-1",	10,	-1},
4518c2ecf20Sopenharmony_ci		{"0",	10,	0},
4528c2ecf20Sopenharmony_ci		{"1",	10,	1},
4538c2ecf20Sopenharmony_ci		{"126",	10,	126},
4548c2ecf20Sopenharmony_ci		{"127",	10,	127},
4558c2ecf20Sopenharmony_ci		{"128",	10,	128},
4568c2ecf20Sopenharmony_ci		{"129",	10,	129},
4578c2ecf20Sopenharmony_ci		{"254",	10,	254},
4588c2ecf20Sopenharmony_ci		{"255",	10,	255},
4598c2ecf20Sopenharmony_ci		{"256",	10,	256},
4608c2ecf20Sopenharmony_ci		{"257",	10,	257},
4618c2ecf20Sopenharmony_ci		{"32766",	10,	32766},
4628c2ecf20Sopenharmony_ci		{"32767",	10,	32767},
4638c2ecf20Sopenharmony_ci		{"32768",	10,	32768},
4648c2ecf20Sopenharmony_ci		{"32769",	10,	32769},
4658c2ecf20Sopenharmony_ci		{"65534",	10,	65534},
4668c2ecf20Sopenharmony_ci		{"65535",	10,	65535},
4678c2ecf20Sopenharmony_ci		{"65536",	10,	65536},
4688c2ecf20Sopenharmony_ci		{"65537",	10,	65537},
4698c2ecf20Sopenharmony_ci		{"2147483646",	10,	2147483646},
4708c2ecf20Sopenharmony_ci		{"2147483647",	10,	2147483647},
4718c2ecf20Sopenharmony_ci	};
4728c2ecf20Sopenharmony_ci	TEST_OK(kstrtos32, s32, "%d", test_s32_ok);
4738c2ecf20Sopenharmony_ci}
4748c2ecf20Sopenharmony_ci
4758c2ecf20Sopenharmony_cistatic void __init test_kstrtos32_fail(void)
4768c2ecf20Sopenharmony_ci{
4778c2ecf20Sopenharmony_ci	static DEFINE_TEST_FAIL(test_s32_fail) = {
4788c2ecf20Sopenharmony_ci		{"2147483648",	10},
4798c2ecf20Sopenharmony_ci		{"2147483649",	10},
4808c2ecf20Sopenharmony_ci		{"4294967294",	10},
4818c2ecf20Sopenharmony_ci		{"4294967295",	10},
4828c2ecf20Sopenharmony_ci		{"4294967296",	10},
4838c2ecf20Sopenharmony_ci		{"4294967297",	10},
4848c2ecf20Sopenharmony_ci		{"9223372036854775806",	10},
4858c2ecf20Sopenharmony_ci		{"9223372036854775807",	10},
4868c2ecf20Sopenharmony_ci		{"9223372036854775808",	10},
4878c2ecf20Sopenharmony_ci		{"9223372036854775809",	10},
4888c2ecf20Sopenharmony_ci		{"18446744073709551614",	10},
4898c2ecf20Sopenharmony_ci		{"18446744073709551615",	10},
4908c2ecf20Sopenharmony_ci		{"18446744073709551616",	10},
4918c2ecf20Sopenharmony_ci		{"18446744073709551617",	10},
4928c2ecf20Sopenharmony_ci	};
4938c2ecf20Sopenharmony_ci	TEST_FAIL(kstrtos32, s32, "%d", test_s32_fail);
4948c2ecf20Sopenharmony_ci}
4958c2ecf20Sopenharmony_ci
4968c2ecf20Sopenharmony_cistatic void __init test_kstrtou16_ok(void)
4978c2ecf20Sopenharmony_ci{
4988c2ecf20Sopenharmony_ci	DECLARE_TEST_OK(u16, struct test_u16);
4998c2ecf20Sopenharmony_ci	static DEFINE_TEST_OK(struct test_u16, test_u16_ok) = {
5008c2ecf20Sopenharmony_ci		{"0",	10,	0},
5018c2ecf20Sopenharmony_ci		{"1",	10,	1},
5028c2ecf20Sopenharmony_ci		{"126",	10,	126},
5038c2ecf20Sopenharmony_ci		{"127",	10,	127},
5048c2ecf20Sopenharmony_ci		{"128",	10,	128},
5058c2ecf20Sopenharmony_ci		{"129",	10,	129},
5068c2ecf20Sopenharmony_ci		{"254",	10,	254},
5078c2ecf20Sopenharmony_ci		{"255",	10,	255},
5088c2ecf20Sopenharmony_ci		{"256",	10,	256},
5098c2ecf20Sopenharmony_ci		{"257",	10,	257},
5108c2ecf20Sopenharmony_ci		{"32766",	10,	32766},
5118c2ecf20Sopenharmony_ci		{"32767",	10,	32767},
5128c2ecf20Sopenharmony_ci		{"32768",	10,	32768},
5138c2ecf20Sopenharmony_ci		{"32769",	10,	32769},
5148c2ecf20Sopenharmony_ci		{"65534",	10,	65534},
5158c2ecf20Sopenharmony_ci		{"65535",	10,	65535},
5168c2ecf20Sopenharmony_ci	};
5178c2ecf20Sopenharmony_ci	TEST_OK(kstrtou16, u16, "%hu", test_u16_ok);
5188c2ecf20Sopenharmony_ci}
5198c2ecf20Sopenharmony_ci
5208c2ecf20Sopenharmony_cistatic void __init test_kstrtou16_fail(void)
5218c2ecf20Sopenharmony_ci{
5228c2ecf20Sopenharmony_ci	static DEFINE_TEST_FAIL(test_u16_fail) = {
5238c2ecf20Sopenharmony_ci		{"-2",	10},
5248c2ecf20Sopenharmony_ci		{"-1",	10},
5258c2ecf20Sopenharmony_ci		{"65536",	10},
5268c2ecf20Sopenharmony_ci		{"65537",	10},
5278c2ecf20Sopenharmony_ci		{"2147483646",	10},
5288c2ecf20Sopenharmony_ci		{"2147483647",	10},
5298c2ecf20Sopenharmony_ci		{"2147483648",	10},
5308c2ecf20Sopenharmony_ci		{"2147483649",	10},
5318c2ecf20Sopenharmony_ci		{"4294967294",	10},
5328c2ecf20Sopenharmony_ci		{"4294967295",	10},
5338c2ecf20Sopenharmony_ci		{"4294967296",	10},
5348c2ecf20Sopenharmony_ci		{"4294967297",	10},
5358c2ecf20Sopenharmony_ci		{"9223372036854775806",	10},
5368c2ecf20Sopenharmony_ci		{"9223372036854775807",	10},
5378c2ecf20Sopenharmony_ci		{"9223372036854775808",	10},
5388c2ecf20Sopenharmony_ci		{"9223372036854775809",	10},
5398c2ecf20Sopenharmony_ci		{"18446744073709551614",	10},
5408c2ecf20Sopenharmony_ci		{"18446744073709551615",	10},
5418c2ecf20Sopenharmony_ci		{"18446744073709551616",	10},
5428c2ecf20Sopenharmony_ci		{"18446744073709551617",	10},
5438c2ecf20Sopenharmony_ci	};
5448c2ecf20Sopenharmony_ci	TEST_FAIL(kstrtou16, u16, "%hu", test_u16_fail);
5458c2ecf20Sopenharmony_ci}
5468c2ecf20Sopenharmony_ci
5478c2ecf20Sopenharmony_cistatic void __init test_kstrtos16_ok(void)
5488c2ecf20Sopenharmony_ci{
5498c2ecf20Sopenharmony_ci	DECLARE_TEST_OK(s16, struct test_s16);
5508c2ecf20Sopenharmony_ci	static DEFINE_TEST_OK(struct test_s16, test_s16_ok) = {
5518c2ecf20Sopenharmony_ci		{"-130",	10,	-130},
5528c2ecf20Sopenharmony_ci		{"-129",	10,	-129},
5538c2ecf20Sopenharmony_ci		{"-128",	10,	-128},
5548c2ecf20Sopenharmony_ci		{"-127",	10,	-127},
5558c2ecf20Sopenharmony_ci		{"-1",	10,	-1},
5568c2ecf20Sopenharmony_ci		{"0",	10,	0},
5578c2ecf20Sopenharmony_ci		{"1",	10,	1},
5588c2ecf20Sopenharmony_ci		{"126",	10,	126},
5598c2ecf20Sopenharmony_ci		{"127",	10,	127},
5608c2ecf20Sopenharmony_ci		{"128",	10,	128},
5618c2ecf20Sopenharmony_ci		{"129",	10,	129},
5628c2ecf20Sopenharmony_ci		{"254",	10,	254},
5638c2ecf20Sopenharmony_ci		{"255",	10,	255},
5648c2ecf20Sopenharmony_ci		{"256",	10,	256},
5658c2ecf20Sopenharmony_ci		{"257",	10,	257},
5668c2ecf20Sopenharmony_ci		{"32766",	10,	32766},
5678c2ecf20Sopenharmony_ci		{"32767",	10,	32767},
5688c2ecf20Sopenharmony_ci	};
5698c2ecf20Sopenharmony_ci	TEST_OK(kstrtos16, s16, "%hd", test_s16_ok);
5708c2ecf20Sopenharmony_ci}
5718c2ecf20Sopenharmony_ci
5728c2ecf20Sopenharmony_cistatic void __init test_kstrtos16_fail(void)
5738c2ecf20Sopenharmony_ci{
5748c2ecf20Sopenharmony_ci	static DEFINE_TEST_FAIL(test_s16_fail) = {
5758c2ecf20Sopenharmony_ci		{"32768",	10},
5768c2ecf20Sopenharmony_ci		{"32769",	10},
5778c2ecf20Sopenharmony_ci		{"65534",	10},
5788c2ecf20Sopenharmony_ci		{"65535",	10},
5798c2ecf20Sopenharmony_ci		{"65536",	10},
5808c2ecf20Sopenharmony_ci		{"65537",	10},
5818c2ecf20Sopenharmony_ci		{"2147483646",	10},
5828c2ecf20Sopenharmony_ci		{"2147483647",	10},
5838c2ecf20Sopenharmony_ci		{"2147483648",	10},
5848c2ecf20Sopenharmony_ci		{"2147483649",	10},
5858c2ecf20Sopenharmony_ci		{"4294967294",	10},
5868c2ecf20Sopenharmony_ci		{"4294967295",	10},
5878c2ecf20Sopenharmony_ci		{"4294967296",	10},
5888c2ecf20Sopenharmony_ci		{"4294967297",	10},
5898c2ecf20Sopenharmony_ci		{"9223372036854775806",	10},
5908c2ecf20Sopenharmony_ci		{"9223372036854775807",	10},
5918c2ecf20Sopenharmony_ci		{"9223372036854775808",	10},
5928c2ecf20Sopenharmony_ci		{"9223372036854775809",	10},
5938c2ecf20Sopenharmony_ci		{"18446744073709551614",	10},
5948c2ecf20Sopenharmony_ci		{"18446744073709551615",	10},
5958c2ecf20Sopenharmony_ci		{"18446744073709551616",	10},
5968c2ecf20Sopenharmony_ci		{"18446744073709551617",	10},
5978c2ecf20Sopenharmony_ci	};
5988c2ecf20Sopenharmony_ci	TEST_FAIL(kstrtos16, s16, "%hd", test_s16_fail);
5998c2ecf20Sopenharmony_ci}
6008c2ecf20Sopenharmony_ci
6018c2ecf20Sopenharmony_cistatic void __init test_kstrtou8_ok(void)
6028c2ecf20Sopenharmony_ci{
6038c2ecf20Sopenharmony_ci	DECLARE_TEST_OK(u8, struct test_u8);
6048c2ecf20Sopenharmony_ci	static DEFINE_TEST_OK(struct test_u8, test_u8_ok) = {
6058c2ecf20Sopenharmony_ci		{"0",	10,	0},
6068c2ecf20Sopenharmony_ci		{"1",	10,	1},
6078c2ecf20Sopenharmony_ci		{"126",	10,	126},
6088c2ecf20Sopenharmony_ci		{"127",	10,	127},
6098c2ecf20Sopenharmony_ci		{"128",	10,	128},
6108c2ecf20Sopenharmony_ci		{"129",	10,	129},
6118c2ecf20Sopenharmony_ci		{"254",	10,	254},
6128c2ecf20Sopenharmony_ci		{"255",	10,	255},
6138c2ecf20Sopenharmony_ci	};
6148c2ecf20Sopenharmony_ci	TEST_OK(kstrtou8, u8, "%hhu", test_u8_ok);
6158c2ecf20Sopenharmony_ci}
6168c2ecf20Sopenharmony_ci
6178c2ecf20Sopenharmony_cistatic void __init test_kstrtou8_fail(void)
6188c2ecf20Sopenharmony_ci{
6198c2ecf20Sopenharmony_ci	static DEFINE_TEST_FAIL(test_u8_fail) = {
6208c2ecf20Sopenharmony_ci		{"-2",	10},
6218c2ecf20Sopenharmony_ci		{"-1",	10},
6228c2ecf20Sopenharmony_ci		{"256",	10},
6238c2ecf20Sopenharmony_ci		{"257",	10},
6248c2ecf20Sopenharmony_ci		{"32766",	10},
6258c2ecf20Sopenharmony_ci		{"32767",	10},
6268c2ecf20Sopenharmony_ci		{"32768",	10},
6278c2ecf20Sopenharmony_ci		{"32769",	10},
6288c2ecf20Sopenharmony_ci		{"65534",	10},
6298c2ecf20Sopenharmony_ci		{"65535",	10},
6308c2ecf20Sopenharmony_ci		{"65536",	10},
6318c2ecf20Sopenharmony_ci		{"65537",	10},
6328c2ecf20Sopenharmony_ci		{"2147483646",	10},
6338c2ecf20Sopenharmony_ci		{"2147483647",	10},
6348c2ecf20Sopenharmony_ci		{"2147483648",	10},
6358c2ecf20Sopenharmony_ci		{"2147483649",	10},
6368c2ecf20Sopenharmony_ci		{"4294967294",	10},
6378c2ecf20Sopenharmony_ci		{"4294967295",	10},
6388c2ecf20Sopenharmony_ci		{"4294967296",	10},
6398c2ecf20Sopenharmony_ci		{"4294967297",	10},
6408c2ecf20Sopenharmony_ci		{"9223372036854775806",	10},
6418c2ecf20Sopenharmony_ci		{"9223372036854775807",	10},
6428c2ecf20Sopenharmony_ci		{"9223372036854775808",	10},
6438c2ecf20Sopenharmony_ci		{"9223372036854775809",	10},
6448c2ecf20Sopenharmony_ci		{"18446744073709551614",	10},
6458c2ecf20Sopenharmony_ci		{"18446744073709551615",	10},
6468c2ecf20Sopenharmony_ci		{"18446744073709551616",	10},
6478c2ecf20Sopenharmony_ci		{"18446744073709551617",	10},
6488c2ecf20Sopenharmony_ci	};
6498c2ecf20Sopenharmony_ci	TEST_FAIL(kstrtou8, u8, "%hhu", test_u8_fail);
6508c2ecf20Sopenharmony_ci}
6518c2ecf20Sopenharmony_ci
6528c2ecf20Sopenharmony_cistatic void __init test_kstrtos8_ok(void)
6538c2ecf20Sopenharmony_ci{
6548c2ecf20Sopenharmony_ci	DECLARE_TEST_OK(s8, struct test_s8);
6558c2ecf20Sopenharmony_ci	static DEFINE_TEST_OK(struct test_s8, test_s8_ok) = {
6568c2ecf20Sopenharmony_ci		{"-128",	10,	-128},
6578c2ecf20Sopenharmony_ci		{"-127",	10,	-127},
6588c2ecf20Sopenharmony_ci		{"-1",	10,	-1},
6598c2ecf20Sopenharmony_ci		{"0",	10,	0},
6608c2ecf20Sopenharmony_ci		{"1",	10,	1},
6618c2ecf20Sopenharmony_ci		{"126",	10,	126},
6628c2ecf20Sopenharmony_ci		{"127",	10,	127},
6638c2ecf20Sopenharmony_ci	};
6648c2ecf20Sopenharmony_ci	TEST_OK(kstrtos8, s8, "%hhd", test_s8_ok);
6658c2ecf20Sopenharmony_ci}
6668c2ecf20Sopenharmony_ci
6678c2ecf20Sopenharmony_cistatic void __init test_kstrtos8_fail(void)
6688c2ecf20Sopenharmony_ci{
6698c2ecf20Sopenharmony_ci	static DEFINE_TEST_FAIL(test_s8_fail) = {
6708c2ecf20Sopenharmony_ci		{"-130",	10},
6718c2ecf20Sopenharmony_ci		{"-129",	10},
6728c2ecf20Sopenharmony_ci		{"128",	10},
6738c2ecf20Sopenharmony_ci		{"129",	10},
6748c2ecf20Sopenharmony_ci		{"254",	10},
6758c2ecf20Sopenharmony_ci		{"255",	10},
6768c2ecf20Sopenharmony_ci		{"256",	10},
6778c2ecf20Sopenharmony_ci		{"257",	10},
6788c2ecf20Sopenharmony_ci		{"32766",	10},
6798c2ecf20Sopenharmony_ci		{"32767",	10},
6808c2ecf20Sopenharmony_ci		{"32768",	10},
6818c2ecf20Sopenharmony_ci		{"32769",	10},
6828c2ecf20Sopenharmony_ci		{"65534",	10},
6838c2ecf20Sopenharmony_ci		{"65535",	10},
6848c2ecf20Sopenharmony_ci		{"65536",	10},
6858c2ecf20Sopenharmony_ci		{"65537",	10},
6868c2ecf20Sopenharmony_ci		{"2147483646",	10},
6878c2ecf20Sopenharmony_ci		{"2147483647",	10},
6888c2ecf20Sopenharmony_ci		{"2147483648",	10},
6898c2ecf20Sopenharmony_ci		{"2147483649",	10},
6908c2ecf20Sopenharmony_ci		{"4294967294",	10},
6918c2ecf20Sopenharmony_ci		{"4294967295",	10},
6928c2ecf20Sopenharmony_ci		{"4294967296",	10},
6938c2ecf20Sopenharmony_ci		{"4294967297",	10},
6948c2ecf20Sopenharmony_ci		{"9223372036854775806",	10},
6958c2ecf20Sopenharmony_ci		{"9223372036854775807",	10},
6968c2ecf20Sopenharmony_ci		{"9223372036854775808",	10},
6978c2ecf20Sopenharmony_ci		{"9223372036854775809",	10},
6988c2ecf20Sopenharmony_ci		{"18446744073709551614",	10},
6998c2ecf20Sopenharmony_ci		{"18446744073709551615",	10},
7008c2ecf20Sopenharmony_ci		{"18446744073709551616",	10},
7018c2ecf20Sopenharmony_ci		{"18446744073709551617",	10},
7028c2ecf20Sopenharmony_ci	};
7038c2ecf20Sopenharmony_ci	TEST_FAIL(kstrtos8, s8, "%hhd", test_s8_fail);
7048c2ecf20Sopenharmony_ci}
7058c2ecf20Sopenharmony_ci
7068c2ecf20Sopenharmony_cistatic int __init test_kstrtox_init(void)
7078c2ecf20Sopenharmony_ci{
7088c2ecf20Sopenharmony_ci	test_kstrtoull_ok();
7098c2ecf20Sopenharmony_ci	test_kstrtoull_fail();
7108c2ecf20Sopenharmony_ci	test_kstrtoll_ok();
7118c2ecf20Sopenharmony_ci	test_kstrtoll_fail();
7128c2ecf20Sopenharmony_ci
7138c2ecf20Sopenharmony_ci	test_kstrtou64_ok();
7148c2ecf20Sopenharmony_ci	test_kstrtou64_fail();
7158c2ecf20Sopenharmony_ci	test_kstrtos64_ok();
7168c2ecf20Sopenharmony_ci	test_kstrtos64_fail();
7178c2ecf20Sopenharmony_ci
7188c2ecf20Sopenharmony_ci	test_kstrtou32_ok();
7198c2ecf20Sopenharmony_ci	test_kstrtou32_fail();
7208c2ecf20Sopenharmony_ci	test_kstrtos32_ok();
7218c2ecf20Sopenharmony_ci	test_kstrtos32_fail();
7228c2ecf20Sopenharmony_ci
7238c2ecf20Sopenharmony_ci	test_kstrtou16_ok();
7248c2ecf20Sopenharmony_ci	test_kstrtou16_fail();
7258c2ecf20Sopenharmony_ci	test_kstrtos16_ok();
7268c2ecf20Sopenharmony_ci	test_kstrtos16_fail();
7278c2ecf20Sopenharmony_ci
7288c2ecf20Sopenharmony_ci	test_kstrtou8_ok();
7298c2ecf20Sopenharmony_ci	test_kstrtou8_fail();
7308c2ecf20Sopenharmony_ci	test_kstrtos8_ok();
7318c2ecf20Sopenharmony_ci	test_kstrtos8_fail();
7328c2ecf20Sopenharmony_ci	return -EINVAL;
7338c2ecf20Sopenharmony_ci}
7348c2ecf20Sopenharmony_cimodule_init(test_kstrtox_init);
7358c2ecf20Sopenharmony_ciMODULE_LICENSE("Dual BSD/GPL");
736