123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- #include <stdlib.h>
- #include <stdio.h>
- const char *strings[]={
- /* some simple stuff */
- "0", "1", "10",
- "100", "1000", "10000", "100000", "1000000",
- "10000000", "100000000", "1000000000",
- /* negative */
- "-0", "-1", "-10",
- "-100", "-1000", "-10000", "-100000", "-1000000",
- "-10000000", "-100000000", "-1000000000",
- /* test base>10 */
- "a", "b", "f", "g", "z",
- /* test hex */
- "0x0", "0x1", "0xa", "0xf", "0x10",
- /* test octal */
- "00", "01", "07", "08", "0a", "010",
- /* other */
- "0x8000000",
- /* check overflow cases: (for 32 bit) */
- "2147483645",
- "2147483646",
- "2147483647",
- "2147483648",
- "2147483649",
- "-2147483645",
- "-2147483646",
- "-2147483647",
- "-2147483648",
- "-2147483649",
- "4294967293",
- "4294967294",
- "4294967295",
- "4294967296",
- "4294967297",
- "-4294967293",
- "-4294967294",
- "-4294967295",
- "-4294967296",
- "-4294967297",
- /* bad input tests */
- "",
- "00",
- "0x",
- "0x0",
- "-",
- "+",
- " ",
- " -",
- " - 0",
- };
- int n_tests=sizeof(strings)/sizeof(strings[0]);
- void do_test(int base);
- void do_utest(int base);
- int main(int argc,char *argv[])
- {
- do_test(0);
- do_test(8);
- do_test(10);
- do_test(16);
- do_test(36);
- do_utest(0);
- do_utest(8);
- do_utest(10);
- do_utest(16);
- do_utest(36);
- return 0;
- }
- void do_test(int base)
- {
- int i;
- long n;
- char *endptr;
- for(i=0;i<n_tests;i++){
- n=strtol(strings[i],&endptr,base);
- printf("strtol(\"%s\",%d) len=%lu res=%ld\n",
- strings[i],base,(unsigned long)(endptr-strings[i]),n);
- }
- }
- void do_utest(int base)
- {
- int i;
- unsigned long n;
- char *endptr;
- for(i=0;i<n_tests;i++){
- n=strtoul(strings[i],&endptr,base);
- printf("strtoul(\"%s\",%d) len=%lu res=%lu\n",
- strings[i],base,(unsigned long)(endptr-strings[i]),n);
- }
- }
|