mirror of
https://sourceware.org/git/glibc.git
synced 2025-08-08 17:42:12 +03: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:
@@ -224,6 +224,12 @@ ldbl-extra-routines += strfmon strfmon_l
|
|||||||
# Also, guarantee that they are compiled in IBM long double mode.
|
# Also, guarantee that they are compiled in IBM long double mode.
|
||||||
CFLAGS-strfmon.c += -mfloat128 -mabi=ibmlongdouble
|
CFLAGS-strfmon.c += -mfloat128 -mabi=ibmlongdouble
|
||||||
CFLAGS-strfmon_l.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
|
endif
|
||||||
|
|
||||||
# Add IEEE binary128 files as make targets.
|
# 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>
|
Reference in New Issue
Block a user