diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | stdlib/tst-strtod6.c | 99 |
2 files changed, 41 insertions, 65 deletions
@@ -1,5 +1,12 @@ 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 ... (TEST_STRTOD): New macro. (TEST_FUNCTION): Redefine to use STRTOD_TEST_FOREACH diff --git a/stdlib/tst-strtod6.c b/stdlib/tst-strtod6.c index 15e79fddfb..6b3bb8404e 100644 --- a/stdlib/tst-strtod6.c +++ b/stdlib/tst-strtod6.c @@ -3,83 +3,52 @@ #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; +#include "tst-strtod.h" + +#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; } |