Mercurial > hg > octave-lojdl > gnulib-hg
changeset 15916:fde577ac9f53
rint tests: More tests.
* tests/test-rint.c: Include <float.h>, <stdio.h>, 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.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Sun, 09 Oct 2011 18:31:06 +0200 |
parents | 5a892f2d4fe2 |
children | 2a90104cab5b |
files | ChangeLog modules/rint-tests tests/test-rint.c |
diffstat | 3 files changed, 73 insertions(+), 28 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2011-10-09 Bruno Haible <bruno@clisp.org> + + rint tests: More tests. + * tests/test-rint.c: Include <float.h>, <stdio.h>, 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 <bruno@clisp.org> Tests for module 'copysignl'.
--- 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:
--- 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 <float.h> +#include <stdio.h> -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); + /* Consider the current rounding mode, cf. + <http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/float.h.html> */ + if (FLT_ROUNDS == 1) + { + /* The current rounding mode is round-to-nearest + (the default in IEEE 754). */ - x = -2.7; - y = rint (x); - ASSERT (y == -3.0); + /* 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 ()))); - x = 2.5; - y = rint (x); - ASSERT (y == 2.0); - - x = 3.5; - y = rint (x); - ASSERT (y == 4.0); - - return 0; + return 0; + } + else + { + fputs ("Skipping test: non-standard rounding mode\n", stderr); + return 77; + } }