diff options
author | Paul E. Murphy <murphyp@linux.vnet.ibm.com> | 2016-05-09 14:20:17 -0500 |
---|---|---|
committer | Paul E. Murphy <murphyp@linux.vnet.ibm.com> | 2016-05-23 14:13:11 -0500 |
commit | db1fa6b8d32a0c7155dcaed2f5f9388511613595 (patch) | |
tree | 0ea33692d9ab45a665b8d820a764530d6e81ea87 /stdlib/tst-strtod6.c | |
parent | b26053dd9a0170b58bb01226056e3140b1fb9911 (diff) | |
download | glibc-db1fa6b8d32a0c7155dcaed2f5f9388511613595.tar.gz glibc-db1fa6b8d32a0c7155dcaed2f5f9388511613595.tar.xz glibc-db1fa6b8d32a0c7155dcaed2f5f9388511613595.zip |
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.
Diffstat (limited to 'stdlib/tst-strtod6.c')
-rw-r--r-- | stdlib/tst-strtod6.c | 99 |
1 files changed, 34 insertions, 65 deletions
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; } |