From 170dd03f1170f0760c2b95f0f2ee18ed64b10c1c Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Sun, 9 Oct 2011 18:31:06 +0200 Subject: [PATCH] rint tests: More tests. * tests/test-rint.c: Include , , isnand-nolibm.h, minus-zero.h, infinity.h, nan.h. (main): Skip the test if the current rounding mode is not standard. Add tests for negative numbers, minus zero, infinity, NaN. * modules/rint-tests (Files): Add tests/minus-zero.h, tests/infinity.h, tests/nan.h. (Depends-on): Add isnand-nolibm. --- ChangeLog | 11 +++++++ modules/rint-tests | 4 +++ tests/test-rint.c | 90 ++++++++++++++++++++++++++++++++++++------------------ 3 files changed, 75 insertions(+), 30 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7625c1881..f3c83b1d3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,16 @@ 2011-10-09 Bruno Haible + rint tests: More tests. + * tests/test-rint.c: Include , , isnand-nolibm.h, + minus-zero.h, infinity.h, nan.h. + (main): Skip the test if the current rounding mode is not standard. Add + tests for negative numbers, minus zero, infinity, NaN. + * modules/rint-tests (Files): Add tests/minus-zero.h, tests/infinity.h, + tests/nan.h. + (Depends-on): Add isnand-nolibm. + +2011-10-09 Bruno Haible + Tests for module 'copysignl'. * modules/copysignl-tests: New file. * tests/test-copysignl.c: New file. diff --git a/modules/rint-tests b/modules/rint-tests index 315fda379..bb69767a0 100644 --- a/modules/rint-tests +++ b/modules/rint-tests @@ -1,9 +1,13 @@ Files: tests/test-rint.c +tests/minus-zero.h +tests/infinity.h +tests/nan.h tests/signature.h tests/macros.h Depends-on: +isnand-nolibm configure.ac: diff --git a/tests/test-rint.c b/tests/test-rint.c index 3390f4001..0a8a0107d 100644 --- a/tests/test-rint.c +++ b/tests/test-rint.c @@ -23,39 +23,69 @@ #include "signature.h" SIGNATURE_CHECK (rint, double, (double)); -#include "macros.h" +#include +#include -volatile double x; -double y; +#include "isnand-nolibm.h" +#include "minus-zero.h" +#include "infinity.h" +#include "nan.h" +#include "macros.h" int main () { - /* Assume round-to-nearest rounding (the default in IEEE 754). */ - - x = 2.1; - y = rint (x); - ASSERT (y == 2.0); - - x = -2.1; - y = rint (x); - ASSERT (y == -2.0); - - x = 2.7; - y = rint (x); - ASSERT (y == 3.0); - - x = -2.7; - y = rint (x); - ASSERT (y == -3.0); - - x = 2.5; - y = rint (x); - ASSERT (y == 2.0); - - x = 3.5; - y = rint (x); - ASSERT (y == 4.0); - - return 0; + /* Consider the current rounding mode, cf. + */ + if (FLT_ROUNDS == 1) + { + /* The current rounding mode is round-to-nearest + (the default in IEEE 754). */ + + /* Zero. */ + ASSERT (rint (0.0) == 0.0); + ASSERT (rint (minus_zerod) == 0.0); + /* Positive numbers. */ + ASSERT (rint (0.3) == 0.0); + ASSERT (rint (0.5) == 0.0); /* unlike round() */ + ASSERT (rint (0.7) == 1.0); + ASSERT (rint (1.0) == 1.0); + ASSERT (rint (1.5) == 2.0); + ASSERT (rint (1.999) == 2.0); + ASSERT (rint (2.0) == 2.0); + ASSERT (rint (2.1) == 2.0); + ASSERT (rint (2.5) == 2.0); /* unlike round() */ + ASSERT (rint (2.7) == 3.0); + ASSERT (rint (65535.999) == 65536.0); + ASSERT (rint (65536.0) == 65536.0); + ASSERT (rint (65536.001) == 65536.0); + ASSERT (rint (2.341e31) == 2.341e31); + /* Negative numbers. */ + ASSERT (rint (-0.3) == 0.0); + ASSERT (rint (-0.5) == 0.0); /* unlike round() */ + ASSERT (rint (-0.7) == -1.0); + ASSERT (rint (-1.0) == -1.0); + ASSERT (rint (-1.5) == -2.0); + ASSERT (rint (-1.999) == -2.0); + ASSERT (rint (-2.0) == -2.0); + ASSERT (rint (-2.1) == -2.0); + ASSERT (rint (-2.5) == -2.0); /* unlike round() */ + ASSERT (rint (-2.7) == -3.0); + ASSERT (rint (-65535.999) == -65536.0); + 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 ()))); + + return 0; + } + else + { + fputs ("Skipping test: non-standard rounding mode\n", stderr); + return 77; + } } -- 2.11.0