blob: 15e79fddfbc0d837ad2123ea1de835908487a22c [file] [log] [blame]
lh9ed821d2023-04-07 01:36:19 -07001#include <math.h>
2#include <stdio.h>
3#include <stdlib.h>
4#include <string.h>
5
6static int
7test (const char str[])
8{
9 char *endp;
10 int result = 0;
11
12 puts (str);
13
14 double d = strtod (str, &endp);
15 if (!isnan (d))
16 {
17 puts ("strtod did not return NAN");
18 result = 1;
19 }
20 if (issignaling (d))
21 {
22 puts ("strtod returned a sNAN");
23 result = 1;
24 }
25 if (strcmp (endp, "something") != 0)
26 {
27 puts ("strtod set incorrect end pointer");
28 result = 1;
29 }
30
31 float f = strtof (str, &endp);
32 if (!isnanf (f))
33 {
34 puts ("strtof did not return NAN");
35 result = 1;
36 }
37 if (issignaling (f))
38 {
39 puts ("strtof returned a sNAN");
40 result = 1;
41 }
42 if (strcmp (endp, "something") != 0)
43 {
44 puts ("strtof set incorrect end pointer");
45 result = 1;
46 }
47
48 long double ld = strtold (str, &endp);
49 if (!isnan (ld))
50 {
51 puts ("strtold did not return NAN");
52 result = 1;
53 }
54 if (issignaling (ld))
55 {
56 puts ("strtold returned a sNAN");
57 result = 1;
58 }
59 if (strcmp (endp, "something") != 0)
60 {
61 puts ("strtold set incorrect end pointer");
62 result = 1;
63 }
64
65 return result;
66}
67
68static int
69do_test (void)
70{
71 int result = 0;
72
73 result |= test ("NaN(blabla)something");
74 result |= test ("NaN(1234)something");
75 /* UINT32_MAX. */
76 result |= test ("NaN(4294967295)something");
77 /* UINT64_MAX. */
78 result |= test ("NaN(18446744073709551615)something");
79 /* The case of zero is special in that "something" has to be done to make the
80 mantissa different from zero, which would mean infinity instead of
81 NaN. */
82 result |= test ("NaN(0)something");
83
84 return result;
85}
86
87#define TEST_FUNCTION do_test ()
88#include "../test-skeleton.c"