89 lines
1.7 KiB
C
89 lines
1.7 KiB
C
#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"
|