# HG changeset patch # User Bruno Haible # Date 1318185345 -7200 # Node ID 1f40ef54f475a57368102bd0b0e7fca4bba27832 # Parent 44844e6a23a1068efe992ef6a279d43df5f8abf0 Tests for module 'rintl'. * modules/rintl-tests: New file. * tests/test-rintl.c: New file. diff --git a/ChangeLog b/ChangeLog --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2011-10-09 Bruno Haible + Tests for module 'rintl'. + * modules/rintl-tests: New file. + * tests/test-rintl.c: New file. + New module 'rintl'. * lib/math.in.h (rintl): New declaration. * lib/rintl.c: New file. diff --git a/modules/rintl-tests b/modules/rintl-tests new file mode 100644 --- /dev/null +++ b/modules/rintl-tests @@ -0,0 +1,19 @@ +Files: +tests/test-rintl.c +tests/minus-zero.h +tests/infinity.h +tests/nan.h +tests/signature.h +tests/macros.h + +Depends-on: +fpucw +isnanl-nolibm +float + +configure.ac: + +Makefile.am: +TESTS += test-rintl +check_PROGRAMS += test-rintl +test_rintl_LDADD = $(LDADD) @RINTL_LIBM@ diff --git a/tests/test-rintl.c b/tests/test-rintl.c new file mode 100644 --- /dev/null +++ b/tests/test-rintl.c @@ -0,0 +1,96 @@ +/* Test of rintl() function. + Copyright (C) 2010-2011 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 . */ + +/* Written by Bruno Haible , 2010. */ + +#include + +#include + +#include "signature.h" +SIGNATURE_CHECK (rintl, long double, (long double)); + +#include +#include + +#include "fpucw.h" +#include "isnanl-nolibm.h" +#include "minus-zero.h" +#include "infinity.h" +#include "nan.h" +#include "macros.h" + +int +main () +{ + DECL_LONG_DOUBLE_ROUNDING + + BEGIN_LONG_DOUBLE_ROUNDING (); + + /* 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 (rintl (0.0L) == 0.0L); + ASSERT (rintl (minus_zerol) == 0.0L); + /* Positive numbers. */ + ASSERT (rintl (0.3L) == 0.0L); + ASSERT (rintl (0.5L) == 0.0L); /* unlike roundl() */ + ASSERT (rintl (0.7L) == 1.0L); + ASSERT (rintl (1.0L) == 1.0L); + ASSERT (rintl (1.5L) == 2.0L); + ASSERT (rintl (1.999L) == 2.0L); + ASSERT (rintl (2.0L) == 2.0L); + ASSERT (rintl (2.1L) == 2.0L); + ASSERT (rintl (2.5L) == 2.0L); /* unlike roundl() */ + ASSERT (rintl (2.7L) == 3.0L); + ASSERT (rintl (65535.999L) == 65536.0L); + ASSERT (rintl (65536.0L) == 65536.0L); + ASSERT (rintl (65536.001L) == 65536.0L); + ASSERT (rintl (2.341e31L) == 2.341e31L); + /* Negative numbers. */ + ASSERT (rintl (-0.3L) == 0.0L); + ASSERT (rintl (-0.5L) == 0.0L); /* unlike roundl() */ + ASSERT (rintl (-0.7L) == -1.0L); + ASSERT (rintl (-1.0L) == -1.0L); + ASSERT (rintl (-1.5L) == -2.0L); + ASSERT (rintl (-1.999L) == -2.0L); + ASSERT (rintl (-2.0L) == -2.0L); + ASSERT (rintl (-2.1L) == -2.0L); + ASSERT (rintl (-2.5L) == -2.0L); /* unlike roundl() */ + ASSERT (rintl (-2.7L) == -3.0L); + ASSERT (rintl (-65535.999L) == -65536.0L); + 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 ()))); + + return 0; + } + else + { + fputs ("Skipping test: non-standard rounding mode\n", stderr); + return 77; + } +}