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) \ 6*129965a9SFabian 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 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 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 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 26333ee3b2eSAlexey Dobriyan {"-1", 10, -1LL}, 26433ee3b2eSAlexey Dobriyan {"-2", 10, -2LL}, 26533ee3b2eSAlexey Dobriyan {"-9223372036854775808", 10, LLONG_MIN}, 26633ee3b2eSAlexey Dobriyan }; 26733ee3b2eSAlexey Dobriyan TEST_OK(kstrtoll, long long, "%lld", test_ll_ok); 26833ee3b2eSAlexey Dobriyan } 26933ee3b2eSAlexey Dobriyan 27033ee3b2eSAlexey Dobriyan static void __init test_kstrtoll_fail(void) 27133ee3b2eSAlexey Dobriyan { 27233ee3b2eSAlexey Dobriyan static DEFINE_TEST_FAIL(test_ll_fail) = { 27333ee3b2eSAlexey Dobriyan {"9223372036854775808", 10}, 27433ee3b2eSAlexey Dobriyan {"9223372036854775809", 10}, 27533ee3b2eSAlexey Dobriyan {"18446744073709551614", 10}, 27633ee3b2eSAlexey Dobriyan {"18446744073709551615", 10}, 27733ee3b2eSAlexey Dobriyan {"-9223372036854775809", 10}, 27833ee3b2eSAlexey Dobriyan {"-18446744073709551614", 10}, 27933ee3b2eSAlexey Dobriyan {"-18446744073709551615", 10}, 28033ee3b2eSAlexey Dobriyan /* negative zero isn't an integer in Linux */ 28133ee3b2eSAlexey Dobriyan {"-0", 0}, 28233ee3b2eSAlexey Dobriyan {"-0", 8}, 28333ee3b2eSAlexey Dobriyan {"-0", 10}, 28433ee3b2eSAlexey Dobriyan {"-0", 16}, 28533ee3b2eSAlexey Dobriyan /* sign is first character if any */ 28633ee3b2eSAlexey Dobriyan {"-+1", 0}, 28733ee3b2eSAlexey Dobriyan {"-+1", 8}, 28833ee3b2eSAlexey Dobriyan {"-+1", 10}, 28933ee3b2eSAlexey Dobriyan {"-+1", 16}, 29033ee3b2eSAlexey Dobriyan }; 29133ee3b2eSAlexey Dobriyan TEST_FAIL(kstrtoll, long long, "%lld", test_ll_fail); 29233ee3b2eSAlexey Dobriyan } 29333ee3b2eSAlexey Dobriyan 29433ee3b2eSAlexey Dobriyan static void __init test_kstrtou64_ok(void) 29533ee3b2eSAlexey Dobriyan { 29633ee3b2eSAlexey Dobriyan DECLARE_TEST_OK(u64, struct test_u64); 29733ee3b2eSAlexey Dobriyan static DEFINE_TEST_OK(struct test_u64, test_u64_ok) = { 29833ee3b2eSAlexey Dobriyan {"0", 10, 0}, 29933ee3b2eSAlexey Dobriyan {"1", 10, 1}, 30033ee3b2eSAlexey Dobriyan {"126", 10, 126}, 30133ee3b2eSAlexey Dobriyan {"127", 10, 127}, 30233ee3b2eSAlexey Dobriyan {"128", 10, 128}, 30333ee3b2eSAlexey Dobriyan {"129", 10, 129}, 30433ee3b2eSAlexey Dobriyan {"254", 10, 254}, 30533ee3b2eSAlexey Dobriyan {"255", 10, 255}, 30633ee3b2eSAlexey Dobriyan {"256", 10, 256}, 30733ee3b2eSAlexey Dobriyan {"257", 10, 257}, 30833ee3b2eSAlexey Dobriyan {"32766", 10, 32766}, 30933ee3b2eSAlexey Dobriyan {"32767", 10, 32767}, 31033ee3b2eSAlexey Dobriyan {"32768", 10, 32768}, 31133ee3b2eSAlexey Dobriyan {"32769", 10, 32769}, 31233ee3b2eSAlexey Dobriyan {"65534", 10, 65534}, 31333ee3b2eSAlexey Dobriyan {"65535", 10, 65535}, 31433ee3b2eSAlexey Dobriyan {"65536", 10, 65536}, 31533ee3b2eSAlexey Dobriyan {"65537", 10, 65537}, 31633ee3b2eSAlexey Dobriyan {"2147483646", 10, 2147483646}, 31733ee3b2eSAlexey Dobriyan {"2147483647", 10, 2147483647}, 31801eda2e0SAlexey Dobriyan {"2147483648", 10, 2147483648ULL}, 31901eda2e0SAlexey Dobriyan {"2147483649", 10, 2147483649ULL}, 32001eda2e0SAlexey Dobriyan {"4294967294", 10, 4294967294ULL}, 32101eda2e0SAlexey Dobriyan {"4294967295", 10, 4294967295ULL}, 32201eda2e0SAlexey Dobriyan {"4294967296", 10, 4294967296ULL}, 32301eda2e0SAlexey Dobriyan {"4294967297", 10, 4294967297ULL}, 32433ee3b2eSAlexey Dobriyan {"9223372036854775806", 10, 9223372036854775806ULL}, 32533ee3b2eSAlexey Dobriyan {"9223372036854775807", 10, 9223372036854775807ULL}, 32633ee3b2eSAlexey Dobriyan {"9223372036854775808", 10, 9223372036854775808ULL}, 32733ee3b2eSAlexey Dobriyan {"9223372036854775809", 10, 9223372036854775809ULL}, 32833ee3b2eSAlexey Dobriyan {"18446744073709551614", 10, 18446744073709551614ULL}, 32933ee3b2eSAlexey Dobriyan {"18446744073709551615", 10, 18446744073709551615ULL}, 33033ee3b2eSAlexey Dobriyan }; 33133ee3b2eSAlexey Dobriyan TEST_OK(kstrtou64, u64, "%llu", test_u64_ok); 33233ee3b2eSAlexey Dobriyan } 33333ee3b2eSAlexey Dobriyan 33433ee3b2eSAlexey Dobriyan static void __init test_kstrtou64_fail(void) 33533ee3b2eSAlexey Dobriyan { 33633ee3b2eSAlexey Dobriyan static DEFINE_TEST_FAIL(test_u64_fail) = { 33733ee3b2eSAlexey Dobriyan {"-2", 10}, 33833ee3b2eSAlexey Dobriyan {"-1", 10}, 33933ee3b2eSAlexey Dobriyan {"18446744073709551616", 10}, 34033ee3b2eSAlexey Dobriyan {"18446744073709551617", 10}, 34133ee3b2eSAlexey Dobriyan }; 34233ee3b2eSAlexey Dobriyan TEST_FAIL(kstrtou64, u64, "%llu", test_u64_fail); 34333ee3b2eSAlexey Dobriyan } 34433ee3b2eSAlexey Dobriyan 34533ee3b2eSAlexey Dobriyan static void __init test_kstrtos64_ok(void) 34633ee3b2eSAlexey Dobriyan { 34733ee3b2eSAlexey Dobriyan DECLARE_TEST_OK(s64, struct test_s64); 34833ee3b2eSAlexey Dobriyan static DEFINE_TEST_OK(struct test_s64, test_s64_ok) = { 34933ee3b2eSAlexey Dobriyan {"-128", 10, -128}, 35033ee3b2eSAlexey Dobriyan {"-127", 10, -127}, 35133ee3b2eSAlexey Dobriyan {"-1", 10, -1}, 35233ee3b2eSAlexey Dobriyan {"0", 10, 0}, 35333ee3b2eSAlexey Dobriyan {"1", 10, 1}, 35433ee3b2eSAlexey Dobriyan {"126", 10, 126}, 35533ee3b2eSAlexey Dobriyan {"127", 10, 127}, 35633ee3b2eSAlexey Dobriyan {"128", 10, 128}, 35733ee3b2eSAlexey Dobriyan {"129", 10, 129}, 35833ee3b2eSAlexey Dobriyan {"254", 10, 254}, 35933ee3b2eSAlexey Dobriyan {"255", 10, 255}, 36033ee3b2eSAlexey Dobriyan {"256", 10, 256}, 36133ee3b2eSAlexey Dobriyan {"257", 10, 257}, 36233ee3b2eSAlexey Dobriyan {"32766", 10, 32766}, 36333ee3b2eSAlexey Dobriyan {"32767", 10, 32767}, 36433ee3b2eSAlexey Dobriyan {"32768", 10, 32768}, 36533ee3b2eSAlexey Dobriyan {"32769", 10, 32769}, 36633ee3b2eSAlexey Dobriyan {"65534", 10, 65534}, 36733ee3b2eSAlexey Dobriyan {"65535", 10, 65535}, 36833ee3b2eSAlexey Dobriyan {"65536", 10, 65536}, 36933ee3b2eSAlexey Dobriyan {"65537", 10, 65537}, 37033ee3b2eSAlexey Dobriyan {"2147483646", 10, 2147483646}, 37133ee3b2eSAlexey Dobriyan {"2147483647", 10, 2147483647}, 37201eda2e0SAlexey Dobriyan {"2147483648", 10, 2147483648LL}, 37301eda2e0SAlexey Dobriyan {"2147483649", 10, 2147483649LL}, 37401eda2e0SAlexey Dobriyan {"4294967294", 10, 4294967294LL}, 37501eda2e0SAlexey Dobriyan {"4294967295", 10, 4294967295LL}, 37601eda2e0SAlexey Dobriyan {"4294967296", 10, 4294967296LL}, 37701eda2e0SAlexey Dobriyan {"4294967297", 10, 4294967297LL}, 37833ee3b2eSAlexey Dobriyan {"9223372036854775806", 10, 9223372036854775806LL}, 37933ee3b2eSAlexey Dobriyan {"9223372036854775807", 10, 9223372036854775807LL}, 38033ee3b2eSAlexey Dobriyan }; 38133ee3b2eSAlexey Dobriyan TEST_OK(kstrtos64, s64, "%lld", test_s64_ok); 38233ee3b2eSAlexey Dobriyan } 38333ee3b2eSAlexey Dobriyan 38433ee3b2eSAlexey Dobriyan static void __init test_kstrtos64_fail(void) 38533ee3b2eSAlexey Dobriyan { 38633ee3b2eSAlexey Dobriyan static DEFINE_TEST_FAIL(test_s64_fail) = { 38733ee3b2eSAlexey Dobriyan {"9223372036854775808", 10}, 38833ee3b2eSAlexey Dobriyan {"9223372036854775809", 10}, 38933ee3b2eSAlexey Dobriyan {"18446744073709551614", 10}, 39033ee3b2eSAlexey Dobriyan {"18446744073709551615", 10}, 39133ee3b2eSAlexey Dobriyan {"18446744073709551616", 10}, 39233ee3b2eSAlexey Dobriyan {"18446744073709551617", 10}, 39333ee3b2eSAlexey Dobriyan }; 39433ee3b2eSAlexey Dobriyan TEST_FAIL(kstrtos64, s64, "%lld", test_s64_fail); 39533ee3b2eSAlexey Dobriyan } 39633ee3b2eSAlexey Dobriyan 39733ee3b2eSAlexey Dobriyan static void __init test_kstrtou32_ok(void) 39833ee3b2eSAlexey Dobriyan { 39933ee3b2eSAlexey Dobriyan DECLARE_TEST_OK(u32, struct test_u32); 40033ee3b2eSAlexey Dobriyan static DEFINE_TEST_OK(struct test_u32, test_u32_ok) = { 40133ee3b2eSAlexey Dobriyan {"0", 10, 0}, 40233ee3b2eSAlexey Dobriyan {"1", 10, 1}, 40333ee3b2eSAlexey Dobriyan {"126", 10, 126}, 40433ee3b2eSAlexey Dobriyan {"127", 10, 127}, 40533ee3b2eSAlexey Dobriyan {"128", 10, 128}, 40633ee3b2eSAlexey Dobriyan {"129", 10, 129}, 40733ee3b2eSAlexey Dobriyan {"254", 10, 254}, 40833ee3b2eSAlexey Dobriyan {"255", 10, 255}, 40933ee3b2eSAlexey Dobriyan {"256", 10, 256}, 41033ee3b2eSAlexey Dobriyan {"257", 10, 257}, 41133ee3b2eSAlexey Dobriyan {"32766", 10, 32766}, 41233ee3b2eSAlexey Dobriyan {"32767", 10, 32767}, 41333ee3b2eSAlexey Dobriyan {"32768", 10, 32768}, 41433ee3b2eSAlexey Dobriyan {"32769", 10, 32769}, 41533ee3b2eSAlexey Dobriyan {"65534", 10, 65534}, 41633ee3b2eSAlexey Dobriyan {"65535", 10, 65535}, 41733ee3b2eSAlexey Dobriyan {"65536", 10, 65536}, 41833ee3b2eSAlexey Dobriyan {"65537", 10, 65537}, 41933ee3b2eSAlexey Dobriyan {"2147483646", 10, 2147483646}, 42033ee3b2eSAlexey Dobriyan {"2147483647", 10, 2147483647}, 42101eda2e0SAlexey Dobriyan {"2147483648", 10, 2147483648U}, 42201eda2e0SAlexey Dobriyan {"2147483649", 10, 2147483649U}, 42301eda2e0SAlexey Dobriyan {"4294967294", 10, 4294967294U}, 42401eda2e0SAlexey Dobriyan {"4294967295", 10, 4294967295U}, 42533ee3b2eSAlexey Dobriyan }; 42633ee3b2eSAlexey Dobriyan TEST_OK(kstrtou32, u32, "%u", test_u32_ok); 42733ee3b2eSAlexey Dobriyan } 42833ee3b2eSAlexey Dobriyan 42933ee3b2eSAlexey Dobriyan static void __init test_kstrtou32_fail(void) 43033ee3b2eSAlexey Dobriyan { 43133ee3b2eSAlexey Dobriyan static DEFINE_TEST_FAIL(test_u32_fail) = { 43233ee3b2eSAlexey Dobriyan {"-2", 10}, 43333ee3b2eSAlexey Dobriyan {"-1", 10}, 43433ee3b2eSAlexey Dobriyan {"4294967296", 10}, 43533ee3b2eSAlexey Dobriyan {"4294967297", 10}, 43633ee3b2eSAlexey Dobriyan {"9223372036854775806", 10}, 43733ee3b2eSAlexey Dobriyan {"9223372036854775807", 10}, 43833ee3b2eSAlexey Dobriyan {"9223372036854775808", 10}, 43933ee3b2eSAlexey Dobriyan {"9223372036854775809", 10}, 44033ee3b2eSAlexey Dobriyan {"18446744073709551614", 10}, 44133ee3b2eSAlexey Dobriyan {"18446744073709551615", 10}, 44233ee3b2eSAlexey Dobriyan {"18446744073709551616", 10}, 44333ee3b2eSAlexey Dobriyan {"18446744073709551617", 10}, 44433ee3b2eSAlexey Dobriyan }; 44533ee3b2eSAlexey Dobriyan TEST_FAIL(kstrtou32, u32, "%u", test_u32_fail); 44633ee3b2eSAlexey Dobriyan } 44733ee3b2eSAlexey Dobriyan 44833ee3b2eSAlexey Dobriyan static void __init test_kstrtos32_ok(void) 44933ee3b2eSAlexey Dobriyan { 45033ee3b2eSAlexey Dobriyan DECLARE_TEST_OK(s32, struct test_s32); 45133ee3b2eSAlexey Dobriyan static DEFINE_TEST_OK(struct test_s32, test_s32_ok) = { 45233ee3b2eSAlexey Dobriyan {"-128", 10, -128}, 45333ee3b2eSAlexey Dobriyan {"-127", 10, -127}, 45433ee3b2eSAlexey Dobriyan {"-1", 10, -1}, 45533ee3b2eSAlexey Dobriyan {"0", 10, 0}, 45633ee3b2eSAlexey Dobriyan {"1", 10, 1}, 45733ee3b2eSAlexey Dobriyan {"126", 10, 126}, 45833ee3b2eSAlexey Dobriyan {"127", 10, 127}, 45933ee3b2eSAlexey Dobriyan {"128", 10, 128}, 46033ee3b2eSAlexey Dobriyan {"129", 10, 129}, 46133ee3b2eSAlexey Dobriyan {"254", 10, 254}, 46233ee3b2eSAlexey Dobriyan {"255", 10, 255}, 46333ee3b2eSAlexey Dobriyan {"256", 10, 256}, 46433ee3b2eSAlexey Dobriyan {"257", 10, 257}, 46533ee3b2eSAlexey Dobriyan {"32766", 10, 32766}, 46633ee3b2eSAlexey Dobriyan {"32767", 10, 32767}, 46733ee3b2eSAlexey Dobriyan {"32768", 10, 32768}, 46833ee3b2eSAlexey Dobriyan {"32769", 10, 32769}, 46933ee3b2eSAlexey Dobriyan {"65534", 10, 65534}, 47033ee3b2eSAlexey Dobriyan {"65535", 10, 65535}, 47133ee3b2eSAlexey Dobriyan {"65536", 10, 65536}, 47233ee3b2eSAlexey Dobriyan {"65537", 10, 65537}, 47333ee3b2eSAlexey Dobriyan {"2147483646", 10, 2147483646}, 47433ee3b2eSAlexey Dobriyan {"2147483647", 10, 2147483647}, 47533ee3b2eSAlexey Dobriyan }; 47633ee3b2eSAlexey Dobriyan TEST_OK(kstrtos32, s32, "%d", test_s32_ok); 47733ee3b2eSAlexey Dobriyan } 47833ee3b2eSAlexey Dobriyan 47933ee3b2eSAlexey Dobriyan static void __init test_kstrtos32_fail(void) 48033ee3b2eSAlexey Dobriyan { 48133ee3b2eSAlexey Dobriyan static DEFINE_TEST_FAIL(test_s32_fail) = { 48233ee3b2eSAlexey Dobriyan {"2147483648", 10}, 48333ee3b2eSAlexey Dobriyan {"2147483649", 10}, 48433ee3b2eSAlexey Dobriyan {"4294967294", 10}, 48533ee3b2eSAlexey Dobriyan {"4294967295", 10}, 48633ee3b2eSAlexey Dobriyan {"4294967296", 10}, 48733ee3b2eSAlexey Dobriyan {"4294967297", 10}, 48833ee3b2eSAlexey Dobriyan {"9223372036854775806", 10}, 48933ee3b2eSAlexey Dobriyan {"9223372036854775807", 10}, 49033ee3b2eSAlexey Dobriyan {"9223372036854775808", 10}, 49133ee3b2eSAlexey Dobriyan {"9223372036854775809", 10}, 49233ee3b2eSAlexey Dobriyan {"18446744073709551614", 10}, 49333ee3b2eSAlexey Dobriyan {"18446744073709551615", 10}, 49433ee3b2eSAlexey Dobriyan {"18446744073709551616", 10}, 49533ee3b2eSAlexey Dobriyan {"18446744073709551617", 10}, 49633ee3b2eSAlexey Dobriyan }; 49733ee3b2eSAlexey Dobriyan TEST_FAIL(kstrtos32, s32, "%d", test_s32_fail); 49833ee3b2eSAlexey Dobriyan } 49933ee3b2eSAlexey Dobriyan 50033ee3b2eSAlexey Dobriyan static void __init test_kstrtou16_ok(void) 50133ee3b2eSAlexey Dobriyan { 50233ee3b2eSAlexey Dobriyan DECLARE_TEST_OK(u16, struct test_u16); 50333ee3b2eSAlexey Dobriyan static DEFINE_TEST_OK(struct test_u16, test_u16_ok) = { 50433ee3b2eSAlexey Dobriyan {"0", 10, 0}, 50533ee3b2eSAlexey Dobriyan {"1", 10, 1}, 50633ee3b2eSAlexey Dobriyan {"126", 10, 126}, 50733ee3b2eSAlexey Dobriyan {"127", 10, 127}, 50833ee3b2eSAlexey Dobriyan {"128", 10, 128}, 50933ee3b2eSAlexey Dobriyan {"129", 10, 129}, 51033ee3b2eSAlexey Dobriyan {"254", 10, 254}, 51133ee3b2eSAlexey Dobriyan {"255", 10, 255}, 51233ee3b2eSAlexey Dobriyan {"256", 10, 256}, 51333ee3b2eSAlexey Dobriyan {"257", 10, 257}, 51433ee3b2eSAlexey Dobriyan {"32766", 10, 32766}, 51533ee3b2eSAlexey Dobriyan {"32767", 10, 32767}, 51633ee3b2eSAlexey Dobriyan {"32768", 10, 32768}, 51733ee3b2eSAlexey Dobriyan {"32769", 10, 32769}, 51833ee3b2eSAlexey Dobriyan {"65534", 10, 65534}, 51933ee3b2eSAlexey Dobriyan {"65535", 10, 65535}, 52033ee3b2eSAlexey Dobriyan }; 52133ee3b2eSAlexey Dobriyan TEST_OK(kstrtou16, u16, "%hu", test_u16_ok); 52233ee3b2eSAlexey Dobriyan } 52333ee3b2eSAlexey Dobriyan 52433ee3b2eSAlexey Dobriyan static void __init test_kstrtou16_fail(void) 52533ee3b2eSAlexey Dobriyan { 52633ee3b2eSAlexey Dobriyan static DEFINE_TEST_FAIL(test_u16_fail) = { 52733ee3b2eSAlexey Dobriyan {"-2", 10}, 52833ee3b2eSAlexey Dobriyan {"-1", 10}, 52933ee3b2eSAlexey Dobriyan {"65536", 10}, 53033ee3b2eSAlexey Dobriyan {"65537", 10}, 53133ee3b2eSAlexey Dobriyan {"2147483646", 10}, 53233ee3b2eSAlexey Dobriyan {"2147483647", 10}, 53333ee3b2eSAlexey Dobriyan {"2147483648", 10}, 53433ee3b2eSAlexey Dobriyan {"2147483649", 10}, 53533ee3b2eSAlexey Dobriyan {"4294967294", 10}, 53633ee3b2eSAlexey Dobriyan {"4294967295", 10}, 53733ee3b2eSAlexey Dobriyan {"4294967296", 10}, 53833ee3b2eSAlexey Dobriyan {"4294967297", 10}, 53933ee3b2eSAlexey Dobriyan {"9223372036854775806", 10}, 54033ee3b2eSAlexey Dobriyan {"9223372036854775807", 10}, 54133ee3b2eSAlexey Dobriyan {"9223372036854775808", 10}, 54233ee3b2eSAlexey Dobriyan {"9223372036854775809", 10}, 54333ee3b2eSAlexey Dobriyan {"18446744073709551614", 10}, 54433ee3b2eSAlexey Dobriyan {"18446744073709551615", 10}, 54533ee3b2eSAlexey Dobriyan {"18446744073709551616", 10}, 54633ee3b2eSAlexey Dobriyan {"18446744073709551617", 10}, 54733ee3b2eSAlexey Dobriyan }; 54833ee3b2eSAlexey Dobriyan TEST_FAIL(kstrtou16, u16, "%hu", test_u16_fail); 54933ee3b2eSAlexey Dobriyan } 55033ee3b2eSAlexey Dobriyan 55133ee3b2eSAlexey Dobriyan static void __init test_kstrtos16_ok(void) 55233ee3b2eSAlexey Dobriyan { 55333ee3b2eSAlexey Dobriyan DECLARE_TEST_OK(s16, struct test_s16); 55433ee3b2eSAlexey Dobriyan static DEFINE_TEST_OK(struct test_s16, test_s16_ok) = { 55533ee3b2eSAlexey Dobriyan {"-130", 10, -130}, 55633ee3b2eSAlexey Dobriyan {"-129", 10, -129}, 55733ee3b2eSAlexey Dobriyan {"-128", 10, -128}, 55833ee3b2eSAlexey Dobriyan {"-127", 10, -127}, 55933ee3b2eSAlexey Dobriyan {"-1", 10, -1}, 56033ee3b2eSAlexey Dobriyan {"0", 10, 0}, 56133ee3b2eSAlexey Dobriyan {"1", 10, 1}, 56233ee3b2eSAlexey Dobriyan {"126", 10, 126}, 56333ee3b2eSAlexey Dobriyan {"127", 10, 127}, 56433ee3b2eSAlexey Dobriyan {"128", 10, 128}, 56533ee3b2eSAlexey Dobriyan {"129", 10, 129}, 56633ee3b2eSAlexey Dobriyan {"254", 10, 254}, 56733ee3b2eSAlexey Dobriyan {"255", 10, 255}, 56833ee3b2eSAlexey Dobriyan {"256", 10, 256}, 56933ee3b2eSAlexey Dobriyan {"257", 10, 257}, 57033ee3b2eSAlexey Dobriyan {"32766", 10, 32766}, 57133ee3b2eSAlexey Dobriyan {"32767", 10, 32767}, 57233ee3b2eSAlexey Dobriyan }; 57333ee3b2eSAlexey Dobriyan TEST_OK(kstrtos16, s16, "%hd", test_s16_ok); 57433ee3b2eSAlexey Dobriyan } 57533ee3b2eSAlexey Dobriyan 57633ee3b2eSAlexey Dobriyan static void __init test_kstrtos16_fail(void) 57733ee3b2eSAlexey Dobriyan { 57833ee3b2eSAlexey Dobriyan static DEFINE_TEST_FAIL(test_s16_fail) = { 57933ee3b2eSAlexey Dobriyan {"32768", 10}, 58033ee3b2eSAlexey Dobriyan {"32769", 10}, 58133ee3b2eSAlexey Dobriyan {"65534", 10}, 58233ee3b2eSAlexey Dobriyan {"65535", 10}, 58333ee3b2eSAlexey Dobriyan {"65536", 10}, 58433ee3b2eSAlexey Dobriyan {"65537", 10}, 58533ee3b2eSAlexey Dobriyan {"2147483646", 10}, 58633ee3b2eSAlexey Dobriyan {"2147483647", 10}, 58733ee3b2eSAlexey Dobriyan {"2147483648", 10}, 58833ee3b2eSAlexey Dobriyan {"2147483649", 10}, 58933ee3b2eSAlexey Dobriyan {"4294967294", 10}, 59033ee3b2eSAlexey Dobriyan {"4294967295", 10}, 59133ee3b2eSAlexey Dobriyan {"4294967296", 10}, 59233ee3b2eSAlexey Dobriyan {"4294967297", 10}, 59333ee3b2eSAlexey Dobriyan {"9223372036854775806", 10}, 59433ee3b2eSAlexey Dobriyan {"9223372036854775807", 10}, 59533ee3b2eSAlexey Dobriyan {"9223372036854775808", 10}, 59633ee3b2eSAlexey Dobriyan {"9223372036854775809", 10}, 59733ee3b2eSAlexey Dobriyan {"18446744073709551614", 10}, 59833ee3b2eSAlexey Dobriyan {"18446744073709551615", 10}, 59933ee3b2eSAlexey Dobriyan {"18446744073709551616", 10}, 60033ee3b2eSAlexey Dobriyan {"18446744073709551617", 10}, 60133ee3b2eSAlexey Dobriyan }; 60233ee3b2eSAlexey Dobriyan TEST_FAIL(kstrtos16, s16, "%hd", test_s16_fail); 60333ee3b2eSAlexey Dobriyan } 60433ee3b2eSAlexey Dobriyan 60533ee3b2eSAlexey Dobriyan static void __init test_kstrtou8_ok(void) 60633ee3b2eSAlexey Dobriyan { 60733ee3b2eSAlexey Dobriyan DECLARE_TEST_OK(u8, struct test_u8); 60833ee3b2eSAlexey Dobriyan static DEFINE_TEST_OK(struct test_u8, test_u8_ok) = { 60933ee3b2eSAlexey Dobriyan {"0", 10, 0}, 61033ee3b2eSAlexey Dobriyan {"1", 10, 1}, 61133ee3b2eSAlexey Dobriyan {"126", 10, 126}, 61233ee3b2eSAlexey Dobriyan {"127", 10, 127}, 61333ee3b2eSAlexey Dobriyan {"128", 10, 128}, 61433ee3b2eSAlexey Dobriyan {"129", 10, 129}, 61533ee3b2eSAlexey Dobriyan {"254", 10, 254}, 61633ee3b2eSAlexey Dobriyan {"255", 10, 255}, 61733ee3b2eSAlexey Dobriyan }; 61833ee3b2eSAlexey Dobriyan TEST_OK(kstrtou8, u8, "%hhu", test_u8_ok); 61933ee3b2eSAlexey Dobriyan } 62033ee3b2eSAlexey Dobriyan 62133ee3b2eSAlexey Dobriyan static void __init test_kstrtou8_fail(void) 62233ee3b2eSAlexey Dobriyan { 62333ee3b2eSAlexey Dobriyan static DEFINE_TEST_FAIL(test_u8_fail) = { 62433ee3b2eSAlexey Dobriyan {"-2", 10}, 62533ee3b2eSAlexey Dobriyan {"-1", 10}, 62633ee3b2eSAlexey Dobriyan {"256", 10}, 62733ee3b2eSAlexey Dobriyan {"257", 10}, 62833ee3b2eSAlexey Dobriyan {"32766", 10}, 62933ee3b2eSAlexey Dobriyan {"32767", 10}, 63033ee3b2eSAlexey Dobriyan {"32768", 10}, 63133ee3b2eSAlexey Dobriyan {"32769", 10}, 63233ee3b2eSAlexey Dobriyan {"65534", 10}, 63333ee3b2eSAlexey Dobriyan {"65535", 10}, 63433ee3b2eSAlexey Dobriyan {"65536", 10}, 63533ee3b2eSAlexey Dobriyan {"65537", 10}, 63633ee3b2eSAlexey Dobriyan {"2147483646", 10}, 63733ee3b2eSAlexey Dobriyan {"2147483647", 10}, 63833ee3b2eSAlexey Dobriyan {"2147483648", 10}, 63933ee3b2eSAlexey Dobriyan {"2147483649", 10}, 64033ee3b2eSAlexey Dobriyan {"4294967294", 10}, 64133ee3b2eSAlexey Dobriyan {"4294967295", 10}, 64233ee3b2eSAlexey Dobriyan {"4294967296", 10}, 64333ee3b2eSAlexey Dobriyan {"4294967297", 10}, 64433ee3b2eSAlexey Dobriyan {"9223372036854775806", 10}, 64533ee3b2eSAlexey Dobriyan {"9223372036854775807", 10}, 64633ee3b2eSAlexey Dobriyan {"9223372036854775808", 10}, 64733ee3b2eSAlexey Dobriyan {"9223372036854775809", 10}, 64833ee3b2eSAlexey Dobriyan {"18446744073709551614", 10}, 64933ee3b2eSAlexey Dobriyan {"18446744073709551615", 10}, 65033ee3b2eSAlexey Dobriyan {"18446744073709551616", 10}, 65133ee3b2eSAlexey Dobriyan {"18446744073709551617", 10}, 65233ee3b2eSAlexey Dobriyan }; 65333ee3b2eSAlexey Dobriyan TEST_FAIL(kstrtou8, u8, "%hhu", test_u8_fail); 65433ee3b2eSAlexey Dobriyan } 65533ee3b2eSAlexey Dobriyan 65633ee3b2eSAlexey Dobriyan static void __init test_kstrtos8_ok(void) 65733ee3b2eSAlexey Dobriyan { 65833ee3b2eSAlexey Dobriyan DECLARE_TEST_OK(s8, struct test_s8); 65933ee3b2eSAlexey Dobriyan static DEFINE_TEST_OK(struct test_s8, test_s8_ok) = { 66033ee3b2eSAlexey Dobriyan {"-128", 10, -128}, 66133ee3b2eSAlexey Dobriyan {"-127", 10, -127}, 66233ee3b2eSAlexey Dobriyan {"-1", 10, -1}, 66333ee3b2eSAlexey Dobriyan {"0", 10, 0}, 66433ee3b2eSAlexey Dobriyan {"1", 10, 1}, 66533ee3b2eSAlexey Dobriyan {"126", 10, 126}, 66633ee3b2eSAlexey Dobriyan {"127", 10, 127}, 66733ee3b2eSAlexey Dobriyan }; 66833ee3b2eSAlexey Dobriyan TEST_OK(kstrtos8, s8, "%hhd", test_s8_ok); 66933ee3b2eSAlexey Dobriyan } 67033ee3b2eSAlexey Dobriyan 67133ee3b2eSAlexey Dobriyan static void __init test_kstrtos8_fail(void) 67233ee3b2eSAlexey Dobriyan { 67333ee3b2eSAlexey Dobriyan static DEFINE_TEST_FAIL(test_s8_fail) = { 67433ee3b2eSAlexey Dobriyan {"-130", 10}, 67533ee3b2eSAlexey Dobriyan {"-129", 10}, 67633ee3b2eSAlexey Dobriyan {"128", 10}, 67733ee3b2eSAlexey Dobriyan {"129", 10}, 67833ee3b2eSAlexey Dobriyan {"254", 10}, 67933ee3b2eSAlexey Dobriyan {"255", 10}, 68033ee3b2eSAlexey Dobriyan {"256", 10}, 68133ee3b2eSAlexey Dobriyan {"257", 10}, 68233ee3b2eSAlexey Dobriyan {"32766", 10}, 68333ee3b2eSAlexey Dobriyan {"32767", 10}, 68433ee3b2eSAlexey Dobriyan {"32768", 10}, 68533ee3b2eSAlexey Dobriyan {"32769", 10}, 68633ee3b2eSAlexey Dobriyan {"65534", 10}, 68733ee3b2eSAlexey Dobriyan {"65535", 10}, 68833ee3b2eSAlexey Dobriyan {"65536", 10}, 68933ee3b2eSAlexey Dobriyan {"65537", 10}, 69033ee3b2eSAlexey Dobriyan {"2147483646", 10}, 69133ee3b2eSAlexey Dobriyan {"2147483647", 10}, 69233ee3b2eSAlexey Dobriyan {"2147483648", 10}, 69333ee3b2eSAlexey Dobriyan {"2147483649", 10}, 69433ee3b2eSAlexey Dobriyan {"4294967294", 10}, 69533ee3b2eSAlexey Dobriyan {"4294967295", 10}, 69633ee3b2eSAlexey Dobriyan {"4294967296", 10}, 69733ee3b2eSAlexey Dobriyan {"4294967297", 10}, 69833ee3b2eSAlexey Dobriyan {"9223372036854775806", 10}, 69933ee3b2eSAlexey Dobriyan {"9223372036854775807", 10}, 70033ee3b2eSAlexey Dobriyan {"9223372036854775808", 10}, 70133ee3b2eSAlexey Dobriyan {"9223372036854775809", 10}, 70233ee3b2eSAlexey Dobriyan {"18446744073709551614", 10}, 70333ee3b2eSAlexey Dobriyan {"18446744073709551615", 10}, 70433ee3b2eSAlexey Dobriyan {"18446744073709551616", 10}, 70533ee3b2eSAlexey Dobriyan {"18446744073709551617", 10}, 70633ee3b2eSAlexey Dobriyan }; 70733ee3b2eSAlexey Dobriyan TEST_FAIL(kstrtos8, s8, "%hhd", test_s8_fail); 70833ee3b2eSAlexey Dobriyan } 70933ee3b2eSAlexey Dobriyan 71033ee3b2eSAlexey Dobriyan static int __init test_kstrtox_init(void) 71133ee3b2eSAlexey Dobriyan { 71233ee3b2eSAlexey Dobriyan test_kstrtoull_ok(); 71333ee3b2eSAlexey Dobriyan test_kstrtoull_fail(); 71433ee3b2eSAlexey Dobriyan test_kstrtoll_ok(); 71533ee3b2eSAlexey Dobriyan test_kstrtoll_fail(); 71633ee3b2eSAlexey Dobriyan 71733ee3b2eSAlexey Dobriyan test_kstrtou64_ok(); 71833ee3b2eSAlexey Dobriyan test_kstrtou64_fail(); 71933ee3b2eSAlexey Dobriyan test_kstrtos64_ok(); 72033ee3b2eSAlexey Dobriyan test_kstrtos64_fail(); 72133ee3b2eSAlexey Dobriyan 72233ee3b2eSAlexey Dobriyan test_kstrtou32_ok(); 72333ee3b2eSAlexey Dobriyan test_kstrtou32_fail(); 72433ee3b2eSAlexey Dobriyan test_kstrtos32_ok(); 72533ee3b2eSAlexey Dobriyan test_kstrtos32_fail(); 72633ee3b2eSAlexey Dobriyan 72733ee3b2eSAlexey Dobriyan test_kstrtou16_ok(); 72833ee3b2eSAlexey Dobriyan test_kstrtou16_fail(); 72933ee3b2eSAlexey Dobriyan test_kstrtos16_ok(); 73033ee3b2eSAlexey Dobriyan test_kstrtos16_fail(); 73133ee3b2eSAlexey Dobriyan 73233ee3b2eSAlexey Dobriyan test_kstrtou8_ok(); 73333ee3b2eSAlexey Dobriyan test_kstrtou8_fail(); 73433ee3b2eSAlexey Dobriyan test_kstrtos8_ok(); 73533ee3b2eSAlexey Dobriyan test_kstrtos8_fail(); 73633ee3b2eSAlexey Dobriyan return -EINVAL; 73733ee3b2eSAlexey Dobriyan } 73833ee3b2eSAlexey Dobriyan module_init(test_kstrtox_init); 73933ee3b2eSAlexey Dobriyan MODULE_LICENSE("Dual BSD/GPL"); 740