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