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");
736