1#include <assert.h>2#include <errno.h>3#include <limits.h>4#include <stdio.h>5#include <stdlib.h>67/*8output:9testing10done11end:12*/131415int16test(void)17{18 unsigned long n;19 char buf[64], *endp;2021 errno = 0;22 n = strtoul("1024", NULL, 10);23 assert(n == 1024 && errno == 0);2425 n = strtoul("1024", &endp, 10);26 assert(n == 1024 && errno == 0 && *endp == '\0');2728 n = strtoul("1000", &endp, 10);29 assert(n == 1000 && errno == 0 && *endp == '\0');3031 n = strtoul("1000", &endp, 8);32 assert(n == 512 && errno == 0 && *endp == '\0');3334 n = strtoul("1000", &endp, 16);35 assert(n == 4096 && errno == 0 && *endp == '\0');3637 n = strtoul("1000", &endp, 0);38 assert(n == 1000 && errno == 0 && *endp == '\0');3940 n = strtoul("0x1000", &endp, 0);41 assert(n == 4096 && errno == 0 && *endp == '\0');4243 n = strtoul("01000", &endp, 0);44 assert(n == 512 && errno == 0 && *endp == '\0');4546 n = strtoul(" +1a", &endp, 0);47 assert(n == 1 && errno == 0 && *endp == 'a');4849 n = strtoul(" -1a", &endp, 0);50 assert(n == -1 && errno == 0 && *endp == 'a');5152 sprintf(buf, "%lu", ULONG_MAX);53 n = strtoul(buf, NULL, 10);54 assert(n == ULONG_MAX && errno == 0);5556 sprintf(buf, "%ld", LONG_MIN);57 n = strtoul(buf, NULL, 10);58 assert(n == LONG_MIN && errno == 0);5960 n = strtoul("9999999999999999999999999", NULL, 10);61 assert(n == ULONG_MAX && errno == ERANGE);6263 errno = 0;64 n = strtoul("-999999999999999999999999", NULL, 10);65 assert(n == ULONG_MAX && errno == ERANGE);66}6768int69main(void)70{71 puts("testing");72 test();73 puts("done");7475 return 0;76}