ldbl-128ibm-compat: Add tests for strfmon and strfmon_l

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.

Reviewed-by: Paul E. Murphy <murphyp@linux.ibm.com>
This commit is contained in:
Gabriel F. T. Gomes 2019-07-11 11:47:56 -03:00
parent 66fa30828a
commit 80a19b003e
4 changed files with 67 additions and 0 deletions

View File

@ -224,6 +224,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.

View File

@ -0,0 +1 @@
#include <test-strfmon-ldbl-compat.c>

View File

@ -0,0 +1 @@
#include <test-strfmon-ldbl-compat.c>

View File

@ -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
<https://www.gnu.org/licenses/>. */
#include <locale/locale.h>
#include <monetary.h>
#include <support/check.h>
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 <support/test-driver.c>