changeset 16561:82c859774444

fabs* tests: More tests. * tests/test-fabs.h: New file, partially extracted from tests/test-fabsl.c. * tests/test-fabs.c (RANDOM): New macro. * tests/test-fabsf.c (RANDOM): New macro. * tests/test-fabsl.c (RANDOM): New macro. * modules/fabs-tests (Files): Add tests/randomd.c. (Makefile.am): Add randomd.c to test_fabs_SOURCES. * modules/fabsf-tests (Files): Add tests/randomf.c. (Makefile.am): Add randomf.c to test_fabsf_SOURCES. * modules/fabsl-tests (Files): Add tests/randoml.c. (Makefile.am): Add randoml.c to test_fabsl_SOURCES.
author Bruno Haible <bruno@clisp.org>
date Sat, 03 Mar 2012 16:14:14 +0100
parents f56ad1ce5e9e
children 3f4104450577
files ChangeLog modules/fabs-tests modules/fabsf-tests modules/fabsl-tests tests/test-fabs.c tests/test-fabs.h tests/test-fabsf.c tests/test-fabsl.c
diffstat 8 files changed, 96 insertions(+), 39 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2012-03-03  Bruno Haible  <bruno@clisp.org>
+
+	fabs* tests: More tests.
+	* tests/test-fabs.h: New file, partially extracted from
+	tests/test-fabsl.c.
+	* tests/test-fabs.c (RANDOM): New macro.
+	* tests/test-fabsf.c (RANDOM): New macro.
+	* tests/test-fabsl.c (RANDOM): New macro.
+	* modules/fabs-tests (Files): Add tests/randomd.c.
+	(Makefile.am): Add randomd.c to test_fabs_SOURCES.
+	* modules/fabsf-tests (Files): Add tests/randomf.c.
+	(Makefile.am): Add randomf.c to test_fabsf_SOURCES.
+	* modules/fabsl-tests (Files): Add tests/randoml.c.
+	(Makefile.am): Add randoml.c to test_fabsl_SOURCES.
+
 2012-03-03  Bruno Haible  <bruno@clisp.org>
 
 	ldexp* tests: More tests.
--- a/modules/fabs-tests
+++ b/modules/fabs-tests
@@ -1,14 +1,18 @@
 Files:
 tests/test-fabs.c
+tests/test-fabs.h
 tests/signature.h
 tests/minus-zero.h
 tests/macros.h
+tests/randomd.c
 
 Depends-on:
+signbit
 
 configure.ac:
 
 Makefile.am:
 TESTS += test-fabs
 check_PROGRAMS += test-fabs
+test_fabs_SOURCES = test-fabs.c randomd.c
 test_fabs_LDADD = $(LDADD) @FABS_LIBM@
--- a/modules/fabsf-tests
+++ b/modules/fabsf-tests
@@ -1,14 +1,18 @@
 Files:
 tests/test-fabsf.c
+tests/test-fabs.h
 tests/signature.h
 tests/minus-zero.h
 tests/macros.h
+tests/randomf.c
 
 Depends-on:
+signbit
 
 configure.ac:
 
 Makefile.am:
 TESTS += test-fabsf
 check_PROGRAMS += test-fabsf
+test_fabsf_SOURCES = test-fabsf.c randomf.c
 test_fabsf_LDADD = $(LDADD) @FABSF_LIBM@
--- a/modules/fabsl-tests
+++ b/modules/fabsl-tests
@@ -1,14 +1,18 @@
 Files:
 tests/test-fabsl.c
+tests/test-fabs.h
 tests/signature.h
 tests/minus-zero.h
 tests/macros.h
+tests/randoml.c
 
 Depends-on:
+signbit
 
 configure.ac:
 
 Makefile.am:
 TESTS += test-fabsl
 check_PROGRAMS += test-fabsl
+test_fabsl_SOURCES = test-fabsl.c randoml.c
 test_fabsl_LDADD = $(LDADD) @FABSL_LIBM@
--- a/tests/test-fabs.c
+++ b/tests/test-fabs.c
@@ -28,9 +28,12 @@
 #include "macros.h"
 #include "minus-zero.h"
 
-volatile double x;
-double y;
-double zero = 0.0;
+#define DOUBLE double
+#define L_(literal) literal
+#define MINUS_ZERO minus_zerod
+#define FABS fabs
+#define RANDOM randomd
+#include "test-fabs.h"
 
 int
 main ()
@@ -45,16 +48,7 @@
   y = fabs (x);
   ASSERT (y == 0.6);
 
-  /* Signed zero.  */
-  x = 0.0;
-  y = fabs (x);
-  ASSERT (y == 0.0);
-  ASSERT (memcmp (&y, &zero, sizeof y) == 0);
-
-  x = minus_zerod;
-  y = fabs (x);
-  ASSERT (y == 0.0);
-  ASSERT (memcmp (&y, &zero, sizeof y) == 0);
+  test_function ();
 
   return 0;
 }
new file mode 100644
--- /dev/null
+++ b/tests/test-fabs.h
@@ -0,0 +1,48 @@
+/* Test of fabs*() function family.
+   Copyright (C) 2012 Free Software Foundation, Inc.
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program 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 General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+static void
+test_function (void)
+{
+  volatile DOUBLE x;
+  DOUBLE y;
+
+  /* Signed zero.  */
+  x = L_(0.0);
+  y = FABS (x);
+  ASSERT (y == L_(0.0));
+  ASSERT (!signbit (y));
+
+  x = MINUS_ZERO;
+  y = FABS (x);
+  ASSERT (y == L_(0.0));
+  ASSERT (!signbit (y));
+
+  /* Randomized tests.  */
+  {
+    int i;
+
+    for (i = 0; i < SIZEOF (RANDOM); i++)
+      {
+        x = L_(10.0) * RANDOM[i]; /* 0.0 <= x <= 10.0 */
+        ASSERT (FABS (x) == x);
+        ASSERT (FABS (- x) == x);
+      }
+  }
+}
+
+volatile DOUBLE x;
+DOUBLE y;
--- a/tests/test-fabsf.c
+++ b/tests/test-fabsf.c
@@ -28,9 +28,12 @@
 #include "macros.h"
 #include "minus-zero.h"
 
-volatile float x;
-float y;
-float zero = 0.0f;
+#define DOUBLE float
+#define L_(literal) literal##f
+#define MINUS_ZERO minus_zerof
+#define FABS fabsf
+#define RANDOM randomf
+#include "test-fabs.h"
 
 int
 main ()
@@ -45,16 +48,7 @@
   y = fabsf (x);
   ASSERT (y == 0.6f);
 
-  /* Signed zero.  */
-  x = 0.0f;
-  y = fabsf (x);
-  ASSERT (y == 0.0f);
-  ASSERT (memcmp (&y, &zero, sizeof y) == 0);
-
-  x = minus_zerof;
-  y = fabsf (x);
-  ASSERT (y == 0.0f);
-  ASSERT (memcmp (&y, &zero, sizeof y) == 0);
+  test_function ();
 
   return 0;
 }
--- a/tests/test-fabsl.c
+++ b/tests/test-fabsl.c
@@ -28,9 +28,12 @@
 #include "macros.h"
 #include "minus-zero.h"
 
-volatile long double x;
-long double y;
-long double zero = 0.0L;
+#define DOUBLE long double
+#define L_(literal) literal##L
+#define MINUS_ZERO minus_zerol
+#define FABS fabsl
+#define RANDOM randoml
+#include "test-fabs.h"
 
 int
 main ()
@@ -45,16 +48,7 @@
   y = fabsl (x);
   ASSERT (y == 0.6L);
 
-  /* Signed zero.  */
-  x = 0.0L;
-  y = fabsl (x);
-  ASSERT (y == 0.0L);
-  ASSERT (memcmp (&y, &zero, sizeof y) == 0);
-
-  x = minus_zerol;
-  y = fabsl (x);
-  ASSERT (y == 0.0L);
-  ASSERT (memcmp (&y, &zero, sizeof y) == 0);
+  test_function ();
 
   return 0;
 }