0088-stroul.c (1508B)
1 #include <assert.h> 2 #include <errno.h> 3 #include <limits.h> 4 #include <stdio.h> 5 #include <stdlib.h> 6 7 /* 8 output: 9 testing 10 done 11 end: 12 */ 13 14 15 int 16 test(void) 17 { 18 unsigned long n; 19 char buf[64], *endp; 20 21 errno = 0; 22 n = strtoul("1024", NULL, 10); 23 assert(n == 1024 && errno == 0); 24 25 n = strtoul("1024", &endp, 10); 26 assert(n == 1024 && errno == 0 && *endp == '\0'); 27 28 n = strtoul("1000", &endp, 10); 29 assert(n == 1000 && errno == 0 && *endp == '\0'); 30 31 n = strtoul("1000", &endp, 8); 32 assert(n == 512 && errno == 0 && *endp == '\0'); 33 34 n = strtoul("1000", &endp, 16); 35 assert(n == 4096 && errno == 0 && *endp == '\0'); 36 37 n = strtoul("1000", &endp, 0); 38 assert(n == 1000 && errno == 0 && *endp == '\0'); 39 40 n = strtoul("0x1000", &endp, 0); 41 assert(n == 4096 && errno == 0 && *endp == '\0'); 42 43 n = strtoul("01000", &endp, 0); 44 assert(n == 512 && errno == 0 && *endp == '\0'); 45 46 n = strtoul(" +1a", &endp, 0); 47 assert(n == 1 && errno == 0 && *endp == 'a'); 48 49 n = strtoul(" -1a", &endp, 0); 50 assert(n == -1 && errno == 0 && *endp == 'a'); 51 52 sprintf(buf, "%lu", ULONG_MAX); 53 n = strtoul(buf, NULL, 10); 54 assert(n == ULONG_MAX && errno == 0); 55 56 sprintf(buf, "%ld", LONG_MIN); 57 n = strtoul(buf, NULL, 10); 58 assert(n == LONG_MIN && errno == 0); 59 60 n = strtoul("9999999999999999999999999", NULL, 10); 61 assert(n == ULONG_MAX && errno == ERANGE); 62 63 errno = 0; 64 n = strtoul("-999999999999999999999999", NULL, 10); 65 assert(n == ULONG_MAX && errno == ERANGE); 66 } 67 68 int 69 main(void) 70 { 71 puts("testing"); 72 test(); 73 puts("done"); 74 75 return 0; 76 }