linux/lib/test-kstrtox.c
<<
>>
Prefs
   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