summaryrefslogtreecommitdiff
path: root/tests/test-floorf-ieee.c
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2010-12-22 16:05:29 +0100
committerBruno Haible <bruno@clisp.org>2010-12-22 16:06:29 +0100
commit9ca8092d849ed03418229af9a2aefdf784fd4db9 (patch)
treee2814bca17c3bc52cc0476effbc507b7c4181bbe /tests/test-floorf-ieee.c
parent6a84f05ce88c372ec7b98f9294d5b3e76bcb22ad (diff)
downloadgnulib-9ca8092d849ed03418229af9a2aefdf784fd4db9.tar.gz
floor: Implement result sign according to IEEE 754.
* lib/floor.c (FUNC): Return +0.0 for 0 < x < 1. * tests/test-floor2.c (floor_reference): Keep in sync with lib/floor.c. * tests/test-floorf2.c (floorf_reference): Likewise. * tests/test-floorf-ieee.c (main): Test also values between -1 and 1. * tests/test-floor-ieee.c (main): Likewise. * tests/test-floorl-ieee.c (main): Likewise.
Diffstat (limited to 'tests/test-floorf-ieee.c')
-rw-r--r--tests/test-floorf-ieee.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/tests/test-floorf-ieee.c b/tests/test-floorf-ieee.c
index da13848738..c4925d2b17 100644
--- a/tests/test-floorf-ieee.c
+++ b/tests/test-floorf-ieee.c
@@ -37,9 +37,20 @@ main (int argc, char **argv _GL_UNUSED)
{
float (*my_floorf) (float) = argc ? floorf : dummy;
+ /* See IEEE 754, section 6.3:
+ "the sign of the result of the round floating-point number to
+ integral value operation is the sign of the operand. These rules
+ shall apply even when operands or results are zero or infinite." */
+
/* Zero. */
ASSERT (!signbit (my_floorf (0.0f)));
ASSERT (!!signbit (my_floorf (minus_zerof)) == !!signbit (minus_zerof));
+ /* Positive numbers. */
+ ASSERT (!signbit (my_floorf (0.3f)));
+ ASSERT (!signbit (my_floorf (0.7f)));
+ /* Negative numbers. */
+ ASSERT (!!signbit (my_floorf (-0.3f)) == !!signbit (minus_zerof));
+ ASSERT (!!signbit (my_floorf (-0.7f)) == !!signbit (minus_zerof));
return 0;
}