]>
Commit | Line | Data |
---|---|---|
1873e3cd UD |
1 | #include <locale.h> |
2 | #include <math.h> | |
3 | #include <stdio.h> | |
4 | #include <stdlib.h> | |
5 | ||
b26053dd PM |
6 | #include "tst-strtod.h" |
7 | ||
1873e3cd UD |
8 | static const char *tests[] = |
9 | { | |
10 | "inf", "Inf", "iNf", "inF", "INf", "iNF", "INF", "InF", | |
11 | "infinity", "Infinity", "InfInity", "INFINITY" | |
12 | }; | |
13 | #define ntests (sizeof (tests) / sizeof (tests[0])) | |
14 | ||
bf5eea32 | 15 | #define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF) \ |
b26053dd PM |
16 | static int \ |
17 | test_strto ## FSUF (void) \ | |
18 | { \ | |
19 | int res = 0; \ | |
20 | for (int i = 0; i < ntests; ++i) \ | |
21 | { \ | |
22 | char *endp; \ | |
23 | FTYPE d = strto ## FSUF (tests[i], &endp); \ | |
24 | if (*endp != '\0') \ | |
25 | { \ | |
26 | printf ("did not consume all of '%s'\n", tests[i]); \ | |
27 | res = 1; \ | |
28 | } \ | |
29 | if (!isinf (d)) \ | |
30 | { \ | |
31 | printf ("'%s' does not pass isinf\n", tests[i]); \ | |
32 | res = 1; \ | |
33 | } \ | |
34 | } \ | |
35 | \ | |
36 | return res; \ | |
37 | } | |
38 | ||
39 | GEN_TEST_STRTOD_FOREACH (TEST_STRTOD) | |
40 | ||
1873e3cd UD |
41 | static int |
42 | do_test (void) | |
43 | { | |
44 | /* The Turkish locale is notorious because tolower() maps 'I' to the | |
45 | dotless lowercase 'i' and toupper() maps 'i' to an 'I' with a dot | |
46 | above. */ | |
47 | if (setlocale (LC_ALL, "tr_TR.UTF-8") == NULL) | |
48 | { | |
49 | puts ("cannot set locale"); | |
50 | return 0; | |
51 | } | |
52 | ||
b26053dd | 53 | return STRTOD_TEST_FOREACH (test_strto); |
1873e3cd UD |
54 | } |
55 | ||
56 | #define TEST_FUNCTION do_test () | |
57 | #include "../test-skeleton.c" |