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]

GNU C Library master sources branch master updated. glibc-2.28.9000-394-gbd51ff5


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  bd51ff5ed0538c434d883cb8b90f8fba5f84236b (commit)
      from  268bb71e475d7e40fad83313be0eeb173e599c92 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=bd51ff5ed0538c434d883cb8b90f8fba5f84236b

commit bd51ff5ed0538c434d883cb8b90f8fba5f84236b
Author: Gabriel F. T. Gomes <gabriel@inconstante.eti.br>
Date:   Tue Oct 30 15:04:18 2018 -0300

    Add tests for the long double version of ecvt and fcvt
    
    The test case misc/tst-efgcvt.c only tests the double variants of the
    Old-fashioned System V number-to-string functions: ecvt, fcvt, and their
    re-entrant counterparts.  With a few macros, the code can be reused for
    the long double versions of these functions.  A future patch will reuse
    it again for IEEE long double on powerpc64le.
    
    Tested for powerpc and powerpc64le.

diff --git a/ChangeLog b/ChangeLog
index 980f8cb..161d133 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+2018-12-14  Gabriel F. T. Gomes  <gabriel@inconstante.eti.br>
+
+	* misc/Makefile (tests): Remove tst-efgcvt.  Add tst-dbl-efgcvt
+	and tst-ldbl-efgcvt.
+	* misc/tst-efgcvt.c: Renamed to misc/tst-efgcvt-template.c.
+	* misc/tst-efgcvt-template.c: Renamed from misc/tst-efgcvt.c.
+	(struct testcase, efcvt_func, efcvt_r_func, ecvt_tests)
+	(fcvt_tests, output_error, output_r_error, do_test): Use the
+	macros defined in tst-dbl-efgcvt.c and tst-ldbl-efgcvt.c to:
+	select the type of floating-point variables and arguments; to
+	produce extra tests for double and conversion specifiers for
+	printf; and to set the names of called functions.
+	* misc/tst-dbl-efgcvt.c: New file that defines the macros used
+	in tst-efgcvt-template.c.
+	* misc/tst-ldbl-efgcvt.c: Likewise.
+
 2018-12-14  Stefan Liebler  <stli@linux.ibm.com>
 
 	* nss/Makefile (tst-nss-test3.out): New rule.
diff --git a/misc/Makefile b/misc/Makefile
index c2c9994..cf3726b 100644
--- a/misc/Makefile
+++ b/misc/Makefile
@@ -80,12 +80,12 @@ aux := init-misc
 install-lib := libg.a
 gpl2lgpl := error.c error.h
 
-tests := tst-dirname tst-tsearch tst-fdset tst-efgcvt tst-mntent tst-hsearch \
+tests := tst-dirname tst-tsearch tst-fdset tst-mntent tst-hsearch \
 	 tst-error1 tst-pselect tst-insremque tst-mntent2 bug-hsearch1 \
 	 tst-mntent-blank-corrupt tst-mntent-blank-passno bug18240 \
 	 tst-preadvwritev tst-preadvwritev64 tst-makedev tst-empty \
 	 tst-preadvwritev2 tst-preadvwritev64v2 tst-warn-wide \
-	 tst-ldbl-warn tst-ldbl-error
+	 tst-ldbl-warn tst-ldbl-error tst-dbl-efgcvt tst-ldbl-efgcvt
 
 # Tests which need libdl.
 ifeq (yes,$(build-shared))
diff --git a/misc/tst-dbl-efgcvt.c b/misc/tst-dbl-efgcvt.c
new file mode 100644
index 0000000..78accad
--- /dev/null
+++ b/misc/tst-dbl-efgcvt.c
@@ -0,0 +1,36 @@
+/* Tests for *cvt function, double version.
+   Copyright (C) 1998-2018 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 <float.h>
+
+#define ECVT ecvt
+#define FCVT fcvt
+#define ECVT_R ecvt_r
+#define FCVT_R fcvt_r
+#define FLOAT double
+#define PRINTF_CONVERSION "%f"
+
+#if DBL_MANT_DIG == 53
+# define EXTRA_ECVT_TESTS \
+  { 0x1p-1074, 3, -323, "494" }, \
+  { -0x1p-1074, 3, -323, "494" },
+#else
+# define EXTRA_ECVT_TESTS
+#endif
+
+#include <tst-efgcvt-template.c>
diff --git a/misc/tst-efgcvt.c b/misc/tst-efgcvt-template.c
similarity index 68%
rename from misc/tst-efgcvt.c
rename to misc/tst-efgcvt-template.c
index 5a598f4..cba964a 100644
--- a/misc/tst-efgcvt.c
+++ b/misc/tst-efgcvt-template.c
@@ -15,11 +15,29 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+/* This template provides testing for the *cvt family of functions,
+   which deal with double or long double types.  In order to use the
+   template, the following macros must be defined before inclusion of
+   this template:
+
+     FLOAT: The floating-point type, i.e. double or long double.
+
+     ECVT: Appropriate *ecvt function for FLOAT, i.e. ecvt or qecvt.
+     FCVT: Likewise for *fcvt, i.e. fcvt or qfcvt.
+     ECVT_R: Likewise for *ecvt_r, i.e. ecvt_r or qecvt_r.
+     FCVT_R: Likewise for *fcvt_r, i.e. fcvt_r or qfcvt_r.
+
+     PRINTF_CONVERSION: The appropriate printf conversion specifier with
+     length modifier for FLOAT, i.e. "%f" or "%Lf".
+
+     EXTRA_ECVT_TESTS: Additional tests for the ecvt or qecvt function
+     that are only relevant to a particular floating-point type and
+     cannot be represented generically.  */
+
 #ifndef _GNU_SOURCE
 # define _GNU_SOURCE	1
 #endif
 
-#include <float.h>
 #include <math.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -27,17 +45,20 @@
 
 #include <support/check.h>
 
+#define NAME(x) NAMEX(x)
+#define NAMEX(x) #x
+
 typedef struct
 {
-  double value;
+  FLOAT value;
   int ndigit;
   int decpt;
   char result[30];
 } testcase;
 
-typedef char * ((*efcvt_func) (double, int, int *, int *));
+typedef char * ((*efcvt_func) (FLOAT, int, int *, int *));
 
-typedef int ((*efcvt_r_func) (double, int, int *, int *, char *, size_t));
+typedef int ((*efcvt_r_func) (FLOAT, int, int *, int *, char *, size_t));
 
 
 static testcase ecvt_tests[] =
@@ -59,10 +80,7 @@ static testcase ecvt_tests[] =
   { 123.01, -4, 3, "" },
   { 126.71, -4, 3, "" },
   { 0.0, 4, 1, "0000" },
-#if DBL_MANT_DIG == 53
-  { 0x1p-1074, 3, -323, "494" },
-  { -0x1p-1074, 3, -323, "494" },
-#endif
+  EXTRA_ECVT_TESTS
   /* -1.0 is end marker.  */
   { -1.0, 0, 0, "" }
 };
@@ -91,11 +109,12 @@ static testcase fcvt_tests[] =
 };
 
 static void
-output_error (const char *name, double value, int ndigit,
+output_error (const char *name, FLOAT value, int ndigit,
 	      const char *exp_p, int exp_decpt, int exp_sign,
 	      char *res_p, int res_decpt, int res_sign)
 {
-  printf ("%s returned wrong result for value: %f, ndigits: %d\n",
+  printf ("%s returned wrong result for value: " PRINTF_CONVERSION
+	  ", ndigits: %d\n",
 	  name, value, ndigit);
   printf ("Result was p: \"%s\", decpt: %d, sign: %d\n",
 	  res_p, res_decpt, res_sign);
@@ -106,11 +125,12 @@ output_error (const char *name, double value, int ndigit,
 
 
 static void
-output_r_error (const char *name, double value, int ndigit,
+output_r_error (const char *name, FLOAT value, int ndigit,
 		const char *exp_p, int exp_decpt, int exp_sign, int exp_return,
 		char *res_p, int res_decpt, int res_sign, int res_return)
 {
-  printf ("%s returned wrong result for value: %f, ndigits: %d\n",
+  printf ("%s returned wrong result for value: " PRINTF_CONVERSION
+	  ", ndigits: %d\n",
 	  name, value, ndigit);
   printf ("Result was buf: \"%s\", decpt: %d, sign: %d return value: %d\n",
 	  res_p, res_decpt, res_sign, res_return);
@@ -171,30 +191,30 @@ special (void)
   char *p;
   char buf [1024];
 
-  p = ecvt (NAN, 10, &decpt, &sign);
+  p = ECVT (NAN, 10, &decpt, &sign);
   if (sign != 0 || strcmp (p, "nan") != 0)
-    output_error ("ecvt", NAN, 10, "nan", 0, 0, p, decpt, sign);
+    output_error (NAME (ECVT), NAN, 10, "nan", 0, 0, p, decpt, sign);
 
-  p = ecvt (INFINITY, 10, &decpt, &sign);
+  p = ECVT (INFINITY, 10, &decpt, &sign);
   if (sign != 0 || strcmp (p, "inf") != 0)
-    output_error ("ecvt", INFINITY, 10, "inf", 0, 0, p, decpt, sign);
+    output_error (NAME (ECVT), INFINITY, 10, "inf", 0, 0, p, decpt, sign);
 
   /* Simply make sure these calls with large NDIGITs don't crash.  */
-  (void) ecvt (123.456, 10000, &decpt, &sign);
-  (void) fcvt (123.456, 10000, &decpt, &sign);
+  (void) ECVT (123.456, 10000, &decpt, &sign);
+  (void) FCVT (123.456, 10000, &decpt, &sign);
 
   /* Some tests for the reentrant functions.  */
   /* Use a too small buffer.  */
-  res = ecvt_r (123.456, 10, &decpt, &sign, buf, 1);
+  res = ECVT_R (123.456, 10, &decpt, &sign, buf, 1);
   if (res == 0)
     {
-      printf ("ecvt_r with a too small buffer was succesful.\n");
+      printf (NAME (ECVT_R) " with a too small buffer was succesful.\n");
       support_record_failure ();
     }
-  res = fcvt_r (123.456, 10, &decpt, &sign, buf, 1);
+  res = FCVT_R (123.456, 10, &decpt, &sign, buf, 1);
   if (res == 0)
     {
-      printf ("fcvt_r with a too small buffer was succesful.\n");
+      printf (NAME (FCVT_R) " with a too small buffer was succesful.\n");
       support_record_failure ();
     }
 }
@@ -203,10 +223,10 @@ special (void)
 static int
 do_test (void)
 {
-  test (ecvt_tests, ecvt, "ecvt");
-  test (fcvt_tests, fcvt, "fcvt");
-  test_r (ecvt_tests, ecvt_r, "ecvt_r");
-  test_r (fcvt_tests, fcvt_r, "fcvt_r");
+  test (ecvt_tests, ECVT, NAME (ECVT));
+  test (fcvt_tests, FCVT, NAME (FCVT));
+  test_r (ecvt_tests, ECVT_R, NAME (ECVT_R));
+  test_r (fcvt_tests, FCVT_R, NAME (FCVT_R));
   special ();
 
   return 0;
diff --git a/misc/tst-ldbl-efgcvt.c b/misc/tst-ldbl-efgcvt.c
new file mode 100644
index 0000000..35d24ae
--- /dev/null
+++ b/misc/tst-ldbl-efgcvt.c
@@ -0,0 +1,28 @@
+/* Tests for *cvt function, long double version.
+   Copyright (C) 1998-2018 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/>.  */
+
+#define ECVT qecvt
+#define FCVT qfcvt
+#define ECVT_R qecvt_r
+#define FCVT_R qfcvt_r
+#define FLOAT long double
+#define PRINTF_CONVERSION "%Lf"
+
+#define EXTRA_ECVT_TESTS
+
+#include <tst-efgcvt-template.c>

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                  |   16 +++
 misc/Makefile              |    4 +-
 misc/tst-dbl-efgcvt.c      |   36 +++++++
 misc/tst-efgcvt-template.c |  235 ++++++++++++++++++++++++++++++++++++++++++++
 misc/tst-efgcvt.c          |  215 ----------------------------------------
 misc/tst-ldbl-efgcvt.c     |   28 +++++
 6 files changed, 317 insertions(+), 217 deletions(-)
 create mode 100644 misc/tst-dbl-efgcvt.c
 create mode 100644 misc/tst-efgcvt-template.c
 delete mode 100644 misc/tst-efgcvt.c
 create mode 100644 misc/tst-ldbl-efgcvt.c


hooks/post-receive
-- 
GNU C Library master sources


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