mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-23 17:53:37 +08:00
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:
parent
b26053dd9a
commit
db1fa6b8d3
@ -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 ...
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user