This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PATCH v2 17/30] ldbl-128ibm-compat: Add tests for strfmon and strfmon_l
- From: "Gabriel F. T. Gomes" <gabriel at inconstante dot net dot br>
- To: <libc-alpha at sourceware dot org>
- Date: Fri, 25 Oct 2019 12:33:57 -0300
- Subject: [PATCH v2 17/30] ldbl-128ibm-compat: Add tests for strfmon and strfmon_l
- References: <20191025153410.15405-1-gabriel@inconstante.net.br>
From: "Gabriel F. T. Gomes" <gabrielftg@linux.ibm.com>
No changes since v1.
-- 8< --
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 bea3823d1c..83c2c43ea4 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 <test-strfmon-ldbl-compat.c>
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 <test-strfmon-ldbl-compat.c>
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
+ <http://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>
--
2.21.0