Add test for nextafter and 0.0.
authordrepper <drepper>
Thu, 21 Dec 2000 08:09:22 +0000 (08:09 +0000)
committerdrepper <drepper>
Thu, 21 Dec 2000 08:09:22 +0000 (08:09 +0000)
math/test-misc.c

index d375e57..1ba2943 100644 (file)
@@ -315,7 +315,54 @@ main (void)
                v1.ieee.negative, v2.ieee.negative);
        result = 1;
       }
+
+    v1.f = f = 0.0f;
+    f = nextafterf (f, 1.0);
+    v2.f = nextafterf (f, -1.0);
+
+    if (v1.ieee.mantissa != v2.ieee.mantissa)
+      {
+       printf ("0.0f up: mantissa differs: %8x vs %8x\n",
+               v1.ieee.mantissa, v2.ieee.mantissa);
+       result = 1;
+      }
+    if (v1.ieee.exponent != v2.ieee.exponent)
+      {
+       printf ("0.0f up: exponent differs: %4x vs %4x\n",
+               v1.ieee.exponent, v2.ieee.exponent);
+       result = 1;
+      }
+    if (0 != v2.ieee.negative)
+      {
+       printf ("0.0f up: negative differs: 0 vs %d\n",
+               v2.ieee.negative);
+       result = 1;
+      }
+
+    v1.f = f = 0.0f;
+    f = nextafterf (f, -1.0);
+    v2.f = nextafterf (f, 1.0);
+
+    if (v1.ieee.mantissa != v2.ieee.mantissa)
+      {
+       printf ("0.0f down: mantissa differs: %8x vs %8x\n",
+               v1.ieee.mantissa, v2.ieee.mantissa);
+       result = 1;
+      }
+    if (v1.ieee.exponent != v2.ieee.exponent)
+      {
+       printf ("0.0f down: exponent differs: %4x vs %4x\n",
+               v1.ieee.exponent, v2.ieee.exponent);
+       result = 1;
+      }
+    if (1 != v2.ieee.negative)
+      {
+       printf ("0.0f down: negative differs: 1 vs %d\n",
+               v2.ieee.negative);
+       result = 1;
+      }
   }
+
   {
     union ieee754_double v1;
     union ieee754_double v2;
@@ -552,7 +599,66 @@ main (void)
                v1.ieee.negative, v2.ieee.negative);
        result = 1;
       }
+
+    v1.d = d = 0.0;
+    d = nextafter (d, 1.0);
+    v2.d = nextafter (d, -1.0);
+
+    if (v1.ieee.mantissa0 != v2.ieee.mantissa0)
+      {
+       printf ("0.0 up: mantissa0 differs: %8x vs %8x\n",
+               v1.ieee.mantissa0, v2.ieee.mantissa0);
+       result = 1;
+      }
+    if (v1.ieee.mantissa1 != v2.ieee.mantissa1)
+      {
+       printf ("0.0 up: mantissa1 differs: %8x vs %8x\n",
+               v1.ieee.mantissa1, v2.ieee.mantissa1);
+       result = 1;
+      }
+    if (v1.ieee.exponent != v2.ieee.exponent)
+      {
+       printf ("0.0 up: exponent differs: %4x vs %4x\n",
+               v1.ieee.exponent, v2.ieee.exponent);
+       result = 1;
+      }
+    if (0 != v2.ieee.negative)
+      {
+       printf ("0.0 up: negative differs: 0 vs %d\n",
+               v2.ieee.negative);
+       result = 1;
+      }
+
+    v1.d = d = 0.0;
+    d = nextafter (d, -1.0);
+    v2.d = nextafter (d, 1.0);
+
+    if (v1.ieee.mantissa0 != v2.ieee.mantissa0)
+      {
+       printf ("0.0 down: mantissa0 differs: %8x vs %8x\n",
+               v1.ieee.mantissa0, v2.ieee.mantissa0);
+       result = 1;
+      }
+    if (v1.ieee.mantissa1 != v2.ieee.mantissa1)
+      {
+       printf ("0.0 down: mantissa1 differs: %8x vs %8x\n",
+               v1.ieee.mantissa1, v2.ieee.mantissa1);
+       result = 1;
+      }
+    if (v1.ieee.exponent != v2.ieee.exponent)
+      {
+       printf ("0.0 down: exponent differs: %4x vs %4x\n",
+               v1.ieee.exponent, v2.ieee.exponent);
+       result = 1;
+      }
+    if (1 != v2.ieee.negative)
+      {
+       printf ("0.0 down: negative differs: 1 vs %d\n",
+               v2.ieee.negative);
+       result = 1;
+      }
   }
+
 #ifndef NO_LONG_DOUBLE
   {
     union ieee854_long_double v1;
@@ -793,6 +899,64 @@ main (void)
                v1.ieee.negative, v2.ieee.negative);
        result = 1;
       }
+
+    v1.d = ld = 0.0;
+    ld = nextafterl (ld, 1.0);
+    v2.d = nextafterl (ld, -1.0);
+
+    if (v1.ieee.mantissa0 != v2.ieee.mantissa0)
+      {
+       printf ("0.0L up: mantissa0 differs: %8x vs %8x\n",
+               v1.ieee.mantissa0, v2.ieee.mantissa0);
+       result = 1;
+      }
+    if (v1.ieee.mantissa1 != v2.ieee.mantissa1)
+      {
+       printf ("0.0L up: mantissa1 differs: %8x vs %8x\n",
+               v1.ieee.mantissa1, v2.ieee.mantissa1);
+       result = 1;
+      }
+    if (v1.ieee.exponent != v2.ieee.exponent)
+      {
+       printf ("0.0L up: exponent differs: %4x vs %4x\n",
+               v1.ieee.exponent, v2.ieee.exponent);
+       result = 1;
+      }
+    if (0 != v2.ieee.negative)
+      {
+       printf ("0.0L up: negative differs: 0 vs %d\n",
+               v2.ieee.negative);
+       result = 1;
+      }
+
+    v1.d = ld = 0.0;
+    ld = nextafterl (ld, -1.0);
+    v2.d = nextafterl (ld, 1.0);
+
+    if (v1.ieee.mantissa0 != v2.ieee.mantissa0)
+      {
+       printf ("0.0L down: mantissa0 differs: %8x vs %8x\n",
+               v1.ieee.mantissa0, v2.ieee.mantissa0);
+       result = 1;
+      }
+    if (v1.ieee.mantissa1 != v2.ieee.mantissa1)
+      {
+       printf ("0.0L down: mantissa1 differs: %8x vs %8x\n",
+               v1.ieee.mantissa1, v2.ieee.mantissa1);
+       result = 1;
+      }
+    if (v1.ieee.exponent != v2.ieee.exponent)
+      {
+       printf ("0.0L down: exponent differs: %4x vs %4x\n",
+               v1.ieee.exponent, v2.ieee.exponent);
+       result = 1;
+      }
+    if (1 != v2.ieee.negative)
+      {
+       printf ("0.0L down: negative differs: 1 vs %d\n",
+               v2.ieee.negative);
+       result = 1;
+      }
   }
 #endif