1 #include <math.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <string.h>
5
6 #include "tst-strtod.h"
7
8 #define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF) \
9 static int \
10 test_strto ## FSUF (const char str[]) \
11 { \
12 char *endp; \
13 int result = 0; \
14 puts (str); \
15 FTYPE d = strto ## FSUF (str, &endp); \
16 if (!isnan (d)) \
17 { \
18 puts ("strto" #FSUF " did not return NAN"); \
19 result = 1; \
20 } \
21 if (issignaling (d)) \
22 { \
23 puts ("strto" #FSUF " returned a sNAN"); \
24 result = 1; \
25 } \
26 if (strcmp (endp, "something") != 0) \
27 { \
28 puts ("strto" #FSUF " set incorrect end pointer"); \
29 result = 1; \
30 } \
31 return result; \
32 }
33
34 GEN_TEST_STRTOD_FOREACH (TEST_STRTOD);
35
36 static int
do_test(void)37 do_test (void)
38 {
39 int result = 0;
40
41 result |= STRTOD_TEST_FOREACH (test_strto, "NaN(blabla)something");
42 result |= STRTOD_TEST_FOREACH (test_strto, "NaN(1234)something");
43 /* UINT32_MAX. */
44 result |= STRTOD_TEST_FOREACH (test_strto, "NaN(4294967295)something");
45 /* UINT64_MAX. */
46 result |= STRTOD_TEST_FOREACH (test_strto,
47 "NaN(18446744073709551615)something");
48 /* The case of zero is special in that "something" has to be done to make the
49 mantissa different from zero, which would mean infinity instead of
50 NaN. */
51 result |= STRTOD_TEST_FOREACH (test_strto, "NaN(0)something");
52
53 return result;
54 }
55
56 #define TEST_FUNCTION do_test ()
57 #include "../test-skeleton.c"
58