diff tests/test-ceil-ieee.c @ 13992:749c72ade953

ceil: Implement result sign according to IEEE 754. * lib/ceil.c (MIN, MINUS_ZERO): New macros. (FUNC): Return -0.0 for -1 < x < 0. * tests/test-ceil2.c: Include minus-zero.h. (MINUS_ZERO): New macro. (ceil_reference): Keep in sync with lib/ceil.c. * tests/test-ceilf2.c: Include minus-zero.h. (MINUS_ZERO): New macro. (ceilf_reference): Keep in sync with lib/ceil.c. * tests/test-ceilf-ieee.c (main): Test also values between -1 and 1. * tests/test-ceil-ieee.c (main): Likewise. * tests/test-ceill-ieee.c (main): Likewise.
author Bruno Haible <bruno@clisp.org>
date Wed, 22 Dec 2010 16:07:08 +0100
parents 2c35dd380b9e
children 97fc9a21a8fb
line wrap: on
line diff
--- a/tests/test-ceil-ieee.c
+++ b/tests/test-ceil-ieee.c
@@ -24,9 +24,20 @@
 int
 main ()
 {
+  /* 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 (ceil (0.0)));
   ASSERT (!!signbit (ceil (minus_zerod)) == !!signbit (minus_zerod));
+  /* Positive numbers.  */
+  ASSERT (!signbit (ceil (0.3)));
+  ASSERT (!signbit (ceil (0.7)));
+  /* Negative numbers.  */
+  ASSERT (!!signbit (ceil (-0.3)) == !!signbit (minus_zerod));
+  ASSERT (!!signbit (ceil (-0.7)) == !!signbit (minus_zerod));
 
   return 0;
 }