diff tests/test-vasprintf-posix.c @ 8852:df0b5e8ea770

Avoid test failures on platforms where -0.0 and 0.0 are identical.
author Bruno Haible <bruno@clisp.org>
date Sat, 19 May 2007 22:57:58 +0000
parents d1fe16dfbfee
children 61fd30fa9b3f
line wrap: on
line diff
--- a/tests/test-vasprintf-posix.c
+++ b/tests/test-vasprintf-posix.c
@@ -54,6 +54,15 @@
 # define NaN() (0.0 / 0.0)
 #endif
 
+/* The SGI MIPS floating-point format does not distinguish 0.0 and -0.0.  */
+static int
+have_minus_zero ()
+{
+  static double plus_zero = 0.0;
+  static double minus_zero = -0.0;
+  return memcmp (&plus_zero, &minus_zero, sizeof (double)) != 0;
+}
+
 static int
 strmatch (const char *pattern, const char *string)
 {
@@ -168,7 +177,8 @@
     int retval =
       my_asprintf (&result, "%a %d", -0.0, 33, 44, 55);
     ASSERT (result != NULL);
-    ASSERT (strcmp (result, "-0x0p+0 33") == 0);
+    if (have_minus_zero ())
+      ASSERT (strcmp (result, "-0x0p+0 33") == 0);
     ASSERT (retval == strlen (result));
     free (result);
   }
@@ -481,7 +491,8 @@
     int retval =
       my_asprintf (&result, "%La %d", -0.0L, 33, 44, 55);
     ASSERT (result != NULL);
-    ASSERT (strcmp (result, "-0x0p+0 33") == 0);
+    if (have_minus_zero ())
+      ASSERT (strcmp (result, "-0x0p+0 33") == 0);
     ASSERT (retval == strlen (result));
     free (result);
   }
@@ -892,7 +903,8 @@
     int retval =
       my_asprintf (&result, "%f %d", -0.0, 33, 44, 55);
     ASSERT (result != NULL);
-    ASSERT (strcmp (result, "-0.000000 33") == 0);
+    if (have_minus_zero ())
+      ASSERT (strcmp (result, "-0.000000 33") == 0);
     ASSERT (retval == strlen (result));
     free (result);
   }
@@ -1170,7 +1182,8 @@
     int retval =
       my_asprintf (&result, "%Lf %d", -0.0L, 33, 44, 55);
     ASSERT (result != NULL);
-    ASSERT (strcmp (result, "-0.000000 33") == 0);
+    if (have_minus_zero ())
+      ASSERT (strcmp (result, "-0.000000 33") == 0);
     ASSERT (retval == strlen (result));
     free (result);
   }
@@ -1361,7 +1374,8 @@
     int retval =
       my_asprintf (&result, "%F %d", -0.0, 33, 44, 55);
     ASSERT (result != NULL);
-    ASSERT (strcmp (result, "-0.000000 33") == 0);
+    if (have_minus_zero ())
+      ASSERT (strcmp (result, "-0.000000 33") == 0);
     ASSERT (retval == strlen (result));
     free (result);
   }
@@ -1476,7 +1490,8 @@
     int retval =
       my_asprintf (&result, "%LF %d", -0.0L, 33, 44, 55);
     ASSERT (result != NULL);
-    ASSERT (strcmp (result, "-0.000000 33") == 0);
+    if (have_minus_zero ())
+      ASSERT (strcmp (result, "-0.000000 33") == 0);
     ASSERT (retval == strlen (result));
     free (result);
   }
@@ -1697,8 +1712,9 @@
     int retval =
       my_asprintf (&result, "%e %d", -0.0, 33, 44, 55);
     ASSERT (result != NULL);
-    ASSERT (strcmp (result, "-0.000000e+00 33") == 0
-	    || strcmp (result, "-0.000000e+000 33") == 0);
+    if (have_minus_zero ())
+      ASSERT (strcmp (result, "-0.000000e+00 33") == 0
+	      || strcmp (result, "-0.000000e+000 33") == 0);
     ASSERT (retval == strlen (result));
     free (result);
   }
@@ -1995,7 +2011,8 @@
     int retval =
       my_asprintf (&result, "%Le %d", -0.0L, 33, 44, 55);
     ASSERT (result != NULL);
-    ASSERT (strcmp (result, "-0.000000e+00 33") == 0);
+    if (have_minus_zero ())
+      ASSERT (strcmp (result, "-0.000000e+00 33") == 0);
     ASSERT (retval == strlen (result));
     free (result);
   }
@@ -2297,7 +2314,8 @@
     int retval =
       my_asprintf (&result, "%g %d", -0.0, 33, 44, 55);
     ASSERT (result != NULL);
-    ASSERT (strcmp (result, "-0 33") == 0);
+    if (have_minus_zero ())
+      ASSERT (strcmp (result, "-0 33") == 0);
     ASSERT (retval == strlen (result));
     free (result);
   }
@@ -2587,7 +2605,8 @@
     int retval =
       my_asprintf (&result, "%Lg %d", -0.0L, 33, 44, 55);
     ASSERT (result != NULL);
-    ASSERT (strcmp (result, "-0 33") == 0);
+    if (have_minus_zero ())
+      ASSERT (strcmp (result, "-0 33") == 0);
     ASSERT (retval == strlen (result));
     free (result);
   }