From patchwork Tue Oct 15 19:05:15 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Gabriel F. T. Gomes" X-Patchwork-Id: 35006 Received: (qmail 108127 invoked by alias); 15 Oct 2019 19:07:21 -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 108048 invoked by uid 89); 15 Oct 2019 19:07:21 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-22.7 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_SHORT, RCVD_IN_DNSWL_NONE, UNSUBSCRIBE_BODY autolearn=ham version=3.3.1 spammy=currency X-HELO: smtpout1.mo528.mail-out.ovh.net From: "Gabriel F. T. Gomes" To: Subject: [PATCH 17/31] ldbl-128ibm-compat: Add tests for strfmon and strfmon_l Date: Tue, 15 Oct 2019 16:05:15 -0300 Message-ID: <20191015190529.11559-18-gabriel@inconstante.net.br> In-Reply-To: <20191015190529.11559-1-gabriel@inconstante.net.br> References: <20191015190529.11559-1-gabriel@inconstante.net.br> MIME-Version: 1.0 X-Ovh-Tracer-Id: 1793840026815811267 X-VR-SPAMSTATE: OK X-VR-SPAMSCORE: 0 X-VR-SPAMCAUSE: gggruggvucftvghtrhhoucdtuddrgedufedrjeefgddufeefucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecuqfggjfdpvefjgfevmfevgfenuceurghilhhouhhtmecuhedttdenuc From: "Gabriel F. T. Gomes" This patch adds elementary tests to check that strfmon and strfmon_l correctly evaluate long double values with IBM Extended Precision and IEEE binary128 format. Tested for powerpc64le. --- sysdeps/ieee754/ldbl-128ibm-compat/Makefile | 6 ++ .../ldbl-128ibm-compat/test-strfmon-ibm128.c | 1 + .../ldbl-128ibm-compat/test-strfmon-ieee128.c | 1 + .../test-strfmon-ldbl-compat.c | 59 +++++++++++++++++++ 4 files changed, 67 insertions(+) create mode 100644 sysdeps/ieee754/ldbl-128ibm-compat/test-strfmon-ibm128.c create mode 100644 sysdeps/ieee754/ldbl-128ibm-compat/test-strfmon-ieee128.c create mode 100644 sysdeps/ieee754/ldbl-128ibm-compat/test-strfmon-ldbl-compat.c diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/Makefile b/sysdeps/ieee754/ldbl-128ibm-compat/Makefile index 550135847a..955da1d1ee 100644 --- a/sysdeps/ieee754/ldbl-128ibm-compat/Makefile +++ b/sysdeps/ieee754/ldbl-128ibm-compat/Makefile @@ -281,6 +281,12 @@ ldbl-extra-routines += strfmon strfmon_l # Also, guarantee that they are compiled in IBM long double mode. CFLAGS-strfmon.c += -mfloat128 -mabi=ibmlongdouble CFLAGS-strfmon_l.c += -mfloat128 -mabi=ibmlongdouble + +tests-internal += test-strfmon-ibm128 test-strfmon-ieee128 +CFLAGS-test-strfmon-ibm128.c += -mabi=ibmlongdouble -Wno-psabi +CFLAGS-test-strfmon-ieee128.c += -mfloat128 -mabi=ieeelongdouble -Wno-psabi +$(objpfx)tst-strfmon-ibm128.out: $(gen-locales) +$(objpfx)tst-strfmon-ieee128.out: $(gen-locales) endif # Add IEEE binary128 files as make targets. diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/test-strfmon-ibm128.c b/sysdeps/ieee754/ldbl-128ibm-compat/test-strfmon-ibm128.c new file mode 100644 index 0000000000..5d1def86af --- /dev/null +++ b/sysdeps/ieee754/ldbl-128ibm-compat/test-strfmon-ibm128.c @@ -0,0 +1 @@ +#include diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/test-strfmon-ieee128.c b/sysdeps/ieee754/ldbl-128ibm-compat/test-strfmon-ieee128.c new file mode 100644 index 0000000000..5d1def86af --- /dev/null +++ b/sysdeps/ieee754/ldbl-128ibm-compat/test-strfmon-ieee128.c @@ -0,0 +1 @@ +#include diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/test-strfmon-ldbl-compat.c b/sysdeps/ieee754/ldbl-128ibm-compat/test-strfmon-ldbl-compat.c new file mode 100644 index 0000000000..1338bd8493 --- /dev/null +++ b/sysdeps/ieee754/ldbl-128ibm-compat/test-strfmon-ldbl-compat.c @@ -0,0 +1,59 @@ +/* Test for the long double variants of strfmon* functions. + Copyright (C) 2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include +#include + +#include + +static int +do_test (void) +{ + size_t written; + char buffer[64]; + char *bufptr = buffer; + locale_t loc; + + /* Using the C locale is enough for the purpose of this test case, + i.e.: to test that strfmon correctly reads long double values with + binary128 format. Grouping and currency are irrelevant, here. */ + setlocale (LC_MONETARY, "C"); + loc = newlocale (LC_MONETARY_MASK, "C", (locale_t) 0); + + /* Write to the buffer. */ + written = strfmon (bufptr, 32, "%.10i, %.10Li\n", + (double) -2, (long double) -1); + if (written < 0) + support_record_failure (); + else + bufptr += written; + written = strfmon_l (bufptr, 32, loc, "%.10i, %.10Li\n", + (double) -2, (long double) -1); + if (written < 0) + support_record_failure (); + + /* Compare against the expected output. */ + const char *expected = + "-2.0000000000, -1.0000000000\n" + "-2.0000000000, -1.0000000000\n"; + TEST_COMPARE_STRING (expected, buffer); + + return 0; +} + +#include