Refactor tst-strtod6.c

Use the type-generic macros in tst-strtod.h to simplify this
test case and enable extension to future variants of this
functions.
This commit is contained in:
Paul E. Murphy 2016-05-09 14:20:17 -05:00
parent b26053dd9a
commit db1fa6b8d3
2 changed files with 40 additions and 64 deletions

View File

@ -1,3 +1,10 @@
2016-05-23 Paul E. Murphy <murphyp@linux.vnet.ibm.com>
* stdlib/tst-strtod6.c (do_test): Use new type generic
invocation of the test function.
(test): Refactor into ...
(TEST_STRTOD): New macro base function.
2016-05-23 Paul E. Murphy <murphyp@linux.vnet.ibm.com>
* stdlib/bug-strtod2.c (do_test): Refactor strtod usage into ...

View File

@ -3,83 +3,52 @@
#include <stdlib.h>
#include <string.h>
static int
test (const char str[])
{
char *endp;
int result = 0;
#include "tst-strtod.h"
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;
#define TEST_STRTOD(FSUF, FTYPE, FTOSTR, FTOSTRM, LSUF, CSUF) \
static int \
test_strto ## FSUF (const char str[]) \
{ \
char *endp; \
int result = 0; \
puts (str); \
FTYPE d = strto ## FSUF (str, &endp); \
if (!isnan (d)) \
{ \
puts ("strto" #FSUF " did not return NAN"); \
result = 1; \
} \
if (issignaling (d)) \
{ \
puts ("strto" #FSUF " returned a sNAN"); \
result = 1; \
} \
if (strcmp (endp, "something") != 0) \
{ \
puts ("strto" #FSUF " set incorrect end pointer"); \
result = 1; \
} \
return result; \
}
GEN_TEST_STRTOD_FOREACH (TEST_STRTOD);
static int
do_test (void)
{
int result = 0;
result |= test ("NaN(blabla)something");
result |= test ("NaN(1234)something");
result |= STRTOD_TEST_FOREACH (test_strto, "NaN(blabla)something");
result |= STRTOD_TEST_FOREACH (test_strto, "NaN(1234)something");
/* UINT32_MAX. */
result |= test ("NaN(4294967295)something");
result |= STRTOD_TEST_FOREACH (test_strto, "NaN(4294967295)something");
/* UINT64_MAX. */
result |= test ("NaN(18446744073709551615)something");
result |= STRTOD_TEST_FOREACH (test_strto,
"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");
result |= STRTOD_TEST_FOREACH (test_strto, "NaN(0)something");
return result;
}