changeset 16563:446b5d1c7986

rint* tests: More tests. * tests/test-rint.h: New file, partially extracted from tests/test-rintl.c. * tests/test-rint.c: Include test-rint.h. (main): Invoke test_function. * tests/test-rintf.c: Include test-rint.h. (main): Invoke test_function. * tests/test-rintl.c: Include test-rint.h. (main): Invoke test_function. * modules/rint-tests (Files): Add tests/test-rint.h, tests/randomd.c. (Makefile.am): Add randomd.c to test_rint_SOURCES. * modules/rintf-tests (Files): Add tests/test-rint.h, tests/randomf.c. (Makefile.am): Add randomf.c to test_rintf_SOURCES. * modules/rintl-tests (Files): Add tests/test-rint.h, tests/randoml.c. (Makefile.am): Add randoml.c to test_rintl_SOURCES.
author Bruno Haible <bruno@clisp.org>
date Sat, 03 Mar 2012 17:17:19 +0100
parents 3f4104450577
children a5e3d6ba8dee
files ChangeLog modules/rint-tests modules/rintf-tests modules/rintl-tests tests/test-rint.c tests/test-rint.h tests/test-rintf.c tests/test-rintl.c
diffstat 8 files changed, 115 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,21 @@
+2012-03-03  Bruno Haible  <bruno@clisp.org>
+
+	rint* tests: More tests.
+	* tests/test-rint.h: New file, partially extracted from
+	tests/test-rintl.c.
+	* tests/test-rint.c: Include test-rint.h.
+	(main): Invoke test_function.
+	* tests/test-rintf.c: Include test-rint.h.
+	(main): Invoke test_function.
+	* tests/test-rintl.c: Include test-rint.h.
+	(main): Invoke test_function.
+	* modules/rint-tests (Files): Add tests/test-rint.h, tests/randomd.c.
+	(Makefile.am): Add randomd.c to test_rint_SOURCES.
+	* modules/rintf-tests (Files): Add tests/test-rint.h, tests/randomf.c.
+	(Makefile.am): Add randomf.c to test_rintf_SOURCES.
+	* modules/rintl-tests (Files): Add tests/test-rint.h, tests/randoml.c.
+	(Makefile.am): Add randoml.c to test_rintl_SOURCES.
+
 2012-03-03  Bruno Haible  <bruno@clisp.org>
 
 	modf* tests: More tests.
--- a/modules/rint-tests
+++ b/modules/rint-tests
@@ -1,10 +1,12 @@
 Files:
 tests/test-rint.c
+tests/test-rint.h
 tests/minus-zero.h
 tests/infinity.h
 tests/nan.h
 tests/signature.h
 tests/macros.h
+tests/randomd.c
 
 Depends-on:
 isnand-nolibm
@@ -14,4 +16,5 @@
 Makefile.am:
 TESTS += test-rint
 check_PROGRAMS += test-rint
+test_rint_SOURCES = test-rint.c randomd.c
 test_rint_LDADD = $(LDADD) @RINT_LIBM@
--- a/modules/rintf-tests
+++ b/modules/rintf-tests
@@ -1,10 +1,12 @@
 Files:
 tests/test-rintf.c
+tests/test-rint.h
 tests/minus-zero.h
 tests/infinity.h
 tests/nan.h
 tests/signature.h
 tests/macros.h
+tests/randomf.c
 
 Depends-on:
 isnanf-nolibm
@@ -14,4 +16,5 @@
 Makefile.am:
 TESTS += test-rintf
 check_PROGRAMS += test-rintf
+test_rintf_SOURCES = test-rintf.c randomf.c
 test_rintf_LDADD = $(LDADD) @RINTF_LIBM@
--- a/modules/rintl-tests
+++ b/modules/rintl-tests
@@ -1,10 +1,12 @@
 Files:
 tests/test-rintl.c
+tests/test-rint.h
 tests/minus-zero.h
 tests/infinity.h
 tests/nan.h
 tests/signature.h
 tests/macros.h
+tests/randoml.c
 
 Depends-on:
 fpucw
@@ -16,4 +18,5 @@
 Makefile.am:
 TESTS += test-rintl
 check_PROGRAMS += test-rintl
+test_rintl_SOURCES = test-rintl.c randoml.c
 test_rintl_LDADD = $(LDADD) @RINTL_LIBM@
--- a/tests/test-rint.c
+++ b/tests/test-rint.c
@@ -32,6 +32,15 @@
 #include "nan.h"
 #include "macros.h"
 
+#define DOUBLE double
+#define ISNAN isnand
+#define INFINITY Infinityd ()
+#define NAN NaNd ()
+#define L_(literal) literal
+#define RINT rint
+#define RANDOM randomd
+#include "test-rint.h"
+
 int
 main ()
 {
@@ -75,11 +84,8 @@
       ASSERT (rint (-65536.0) == -65536.0);
       ASSERT (rint (-65536.001) == -65536.0);
       ASSERT (rint (-2.341e31) == -2.341e31);
-      /* Infinite numbers.  */
-      ASSERT (rint (Infinityd ()) == Infinityd ());
-      ASSERT (rint (- Infinityd ()) == - Infinityd ());
-      /* NaNs.  */
-      ASSERT (isnand (rint (NaNd ())));
+
+      test_function ();
 
       return 0;
     }
new file mode 100644
--- /dev/null
+++ b/tests/test-rint.h
@@ -0,0 +1,55 @@
+/* Test of rint*() 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)
+{
+  /* Infinite numbers.  */
+  ASSERT (RINT (INFINITY) == INFINITY);
+  ASSERT (RINT (- INFINITY) == - INFINITY);
+  /* NaNs.  */
+  ASSERT (ISNAN (RINT (NAN)));
+
+  /* Randomized tests.  */
+  {
+    int i;
+
+    for (i = 0; i < SIZEOF (RANDOM); i++)
+      {
+        DOUBLE x;
+
+        x = L_(0.5) * RANDOM[i];
+        ASSERT (RINT (x) == L_(0.0));
+        x = - x;
+        ASSERT (RINT (x) == L_(0.0));
+
+        x = L_(1.0) - L_(0.5) * RANDOM[i];
+        ASSERT (RINT (x) == L_(1.0));
+        x = - x;
+        ASSERT (RINT (x) == - L_(1.0));
+
+        x = L_(1.0) + L_(0.5) * RANDOM[i];
+        ASSERT (RINT (x) == L_(1.0));
+        x = - x;
+        ASSERT (RINT (x) == - L_(1.0));
+
+        x = L_(2.0) - L_(0.5) * RANDOM[i];
+        ASSERT (RINT (x) == L_(2.0));
+        x = - x;
+        ASSERT (RINT (x) == - L_(2.0));
+      }
+  }
+}
--- a/tests/test-rintf.c
+++ b/tests/test-rintf.c
@@ -32,6 +32,15 @@
 #include "nan.h"
 #include "macros.h"
 
+#define DOUBLE float
+#define ISNAN isnanf
+#define INFINITY Infinityf ()
+#define NAN NaNf ()
+#define L_(literal) literal##f
+#define RINT rintf
+#define RANDOM randomf
+#include "test-rint.h"
+
 int
 main ()
 {
@@ -75,11 +84,8 @@
       ASSERT (rintf (-65536.0f) == -65536.0f);
       ASSERT (rintf (-65536.01f) == -65536.0f);
       ASSERT (rintf (-2.341e31f) == -2.341e31f);
-      /* Infinite numbers.  */
-      ASSERT (rintf (Infinityf ()) == Infinityf ());
-      ASSERT (rintf (- Infinityf ()) == - Infinityf ());
-      /* NaNs.  */
-      ASSERT (isnanf (rintf (NaNf ())));
+
+      test_function ();
 
       return 0;
     }
--- a/tests/test-rintl.c
+++ b/tests/test-rintl.c
@@ -33,6 +33,15 @@
 #include "nan.h"
 #include "macros.h"
 
+#define DOUBLE long double
+#define ISNAN isnanl
+#define INFINITY Infinityl ()
+#define NAN NaNl ()
+#define L_(literal) literal##L
+#define RINT rintl
+#define RANDOM randoml
+#include "test-rint.h"
+
 int
 main ()
 {
@@ -80,11 +89,8 @@
       ASSERT (rintl (-65536.0L) == -65536.0L);
       ASSERT (rintl (-65536.001L) == -65536.0L);
       ASSERT (rintl (-2.341e31L) == -2.341e31L);
-      /* Infinite numbers.  */
-      ASSERT (rintl (Infinityl ()) == Infinityl ());
-      ASSERT (rintl (- Infinityl ()) == - Infinityl ());
-      /* NaNs.  */
-      ASSERT (isnanl (rintl (NaNl ())));
+
+      test_function ();
 
       return 0;
     }