| // RUN: %clangxx -O0 -g %s -o %t && %run %t 2>&1 | FileCheck %s |
| // |
| // UNSUPPORTED: linux, darwin, solaris |
| |
| #define _OPENBSD_SOURCE |
| |
| #include <assert.h> |
| #include <stdio.h> |
| #include <stdlib.h> |
| |
| int main(void) { |
| const char *errstr; |
| |
| printf("strtonum\n"); |
| |
| long long l = strtonum("100", 1, 100, &errstr); |
| assert(!errstr); |
| printf("%lld\n", l); |
| |
| l = strtonum("200", 1, 100, &errstr); |
| assert(errstr); |
| printf("%s\n", errstr); |
| |
| l = strtonum("300", 1000, 1001, &errstr); |
| assert(errstr); |
| printf("%s\n", errstr); |
| |
| l = strtonum("abc", 1000, 1001, &errstr); |
| assert(errstr); |
| printf("%s\n", errstr); |
| |
| l = strtonum("1000", 1001, 1000, &errstr); |
| assert(errstr); |
| printf("%s\n", errstr); |
| |
| l = strtonum("1000abc", 1000, 1001, &errstr); |
| assert(errstr); |
| printf("%s\n", errstr); |
| |
| l = strtonum("1000.0", 1000, 1001, &errstr); |
| assert(errstr); |
| printf("%s\n", errstr); |
| |
| // CHECK: strtonum |
| // CHECK: 100 |
| // CHECK: too large |
| // CHECK: too small |
| // CHECK: invalid |
| // CHECK: invalid |
| // CHECK: invalid |
| // CHECK: invalid |
| |
| return 0; |
| } |