This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[glibc/gabriel/powerpc-ieee128-printscan] ldbl-128ibm-compat: Add tests for strfmon and strfmon_l


https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=03114891dc4763705c2bb207b53920c3597cacb8

commit 03114891dc4763705c2bb207b53920c3597cacb8
Author: Gabriel F. T. Gomes <gabrielftg@linux.ibm.com>
Date:   Thu Jul 11 11:47:56 2019 -0300

    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.

Diff:
---
 sysdeps/ieee754/ldbl-128ibm-compat/Makefile        |  6 +++
 .../ldbl-128ibm-compat/test-strfmon-ibm128.c       |  1 +
 .../ldbl-128ibm-compat/test-strfmon-ieee128.c      |  1 +
 .../ldbl-128ibm-compat/test-strfmon-ldbl-compat.c  | 59 ++++++++++++++++++++++
 4 files changed, 67 insertions(+)

diff --git a/sysdeps/ieee754/ldbl-128ibm-compat/Makefile b/sysdeps/ieee754/ldbl-128ibm-compat/Makefile
index 5501358..955da1d 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 0000000..5d1def8
--- /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 0000000..5d1def8
--- /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 0000000..1338bd8
--- /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>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]