1#include <locale.h>
2#include <math.h>
3#include <stdio.h>
4#include <stdlib.h>
5
6#include "tst-strtod.h"
7
8static 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
15#define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF) \
16static int \
17test_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
39GEN_TEST_STRTOD_FOREACH (TEST_STRTOD)
40
41static int
42do_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 (s: "cannot set locale");
50 return 0;
51 }
52
53 return STRTOD_TEST_FOREACH (test_strto);
54}
55
56#define TEST_FUNCTION do_test ()
57#include "../test-skeleton.c"
58

source code of glibc/stdlib/bug-strtod2.c