From patchwork Tue May 17 22:52:49 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Paul E. Murphy" X-Patchwork-Id: 12327 X-Patchwork-Delegate: joseph@codesourcery.com Received: (qmail 57336 invoked by alias); 17 May 2016 22:53:09 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 57213 invoked by uid 89); 17 May 2016 22:53:08 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-2.2 required=5.0 tests=AWL, BAYES_00, KAM_LAZY_DOMAIN_SECURITY, RP_MATCHES_RCVD autolearn=ham version=3.3.2 spammy= X-HELO: e19.ny.us.ibm.com X-IBM-Helo: d01dlp02.pok.ibm.com X-IBM-MailFrom: murphyp@linux.vnet.ibm.com X-IBM-RcptTo: libc-alpha@sourceware.org From: "Paul E. Murphy" To: libc-alpha@sourceware.org Subject: [PATCHv2 3/6] Refactor tst-strtod6.c Date: Tue, 17 May 2016 17:52:49 -0500 Message-Id: <20da239a684aa92486370595756f4b072cfb1a28.1463524479.git.murphyp@linux.vnet.ibm.com> In-Reply-To: References: In-Reply-To: References: X-TM-AS-GCONF: 00 X-Content-Scanned: Fidelis XPS MAILER x-cbid: 16051722-0057-0000-0000-000004583524 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused Use the type-generic macros in tst-strtod.h to simplify this test case and enable extension to future variants of this functions. * stdlib/tst-strtod6.c (do_test): Use new type generic invocation of the test function. (test): Refactor into ... [TEST_STRTOD]: New macro base function. --- stdlib/tst-strtod6.c | 99 ++++++++++++++++++---------------------------------- 1 file changed, 34 insertions(+), 65 deletions(-) diff --git a/stdlib/tst-strtod6.c b/stdlib/tst-strtod6.c index 15e79fd..6b3bb84 100644 --- a/stdlib/tst-strtod6.c +++ b/stdlib/tst-strtod6.c @@ -3,83 +3,52 @@ #include #include -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; }