mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-24 03:31:07 +00:00
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:
parent
66fa30828a
commit
80a19b003e
@ -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.
|
||||
|
1
sysdeps/ieee754/ldbl-128ibm-compat/test-strfmon-ibm128.c
Normal file
1
sysdeps/ieee754/ldbl-128ibm-compat/test-strfmon-ibm128.c
Normal file
@ -0,0 +1 @@
|
||||
#include <test-strfmon-ldbl-compat.c>
|
@ -0,0 +1 @@
|
||||
#include <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
|
||||
<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>
|
Loading…
Reference in New Issue
Block a user