| #include <math.h> | 
 | #include <stdio.h> | 
 | #include <stdlib.h> | 
 | #include <string.h> | 
 |  | 
 | static int | 
 | test (const char str[]) | 
 | { | 
 |   char *endp; | 
 |   int result = 0; | 
 |  | 
 |   puts (str); | 
 |  | 
 |   double d = strtod (str, &endp); | 
 |   if (!isnan (d)) | 
 |     { | 
 |       puts ("strtod did not return NAN"); | 
 |       result = 1; | 
 |     } | 
 |   if (issignaling (d)) | 
 |     { | 
 |       puts ("strtod returned a sNAN"); | 
 |       result = 1; | 
 |     } | 
 |   if (strcmp (endp, "something") != 0) | 
 |     { | 
 |       puts  ("strtod set incorrect end pointer"); | 
 |       result = 1; | 
 |     } | 
 |  | 
 |   float f = strtof (str, &endp); | 
 |   if (!isnanf (f)) | 
 |     { | 
 |       puts ("strtof did not return NAN"); | 
 |       result = 1; | 
 |     } | 
 |   if (issignaling (f)) | 
 |     { | 
 |       puts ("strtof returned a sNAN"); | 
 |       result = 1; | 
 |     } | 
 |   if (strcmp (endp, "something") != 0) | 
 |     { | 
 |       puts  ("strtof set incorrect end pointer"); | 
 |       result = 1; | 
 |     } | 
 |  | 
 |   long double ld = strtold (str, &endp); | 
 |   if (!isnan (ld)) | 
 |     { | 
 |       puts ("strtold did not return NAN"); | 
 |       result = 1; | 
 |     } | 
 |   if (issignaling (ld)) | 
 |     { | 
 |       puts ("strtold returned a sNAN"); | 
 |       result = 1; | 
 |     } | 
 |   if (strcmp (endp, "something") != 0) | 
 |     { | 
 |       puts  ("strtold set incorrect end pointer"); | 
 |       result = 1; | 
 |     } | 
 |  | 
 |   return result; | 
 | } | 
 |  | 
 | static int | 
 | do_test (void) | 
 | { | 
 |   int result = 0; | 
 |  | 
 |   result |= test ("NaN(blabla)something"); | 
 |   result |= test ("NaN(1234)something"); | 
 |   /* UINT32_MAX.  */ | 
 |   result |= test ("NaN(4294967295)something"); | 
 |   /* UINT64_MAX.  */ | 
 |   result |= test ("NaN(18446744073709551615)something"); | 
 |   /* The case of zero is special in that "something" has to be done to make the | 
 |      mantissa different from zero, which would mean infinity instead of | 
 |      NaN.  */ | 
 |   result |= test ("NaN(0)something"); | 
 |  | 
 |   return result; | 
 | } | 
 |  | 
 | #define TEST_FUNCTION do_test () | 
 | #include "../test-skeleton.c" |