scc

simple c99 compiler
git clone git://git.simple-cc.org/scc
Log | Files | Refs | README | LICENSE

0086-strtol.c (1481B)


      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 	long n;
     19 	char buf[64], *endp;
     20 
     21 	errno = 0;
     22 	n = strtol("1024", NULL, 10);
     23 	assert(n == 1024 && errno == 0);
     24 
     25 	n = strtol("1024", &endp, 10);
     26 	assert(n == 1024 && errno == 0 && *endp == '\0');
     27 
     28 	n = strtol("1000", &endp, 10);
     29 	assert(n == 1000 && errno == 0 && *endp == '\0');
     30 
     31 	n = strtol("1000", &endp, 8);
     32 	assert(n == 512 && errno == 0 && *endp == '\0');
     33 
     34 	n = strtol("1000", &endp, 16);
     35 	assert(n == 4096 && errno == 0 && *endp == '\0');
     36 
     37 	n = strtol("1000", &endp, 0);
     38 	assert(n == 1000 && errno == 0 && *endp == '\0');
     39 
     40 	n = strtol("0x1000", &endp, 0);
     41 	assert(n == 4096 && errno == 0 && *endp == '\0');
     42 
     43 	n = strtol("01000", &endp, 0);
     44 	assert(n == 512 && errno == 0 && *endp == '\0');
     45 
     46 	n = strtol(" +1a", &endp, 0);
     47 	assert(n == 1 && errno == 0 && *endp == 'a');
     48 
     49 	n = strtol(" -1a", &endp, 0);
     50 	assert(n == -1 && errno == 0 && *endp == 'a');
     51 
     52 	sprintf(buf, "%ld", LONG_MAX);
     53 	n = strtol(buf, NULL, 10);
     54 	assert(n == LONG_MAX && errno == 0);
     55 
     56 	sprintf(buf, "%ld", LONG_MIN);
     57 	n = strtol(buf, NULL, 10);
     58 	assert(n == LONG_MIN && errno == 0);
     59 
     60 	n = strtol("9999999999999999999999999", NULL, 10);
     61 	assert(n == LONG_MAX && errno == ERANGE);
     62 
     63 	errno = 0;
     64 	n = strtol("-999999999999999999999999", NULL, 10);
     65 	assert(n == LONG_MIN && errno == ERANGE);
     66 }
     67 
     68 int
     69 main(void)
     70 {
     71 	puts("testing");
     72 	test();
     73 	puts("done");
     74 
     75 	return 0;
     76 }