# 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)
{
char *result =
my_asnprintf (NULL, &length, "%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 (length == strlen (result));
free (result);
}
char *result =
my_asnprintf (NULL, &length, "%a %d", NaN (), 33, 44, 55);
ASSERT (result != NULL);
- ASSERT (strcmp (result, "nan 33") == 0);
+ ASSERT (strlen (result) >= 3 + 3
+ && memcmp (result, "nan", 3) == 0
+ && strcmp (result + strlen (result) - 3, " 33") == 0);
ASSERT (length == strlen (result));
free (result);
}
{ /* FLAG_ZERO with NaN. */
size_t length;
char *result =
- my_asnprintf (NULL, &length, "%010a %d", NaN (), 33, 44, 55);
+ my_asnprintf (NULL, &length, "%020a %d", NaN (), 33, 44, 55);
ASSERT (result != NULL);
/* "0000000nan 33" is not a valid result; see
<http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */
- ASSERT (strcmp (result, " nan 33") == 0);
+ ASSERT (strlen (result) == 20 + 3
+ && memcmp (result + strspn (result, " "), "nan", 3) == 0
+ && strcmp (result + strlen (result) - 3, " 33") == 0);
ASSERT (length == strlen (result));
free (result);
}
char *result =
my_asnprintf (NULL, &length, "%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 (length == strlen (result));
free (result);
}
char *result =
my_asnprintf (NULL, &length, "%La %d", 0.0L / 0.0L, 33, 44, 55);
ASSERT (result != NULL);
- ASSERT (strcmp (result, "nan 33") == 0);
+ ASSERT (strlen (result) >= 3 + 3
+ && memcmp (result, "nan", 3) == 0
+ && strcmp (result + strlen (result) - 3, " 33") == 0);
ASSERT (length == strlen (result));
free (result);
}
{ /* FLAG_ZERO with NaN. */
size_t length;
char *result =
- my_asnprintf (NULL, &length, "%010La %d", 0.0L / 0.0L, 33, 44, 55);
+ my_asnprintf (NULL, &length, "%020La %d", 0.0L / 0.0L, 33, 44, 55);
ASSERT (result != NULL);
/* "0000000nan 33" is not a valid result; see
<http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */
- ASSERT (strcmp (result, " nan 33") == 0);
+ ASSERT (strlen (result) == 20 + 3
+ && memcmp (result + strspn (result, " "), "nan", 3) == 0
+ && strcmp (result + strlen (result) - 3, " 33") == 0);
ASSERT (length == strlen (result));
free (result);
}
char *result =
my_asnprintf (NULL, &length, "%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 (length == strlen (result));
free (result);
}
char *result =
my_asnprintf (NULL, &length, "%f %d", NaN (), 33, 44, 55);
ASSERT (result != NULL);
- ASSERT (strcmp (result, "nan 33") == 0);
+ ASSERT (strlen (result) >= 3 + 3
+ && memcmp (result, "nan", 3) == 0
+ && strcmp (result + strlen (result) - 3, " 33") == 0);
ASSERT (length == strlen (result));
free (result);
}
{ /* FLAG_ZERO with NaN. */
size_t length;
char *result =
- my_asnprintf (NULL, &length, "%015f %d", NaN (), 33, 44, 55);
+ my_asnprintf (NULL, &length, "%020f %d", NaN (), 33, 44, 55);
ASSERT (result != NULL);
- ASSERT (strcmp (result, " nan 33") == 0);
+ ASSERT (strlen (result) == 20 + 3
+ && memcmp (result + strspn (result, " "), "nan", 3) == 0
+ && strcmp (result + strlen (result) - 3, " 33") == 0);
ASSERT (length == strlen (result));
free (result);
}
char *result =
my_asnprintf (NULL, &length, "%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 (length == strlen (result));
free (result);
}
char *result =
my_asnprintf (NULL, &length, "%Lf %d", zero / zero, 33, 44, 55);
ASSERT (result != NULL);
- ASSERT (strcmp (result, "nan 33") == 0);
+ ASSERT (strlen (result) >= 3 + 3
+ && memcmp (result, "nan", 3) == 0
+ && strcmp (result + strlen (result) - 3, " 33") == 0);
ASSERT (length == strlen (result));
free (result);
}
static long double zero = 0.0L;
size_t length;
char *result =
- my_asnprintf (NULL, &length, "%015Lf %d", zero / zero, 33, 44, 55);
+ my_asnprintf (NULL, &length, "%020Lf %d", zero / zero, 33, 44, 55);
ASSERT (result != NULL);
- ASSERT (strcmp (result, " nan 33") == 0);
+ ASSERT (strlen (result) == 20 + 3
+ && memcmp (result + strspn (result, " "), "nan", 3) == 0
+ && strcmp (result + strlen (result) - 3, " 33") == 0);
ASSERT (length == strlen (result));
free (result);
}
char *result =
my_asnprintf (NULL, &length, "%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 (length == strlen (result));
free (result);
}
char *result =
my_asnprintf (NULL, &length, "%F %d", NaN (), 33, 44, 55);
ASSERT (result != NULL);
- ASSERT (strcmp (result, "NAN 33") == 0);
+ ASSERT (strlen (result) >= 3 + 3
+ && memcmp (result, "NAN", 3) == 0
+ && strcmp (result + strlen (result) - 3, " 33") == 0);
ASSERT (length == strlen (result));
free (result);
}
char *result =
my_asnprintf (NULL, &length, "%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 (length == strlen (result));
free (result);
}
char *result =
my_asnprintf (NULL, &length, "%LF %d", zero / zero, 33, 44, 55);
ASSERT (result != NULL);
- ASSERT (strcmp (result, "NAN 33") == 0);
+ ASSERT (strlen (result) >= 3 + 3
+ && memcmp (result, "NAN", 3) == 0
+ && strcmp (result + strlen (result) - 3, " 33") == 0);
ASSERT (length == strlen (result));
free (result);
}
char *result =
my_asnprintf (NULL, &length, "%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 (length == strlen (result));
free (result);
}
char *result =
my_asnprintf (NULL, &length, "%e %d", NaN (), 33, 44, 55);
ASSERT (result != NULL);
- ASSERT (strcmp (result, "nan 33") == 0);
+ ASSERT (strlen (result) >= 3 + 3
+ && memcmp (result, "nan", 3) == 0
+ && strcmp (result + strlen (result) - 3, " 33") == 0);
ASSERT (length == strlen (result));
free (result);
}
{ /* FLAG_ZERO with NaN. */
size_t length;
char *result =
- my_asnprintf (NULL, &length, "%015e %d", NaN (), 33, 44, 55);
+ my_asnprintf (NULL, &length, "%020e %d", NaN (), 33, 44, 55);
ASSERT (result != NULL);
- ASSERT (strcmp (result, " nan 33") == 0);
+ ASSERT (strlen (result) == 20 + 3
+ && memcmp (result + strspn (result, " "), "nan", 3) == 0
+ && strcmp (result + strlen (result) - 3, " 33") == 0);
ASSERT (length == strlen (result));
free (result);
}
char *result =
my_asnprintf (NULL, &length, "%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 (length == strlen (result));
free (result);
}
char *result =
my_asnprintf (NULL, &length, "%Le %d", zero / zero, 33, 44, 55);
ASSERT (result != NULL);
- ASSERT (strcmp (result, "nan 33") == 0);
+ ASSERT (strlen (result) >= 3 + 3
+ && memcmp (result, "nan", 3) == 0
+ && strcmp (result + strlen (result) - 3, " 33") == 0);
ASSERT (length == strlen (result));
free (result);
}
static long double zero = 0.0L;
size_t length;
char *result =
- my_asnprintf (NULL, &length, "%015Le %d", zero / zero, 33, 44, 55);
+ my_asnprintf (NULL, &length, "%020Le %d", zero / zero, 33, 44, 55);
ASSERT (result != NULL);
- ASSERT (strcmp (result, " nan 33") == 0);
+ ASSERT (strlen (result) == 20 + 3
+ && memcmp (result + strspn (result, " "), "nan", 3) == 0
+ && strcmp (result + strlen (result) - 3, " 33") == 0);
ASSERT (length == strlen (result));
free (result);
}
char *result =
my_asnprintf (NULL, &length, "%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 (length == strlen (result));
free (result);
}
char *result =
my_asnprintf (NULL, &length, "%g %d", NaN (), 33, 44, 55);
ASSERT (result != NULL);
- ASSERT (strcmp (result, "nan 33") == 0);
+ ASSERT (strlen (result) >= 3 + 3
+ && memcmp (result, "nan", 3) == 0
+ && strcmp (result + strlen (result) - 3, " 33") == 0);
ASSERT (length == strlen (result));
free (result);
}
{ /* FLAG_ZERO with NaN. */
size_t length;
char *result =
- my_asnprintf (NULL, &length, "%015g %d", NaN (), 33, 44, 55);
+ my_asnprintf (NULL, &length, "%020g %d", NaN (), 33, 44, 55);
ASSERT (result != NULL);
- ASSERT (strcmp (result, " nan 33") == 0);
+ ASSERT (strlen (result) == 20 + 3
+ && memcmp (result + strspn (result, " "), "nan", 3) == 0
+ && strcmp (result + strlen (result) - 3, " 33") == 0);
ASSERT (length == strlen (result));
free (result);
}
char *result =
my_asnprintf (NULL, &length, "%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 (length == strlen (result));
free (result);
}
char *result =
my_asnprintf (NULL, &length, "%Lg %d", zero / zero, 33, 44, 55);
ASSERT (result != NULL);
- ASSERT (strcmp (result, "nan 33") == 0);
+ ASSERT (strlen (result) >= 3 + 3
+ && memcmp (result, "nan", 3) == 0
+ && strcmp (result + strlen (result) - 3, " 33") == 0);
ASSERT (length == strlen (result));
free (result);
}
static long double zero = 0.0L;
size_t length;
char *result =
- my_asnprintf (NULL, &length, "%015Lg %d", zero / zero, 33, 44, 55);
+ my_asnprintf (NULL, &length, "%020Lg %d", zero / zero, 33, 44, 55);
ASSERT (result != NULL);
- ASSERT (strcmp (result, " nan 33") == 0);
+ ASSERT (strlen (result) == 20 + 3
+ && memcmp (result + strspn (result, " "), "nan", 3) == 0
+ && strcmp (result + strlen (result) - 3, " 33") == 0);
ASSERT (length == strlen (result));
free (result);
}