Refactor strtod tests

This patch changes strtod* tests to use strfrom* functions.
This commit is contained in:
Rajalakshmi Srinivasaraghavan 2016-08-30 11:43:21 +05:30 committed by Gabriel F. T. Gomes
parent 6962682ffe
commit bf5eea32ac
6 changed files with 27 additions and 22 deletions

View File

@ -1,3 +1,11 @@
2016-10-25 Rajalakshmi Srinivasaraghavan <raji@linux.vnet.ibm.com>
* stdlib/bug-strtod.c: Refactor based on GEN_TEST_STRTOD_FOREACH.
* stdlib/bug-strtod2.c: Likewise.
* stdlib/tst-strtod-round-skeleton.c: Likewise.
* stdlib/tst-strtod6.c: Likewise.
* stdlib/tst-strtod.h (GEN_TEST_STRTOD_FOREACH): Use strfrom.
2016-10-25 Gabriel F. T. Gomes <gftg@linux.vnet.ibm.com> 2016-10-25 Gabriel F. T. Gomes <gftg@linux.vnet.ibm.com>
* NEWS: Mention the addition of strfromd, strfromf, and strfroml. * NEWS: Mention the addition of strfromd, strfromf, and strfroml.

View File

@ -23,7 +23,7 @@
#include "tst-strtod.h" #include "tst-strtod.h"
#define TEST_STRTOD(FSUF, FTYPE, FTOSTR, FTOSTRM, LSUF, CSUF) \ #define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF) \
static int \ static int \
test_strto ## FSUF (void) \ test_strto ## FSUF (void) \
{ \ { \
@ -45,8 +45,8 @@ test_strto ## FSUF (void) \
{ \ { \
char fstr[FSTRLENMAX]; \ char fstr[FSTRLENMAX]; \
char fcntstr[FSTRLENMAX]; \ char fcntstr[FSTRLENMAX]; \
FTOSTR (fstr, sizeof (fstr), "%" FTOSTRM "g", f); \ FTOSTR (fstr, sizeof (fstr), "%g", f); \
FTOSTR (fcntstr, sizeof (fstr), "%" FTOSTRM "g", (FTYPE) cnt); \ FTOSTR (fcntstr, sizeof (fstr), "%g", (FTYPE) cnt); \
printf ("strto" #FSUF "(\"%s\") " \ printf ("strto" #FSUF "(\"%s\") " \
"failed for cnt == %d (%s instead of %s)\n", \ "failed for cnt == %d (%s instead of %s)\n", \
buf, cnt, fstr, fcntstr); \ buf, cnt, fstr, fcntstr); \

View File

@ -12,7 +12,7 @@ static const char *tests[] =
}; };
#define ntests (sizeof (tests) / sizeof (tests[0])) #define ntests (sizeof (tests) / sizeof (tests[0]))
#define TEST_STRTOD(FSUF, FTYPE, FTOSTR, FTOSTRM, LSUF, CSUF) \ #define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF) \
static int \ static int \
test_strto ## FSUF (void) \ test_strto ## FSUF (void) \
{ \ { \

View File

@ -58,11 +58,11 @@
/* Generator to create an FTYPE member variabled named FSUF /* Generator to create an FTYPE member variabled named FSUF
used to populate struct member variables. */ used to populate struct member variables. */
#define FTYPE_MEMBER(FSUF, FTYPE, FTOSTR, FTOSTRM, LSUF, CSUF) \ #define FTYPE_MEMBER(FSUF, FTYPE, FTOSTR, LSUF, CSUF) \
FTYPE FSUF; FTYPE FSUF;
/* Likewise, but each member is of type bool. */ /* Likewise, but each member is of type bool. */
#define BOOL_MEMBER(FSUF, FTYPE, FTOSTR, FTOSTRM, LSUF, CSUF) \ #define BOOL_MEMBER(FSUF, FTYPE, FTOSTR, LSUF, CSUF) \
bool FSUF; bool FSUF;
#define STRUCT_FOREACH_FLOAT_FTYPE GEN_TEST_STRTOD_FOREACH (FTYPE_MEMBER) #define STRUCT_FOREACH_FLOAT_FTYPE GEN_TEST_STRTOD_FOREACH (FTYPE_MEMBER)
@ -96,13 +96,13 @@
/* long double is special, and handled above. */ /* long double is special, and handled above. */
/* Selector for expected result field of a given type. */ /* Selector for expected result field of a given type. */
#define _ENTRY(FSUF, FTYPE, FTOSTR, FTOSTRM, LSUF, CSUF, ...) \ #define _ENTRY(FSUF, FTYPE, FTOSTR, LSUF, CSUF, ...) \
CONCAT (CHOOSE_ ## FSUF (__VA_ARGS__), LSUF), CONCAT (CHOOSE_ ## FSUF (__VA_ARGS__), LSUF),
#define ENTRY(...) \ #define ENTRY(...) \
GEN_TEST_STRTOD_FOREACH (_ENTRY, __VA_ARGS__) GEN_TEST_STRTOD_FOREACH (_ENTRY, __VA_ARGS__)
/* Selector for boolean exact tag of expected results. */ /* Selector for boolean exact tag of expected results. */
#define _XNTRY(FSUF, FTYPE, FTOSTR, FTOSTRM, LSUF, CSUF, ...) \ #define _XNTRY(FSUF, FTYPE, FTOSTR, LSUF, CSUF, ...) \
CHOOSE_ ## FSUF (__VA_ARGS__), CHOOSE_ ## FSUF (__VA_ARGS__),
#define XNTRY(...) \ #define XNTRY(...) \
GEN_TEST_STRTOD_FOREACH (_XNTRY, __VA_ARGS__) GEN_TEST_STRTOD_FOREACH (_XNTRY, __VA_ARGS__)
@ -157,21 +157,19 @@ struct test {
#define STR(x) STRX (x) #define STR(x) STRX (x)
#define FNPFXS STR (FNPFX) #define FNPFXS STR (FNPFX)
#define GEN_ONE_TEST(FSUF, FTYPE, FTOSTR, FTOSTRM, LSUF, CSUF) \ #define GEN_ONE_TEST(FSUF, FTYPE, FTOSTR, LSUF, CSUF) \
{ \ { \
FTYPE f = STRTO (FSUF) (s, NULL); \ FTYPE f = STRTO (FSUF) (s, NULL); \
if (f != expected->FSUF \ if (f != expected->FSUF \
|| (copysign ## CSUF) (1.0 ## LSUF, f) \ || (copysign ## CSUF) (1.0 ## LSUF, f) \
!= (copysign ## CSUF) (1.0 ## LSUF, expected->FSUF)) \ != (copysign ## CSUF) (1.0 ## LSUF, expected->FSUF)) \
{ \ { \
CHAR efstr[FSTRLENMAX]; \ char efstr[FSTRLENMAX]; \
CHAR fstr[FSTRLENMAX]; \ char fstr[FSTRLENMAX]; \
FTOSTR (efstr, FSTRLENMAX, L_("%") L_(FTOSTRM) L_("a"), \ FTOSTR (efstr, FSTRLENMAX, "%a", expected->FSUF); \
expected->FSUF); \ FTOSTR (fstr, FSTRLENMAX, "%a", f); \
FTOSTR (fstr, FSTRLENMAX, L_("%") L_(FTOSTRM) L_("a"), f);\ printf (FNPFXS "to" #FSUF " (" STRM ") returned %s not " \
printf (FNPFXS "to" #FSUF " (" STRM ") returned " STRM \ "%s (%s)\n", s, fstr, efstr, mode_name); \
" not " STRM " (%s)\n", \
s, fstr, efstr, mode_name); \
if (ROUNDING_TESTS (FTYPE, rnd_mode) || exact->FSUF) \ if (ROUNDING_TESTS (FTYPE, rnd_mode) || exact->FSUF) \
result = 1; \ result = 1; \
else \ else \

View File

@ -23,14 +23,13 @@
/* Splat n variants of the same test for the various strtod functions. */ /* Splat n variants of the same test for the various strtod functions. */
#define GEN_TEST_STRTOD_FOREACH(mfunc, ...) \ #define GEN_TEST_STRTOD_FOREACH(mfunc, ...) \
mfunc ( f, float, snprintf, "", f, f, ##__VA_ARGS__) \ mfunc ( f, float, strfromf, f, f, ##__VA_ARGS__) \
mfunc ( d, double, snprintf, "", , , ##__VA_ARGS__) \ mfunc ( d, double, strfromd, , , ##__VA_ARGS__) \
mfunc ( ld, long double, snprintf, "L", L, l, ##__VA_ARGS__) mfunc ( ld, long double, strfroml, L, l, ##__VA_ARGS__)
/* The arguments to the generated macros are: /* The arguments to the generated macros are:
FSUF - Function suffix FSUF - Function suffix
FTYPE - float type FTYPE - float type
FTOSTR - float to string func FTOSTR - float to string func
FTOSTRM - Optional modifier for FTOSTR format
LSUF - Literal suffix LSUF - Literal suffix
CSUF - C standardish suffix for many of the math functions CSUF - C standardish suffix for many of the math functions
*/ */

View File

@ -5,7 +5,7 @@
#include "tst-strtod.h" #include "tst-strtod.h"
#define TEST_STRTOD(FSUF, FTYPE, FTOSTR, FTOSTRM, LSUF, CSUF) \ #define TEST_STRTOD(FSUF, FTYPE, FTOSTR, LSUF, CSUF) \
static int \ static int \
test_strto ## FSUF (const char str[]) \ test_strto ## FSUF (const char str[]) \
{ \ { \