+2008-08-01 Bruno Haible <bruno@clisp.org>
+
+ Work around bug of HP-UX 10.20 cc with -0.0 literal.
+ * tests/test-isnanf.h (zero): New variable.
+ (main): Avoid literal -0.0f.
+ * tests/test-isnand.h (zero): New variable.
+ (main): Avoid literal -0.0.
+ * tests/test-isnanl.h (zero): New variable.
+ (main): Avoid literal -0.0L.
+ * tests/test-isnan.c (zerof, zerod, zerol): New variables.
+ (test_float, test_double, test_long_double): Avoid literals -0.0f,
+ -0.0, -0.0L.
+ * tests/test-signbit.c (test_signbitf): Avoid literal -0.0f.
+ (test_signbitd): Avoid literal -0.0.
+ (test_signbitl): Avoid literal -0.0L.
+ * tests/test-ceilf1.c (zero): New variable.
+ (main): Avoid literal -0.0f.
+ * tests/test-ceill.c (zero): New variable.
+ (main): Avoid literal -0.0L.
+ * tests/test-floorf1.c (zero): New variable.
+ (main): Avoid literal -0.0f.
+ * tests/test-floorl.c (zero): New variable.
+ (main): Avoid literal -0.0L.
+ * tests/test-roundf1.c (zero): New variable.
+ (main): Avoid literal -0.0f.
+ * tests/test-round1.c (zero): New variable.
+ (main): Avoid literal -0.0.
+ * tests/test-roundl.c (zero): New variable.
+ (main): Avoid literal -0.0L.
+ * tests/test-truncf1.c (zero): New variable.
+ (main): Avoid literal -0.0f.
+ * tests/test-trunc1.c (zero): New variable.
+ (main): Avoid literal -0.0.
+ * tests/test-truncl.c (zero): New variable.
+ (main): Avoid literal -0.0L.
+ * tests/test-frexp.c (zero): New variable.
+ (main): Avoid literal -0.0.
+ * tests/test-frexpl.c (zero): New variable.
+ (main): Avoid literal -0.0L.
+ * tests/test-ldexpl.c (zero): New variable.
+ (main): Avoid literal -0.0L.
+ * tests/test-snprintf-posix.h (have_minus_zero): Avoid literal -0.0.
+ (zerod, zerol): New variables.
+ (test_function): Avoid literals -0.0, -0.0L.
+ * tests/test-sprintf-posix.h (have_minus_zero): Avoid literal -0.0.
+ (zerod, zerol): New variables.
+ (test_function): Avoid literals -0.0, -0.0L.
+ * tests/test-vasnprintf-posix.c (have_minus_zero): Avoid literal -0.0.
+ (zerod, zerol): New variables.
+ (test_function): Avoid literals -0.0, -0.0L.
+ * tests/test-vasprintf-posix.c (have_minus_zero): Avoid literal -0.0.
+ (zerod, zerol): New variables.
+ (test_function): Avoid literals -0.0, -0.0L.
+ * tests/test-strtod.c (zero): New variable.
+ (main): Avoid literal -0.0.
+ Reported by Jonathan C. Patschke <jp@centtech.com>.
+
2008-07-31 Jim Meyering <meyering@redhat.com>
sha256.h: correct definition of SHA224_DIGEST_SIZE
} \
while (0)
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0f.
+ So we use -zero instead. */
+float zero = 0.0f;
+
int
main ()
{
/* Zero. */
ASSERT (ceilf (0.0f) == 0.0f);
- ASSERT (ceilf (-0.0f) == 0.0f);
+ ASSERT (ceilf (-zero) == 0.0f);
/* Positive numbers. */
ASSERT (ceilf (0.3f) == 1.0f);
ASSERT (ceilf (0.7f) == 1.0f);
} \
while (0)
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L.
+ So we use -zero instead. */
+long double zero = 0.0L;
+
int
main ()
{
/* Zero. */
ASSERT (ceill (0.0L) == 0.0L);
- ASSERT (ceill (-0.0L) == 0.0L);
+ ASSERT (ceill (-zero) == 0.0L);
/* Positive numbers. */
ASSERT (ceill (0.3L) == 1.0L);
ASSERT (ceill (0.7L) == 1.0L);
} \
while (0)
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0f.
+ So we use -zero instead. */
+float zero = 0.0f;
+
int
main ()
{
/* Zero. */
ASSERT (floorf (0.0f) == 0.0f);
- ASSERT (floorf (-0.0f) == 0.0f);
+ ASSERT (floorf (-zero) == 0.0f);
/* Positive numbers. */
ASSERT (floorf (0.3f) == 0.0f);
ASSERT (floorf (0.7f) == 0.0f);
} \
while (0)
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L.
+ So we use -zero instead. */
+long double zero = 0.0L;
+
int
main ()
{
/* Zero. */
ASSERT (floorl (0.0L) == 0.0L);
- ASSERT (floorl (-0.0L) == 0.0L);
+ ASSERT (floorl (-zero) == 0.0L);
/* Positive numbers. */
ASSERT (floorl (0.3L) == 0.0L);
ASSERT (floorl (0.7L) == 0.0L);
} \
while (0)
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0.
+ So we use -zero instead. */
+double zero = 0.0;
+
static double
my_ldexp (double x, int d)
{
{ /* Negative zero. */
int exp = -9999;
double mantissa;
- x = -0.0;
+ x = -zero;
mantissa = frexp (x, &exp);
ASSERT (exp == 0);
ASSERT (mantissa == x);
# define MIN_NORMAL_EXP LDBL_MIN_EXP
#endif
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L.
+ So we use -zero instead. */
+long double zero = 0.0L;
+
static long double
my_ldexp (long double x, int d)
{
{ /* Negative zero. */
int exp = -9999;
long double mantissa;
- x = -0.0L;
+ x = -zero;
mantissa = frexpl (x, &exp);
ASSERT (exp == 0);
ASSERT (mantissa == x);
} \
while (0)
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0f.
+ So we use -zero instead. */
+float zerof = 0.0f;
+
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0.
+ So we use -zero instead. */
+double zerod = 0.0;
+
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L.
+ So we use -zero instead. */
+long double zerol = 0.0L;
+
static void
test_float (void)
{
ASSERT (!isnan (-2.718e30f));
ASSERT (!isnan (-2.718e-30f));
ASSERT (!isnan (0.0f));
- ASSERT (!isnan (-0.0f));
+ ASSERT (!isnan (-zerof));
/* Infinite values. */
ASSERT (!isnan (1.0f / 0.0f));
ASSERT (!isnan (-1.0f / 0.0f));
ASSERT (!isnan (-2.718e30));
ASSERT (!isnan (-2.718e-30));
ASSERT (!isnan (0.0));
- ASSERT (!isnan (-0.0));
+ ASSERT (!isnan (-zerod));
/* Infinite values. */
ASSERT (!isnan (1.0 / 0.0));
ASSERT (!isnan (-1.0 / 0.0));
ASSERT (!isnan (-2.718e30L));
ASSERT (!isnan (-2.718e-30L));
ASSERT (!isnan (0.0L));
- ASSERT (!isnan (-0.0L));
+ ASSERT (!isnan (-zerol));
/* Infinite values. */
ASSERT (!isnan (1.0L / 0.0L));
ASSERT (!isnan (-1.0L / 0.0L));
} \
while (0)
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0.
+ So we use -zero instead. */
+double zero = 0.0;
+
int
main ()
{
ASSERT (!isnand (-2.718e30));
ASSERT (!isnand (-2.718e-30));
ASSERT (!isnand (0.0));
- ASSERT (!isnand (-0.0));
+ ASSERT (!isnand (-zero));
/* Infinite values. */
ASSERT (!isnand (1.0 / 0.0));
ASSERT (!isnand (-1.0 / 0.0));
} \
while (0)
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0f.
+ So we use -zero instead. */
+float zero = 0.0f;
+
int
main ()
{
ASSERT (!isnanf (-2.718e30f));
ASSERT (!isnanf (-2.718e-30f));
ASSERT (!isnanf (0.0f));
- ASSERT (!isnanf (-0.0f));
+ ASSERT (!isnanf (-zero));
/* Infinite values. */
ASSERT (!isnanf (1.0f / 0.0f));
ASSERT (!isnanf (-1.0f / 0.0f));
} \
while (0)
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L.
+ So we use -zero instead. */
+long double zero = 0.0L;
+
int
main ()
{
ASSERT (!isnanl (-2.718e30L));
ASSERT (!isnanl (-2.718e-30L));
ASSERT (!isnanl (0.0L));
- ASSERT (!isnanl (-0.0L));
+ ASSERT (!isnanl (-zero));
/* Infinite values. */
ASSERT (!isnanl (1.0L / 0.0L));
ASSERT (!isnanl (-1.0L / 0.0L));
} \
while (0)
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L.
+ So we use -zero instead. */
+long double zero = 0.0L;
+
int
main ()
{
}
{ /* Negative zero. */
- x = -0.0L;
+ x = -zero;
y = ldexpl (x, 0); ASSERT (y == x); ASSERT (signbit (x));
y = ldexpl (x, 5); ASSERT (y == x); ASSERT (signbit (x));
y = ldexpl (x, -5); ASSERT (y == x); ASSERT (signbit (x));
} \
while (0)
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0.
+ So we use -zero instead. */
+double zero = 0.0;
+
int
main ()
{
/* Zero. */
ASSERT (round (0.0) == 0.0);
- ASSERT (round (-0.0) == 0.0);
+ ASSERT (round (-zero) == 0.0);
/* Positive numbers. */
ASSERT (round (0.3) == 0.0);
ASSERT (round (0.5) == 1.0);
} \
while (0)
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0f.
+ So we use -zero instead. */
+float zero = 0.0f;
+
int
main ()
{
/* Zero. */
ASSERT (roundf (0.0f) == 0.0f);
- ASSERT (roundf (-0.0f) == 0.0f);
+ ASSERT (roundf (-zero) == 0.0f);
/* Positive numbers. */
ASSERT (roundf (0.3f) == 0.0f);
ASSERT (roundf (0.5f) == 1.0f);
} \
while (0)
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L.
+ So we use -zero instead. */
+long double zero = 0.0L;
+
int
main ()
{
/* Zero. */
ASSERT (roundl (0.0L) == 0.0L);
- ASSERT (roundl (-0.0L) == 0.0L);
+ ASSERT (roundl (-zero) == 0.0L);
/* Positive numbers. */
ASSERT (roundl (0.3L) == 0.0L);
ASSERT (roundl (0.5L) == 1.0L);
/* Zeros. */
ASSERT (!signbit (0.0f));
if (1.0f / -zerof < 0)
- ASSERT (signbit (-0.0f));
+ ASSERT (signbit (-zerof));
else
- ASSERT (!signbit (-0.0f));
+ ASSERT (!signbit (-zerof));
/* Infinite values. */
ASSERT (!signbit (1.0f / 0.0f));
ASSERT (signbit (-1.0f / 0.0f));
/* Zeros. */
ASSERT (!signbit (0.0));
if (1.0 / -zerod < 0)
- ASSERT (signbit (-0.0));
+ ASSERT (signbit (-zerod));
else
- ASSERT (!signbit (-0.0));
+ ASSERT (!signbit (-zerod));
/* Infinite values. */
ASSERT (!signbit (1.0 / 0.0));
ASSERT (signbit (-1.0 / 0.0));
/* Zeros. */
ASSERT (!signbit (0.0L));
if (1.0L / minus_zerol < 0)
- ASSERT (signbit (-0.0L));
+ ASSERT (signbit (-zerol));
else
- ASSERT (!signbit (-0.0L));
+ ASSERT (!signbit (-zerol));
/* Infinite values. */
ASSERT (!signbit (1.0L / 0.0L));
ASSERT (signbit (-1.0L / 0.0L));
have_minus_zero ()
{
static double plus_zero = 0.0;
- static double minus_zero = -0.0;
+ double minus_zero = - plus_zero;
return memcmp (&plus_zero, &minus_zero, sizeof (double)) != 0;
}
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0.
+ So we use -zero instead. */
+double zerod = 0.0;
+
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L.
+ So we use -zero instead. */
+long double zerol = 0.0L;
+
/* Representation of an 80-bit 'long double' as an initializer for a sequence
of 'unsigned int' words. */
#ifdef WORDS_BIGENDIAN
{ /* Negative zero. */
char result[100];
int retval =
- my_snprintf (result, sizeof (result), "%a %d", -0.0, 33, 44, 55);
+ my_snprintf (result, sizeof (result), "%a %d", -zerod, 33, 44, 55);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0x0p+0 33") == 0);
ASSERT (retval == strlen (result));
{ /* Negative zero. */
char result[100];
int retval =
- my_snprintf (result, sizeof (result), "%La %d", -0.0L, 33, 44, 55);
+ my_snprintf (result, sizeof (result), "%La %d", -zerol, 33, 44, 55);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0x0p+0 33") == 0);
ASSERT (retval == strlen (result));
{ /* Negative zero. */
char result[100];
int retval =
- my_snprintf (result, sizeof (result), "%f %d", -0.0, 33, 44, 55);
+ my_snprintf (result, sizeof (result), "%f %d", -zerod, 33, 44, 55);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0.000000 33") == 0);
ASSERT (retval == strlen (result));
{ /* Negative zero. */
char result[100];
int retval =
- my_snprintf (result, sizeof (result), "%Lf %d", -0.0L, 33, 44, 55);
+ my_snprintf (result, sizeof (result), "%Lf %d", -zerol, 33, 44, 55);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0.000000 33") == 0);
ASSERT (retval == strlen (result));
{ /* Negative zero. */
char result[100];
int retval =
- my_snprintf (result, sizeof (result), "%F %d", -0.0, 33, 44, 55);
+ my_snprintf (result, sizeof (result), "%F %d", -zerod, 33, 44, 55);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0.000000 33") == 0);
ASSERT (retval == strlen (result));
{ /* Negative zero. */
char result[100];
int retval =
- my_snprintf (result, sizeof (result), "%LF %d", -0.0L, 33, 44, 55);
+ my_snprintf (result, sizeof (result), "%LF %d", -zerol, 33, 44, 55);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0.000000 33") == 0);
ASSERT (retval == strlen (result));
{ /* Negative zero. */
char result[100];
int retval =
- my_snprintf (result, sizeof (result), "%e %d", -0.0, 33, 44, 55);
+ my_snprintf (result, sizeof (result), "%e %d", -zerod, 33, 44, 55);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0.000000e+00 33") == 0
|| strcmp (result, "-0.000000e+000 33") == 0);
{ /* Negative zero. */
char result[100];
int retval =
- my_snprintf (result, sizeof (result), "%Le %d", -0.0L, 33, 44, 55);
+ my_snprintf (result, sizeof (result), "%Le %d", -zerol, 33, 44, 55);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0.000000e+00 33") == 0);
ASSERT (retval == strlen (result));
{ /* Negative zero. */
char result[100];
int retval =
- my_snprintf (result, sizeof (result), "%g %d", -0.0, 33, 44, 55);
+ my_snprintf (result, sizeof (result), "%g %d", -zerod, 33, 44, 55);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0 33") == 0);
ASSERT (retval == strlen (result));
{ /* Negative zero. */
char result[100];
int retval =
- my_snprintf (result, sizeof (result), "%Lg %d", -0.0L, 33, 44, 55);
+ my_snprintf (result, sizeof (result), "%Lg %d", -zerol, 33, 44, 55);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0 33") == 0);
ASSERT (retval == strlen (result));
have_minus_zero ()
{
static double plus_zero = 0.0;
- static double minus_zero = -0.0;
+ double minus_zero = - plus_zero;
return memcmp (&plus_zero, &minus_zero, sizeof (double)) != 0;
}
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0.
+ So we use -zero instead. */
+double zerod = 0.0;
+
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L.
+ So we use -zero instead. */
+long double zerol = 0.0L;
+
/* Representation of an 80-bit 'long double' as an initializer for a sequence
of 'unsigned int' words. */
#ifdef WORDS_BIGENDIAN
{ /* Negative zero. */
char result[1000];
int retval =
- my_sprintf (result, "%a %d", -0.0, 33, 44, 55);
+ my_sprintf (result, "%a %d", -zerod, 33, 44, 55);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0x0p+0 33") == 0);
ASSERT (retval == strlen (result));
{ /* Negative zero. */
char result[1000];
int retval =
- my_sprintf (result, "%La %d", -0.0L, 33, 44, 55);
+ my_sprintf (result, "%La %d", -zerol, 33, 44, 55);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0x0p+0 33") == 0);
ASSERT (retval == strlen (result));
{ /* Negative zero. */
char result[1000];
int retval =
- my_sprintf (result, "%f %d", -0.0, 33, 44, 55);
+ my_sprintf (result, "%f %d", -zerod, 33, 44, 55);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0.000000 33") == 0);
ASSERT (retval == strlen (result));
{ /* Negative zero. */
char result[1000];
int retval =
- my_sprintf (result, "%Lf %d", -0.0L, 33, 44, 55);
+ my_sprintf (result, "%Lf %d", -zerol, 33, 44, 55);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0.000000 33") == 0);
ASSERT (retval == strlen (result));
{ /* Negative zero. */
char result[1000];
int retval =
- my_sprintf (result, "%F %d", -0.0, 33, 44, 55);
+ my_sprintf (result, "%F %d", -zerod, 33, 44, 55);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0.000000 33") == 0);
ASSERT (retval == strlen (result));
{ /* Negative zero. */
char result[1000];
int retval =
- my_sprintf (result, "%LF %d", -0.0L, 33, 44, 55);
+ my_sprintf (result, "%LF %d", -zerol, 33, 44, 55);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0.000000 33") == 0);
ASSERT (retval == strlen (result));
{ /* Negative zero. */
char result[1000];
int retval =
- my_sprintf (result, "%e %d", -0.0, 33, 44, 55);
+ my_sprintf (result, "%e %d", -zerod, 33, 44, 55);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0.000000e+00 33") == 0
|| strcmp (result, "-0.000000e+000 33") == 0);
{ /* Negative zero. */
char result[1000];
int retval =
- my_sprintf (result, "%Le %d", -0.0L, 33, 44, 55);
+ my_sprintf (result, "%Le %d", -zerol, 33, 44, 55);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0.000000e+00 33") == 0);
ASSERT (retval == strlen (result));
{ /* Negative zero. */
char result[1000];
int retval =
- my_sprintf (result, "%g %d", -0.0, 33, 44, 55);
+ my_sprintf (result, "%g %d", -zerod, 33, 44, 55);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0 33") == 0);
ASSERT (retval == strlen (result));
{ /* Negative zero. */
char result[1000];
int retval =
- my_sprintf (result, "%Lg %d", -0.0L, 33, 44, 55);
+ my_sprintf (result, "%Lg %d", -zerol, 33, 44, 55);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0 33") == 0);
ASSERT (retval == strlen (result));
/* Avoid requiring -lm just for fabs. */
#define FABS(d) ((d) < 0.0 ? -(d) : (d))
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0.
+ So we use -zero instead. */
+double zero = 0.0;
+
int
main ()
{
errno = 0;
result = strtod (input, &ptr);
ASSERT (result == 0.0);
- ASSERT (!!signbit (result) == !!signbit (-0.0)); /* IRIX 6.5, OSF/1 4.0 */
+ ASSERT (!!signbit (result) == !!signbit (-zero)); /* IRIX 6.5, OSF/1 4.0 */
ASSERT (ptr == input + 2);
ASSERT (errno == 0);
}
errno = 0;
result = strtod (input, &ptr);
ASSERT (result == 0.0);
- ASSERT (!!signbit (result) == !!signbit (-0.0)); /* MacOS X 10.3, FreeBSD 6.2, IRIX 6.5, OSF/1 4.0 */
+ ASSERT (!!signbit (result) == !!signbit (-zero)); /* MacOS X 10.3, FreeBSD 6.2, IRIX 6.5, OSF/1 4.0 */
ASSERT (ptr == input + 2); /* glibc-2.3.6, MacOS X 10.3, FreeBSD 6.2 */
ASSERT (errno == 0);
}
0 on negative underflow, even though quality of implementation
demands preserving the sign. Disable this test until fixed
glibc is more prevalent. */
- ASSERT (!!signbit (result) == !!signbit (-0.0)); /* glibc-2.3.6, mingw */
+ ASSERT (!!signbit (result) == !!signbit (-zero)); /* glibc-2.3.6, mingw */
#endif
ASSERT (ptr == input + 10);
ASSERT (errno == ERANGE);
errno = 0;
result = strtod (input, &ptr);
ASSERT (result == 0.0);
- ASSERT (!!signbit (result) == !!signbit (-0.0)); /* IRIX 6.5, OSF/1 4.0 */
+ ASSERT (!!signbit (result) == !!signbit (-zero)); /* IRIX 6.5, OSF/1 4.0 */
ASSERT (ptr == input + m);
ASSERT (errno == 0);
}
} \
while (0)
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0.
+ So we use -zero instead. */
+double zero = 0.0;
+
int
main ()
{
/* Zero. */
ASSERT (trunc (0.0) == 0.0);
- ASSERT (trunc (-0.0) == 0.0);
+ ASSERT (trunc (-zero) == 0.0);
/* Positive numbers. */
ASSERT (trunc (0.3) == 0.0);
ASSERT (trunc (0.7) == 0.0);
} \
while (0)
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0f.
+ So we use -zero instead. */
+float zero = 0.0f;
+
int
main ()
{
/* Zero. */
ASSERT (truncf (0.0f) == 0.0f);
- ASSERT (truncf (-0.0f) == 0.0f);
+ ASSERT (truncf (-zero) == 0.0f);
/* Positive numbers. */
ASSERT (truncf (0.3f) == 0.0f);
ASSERT (truncf (0.7f) == 0.0f);
} \
while (0)
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L.
+ So we use -zero instead. */
+long double zero = 0.0L;
+
int
main ()
{
/* Zero. */
ASSERT (truncl (0.0L) == 0.0L);
- ASSERT (truncl (-0.0L) == 0.0L);
+ ASSERT (truncl (-zero) == 0.0L);
/* Positive numbers. */
ASSERT (truncl (0.3L) == 0.0L);
ASSERT (truncl (0.7L) == 0.0L);
have_minus_zero ()
{
static double plus_zero = 0.0;
- static double minus_zero = -0.0;
+ double minus_zero = - plus_zero;
return memcmp (&plus_zero, &minus_zero, sizeof (double)) != 0;
}
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0.
+ So we use -zero instead. */
+double zerod = 0.0;
+
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L.
+ So we use -zero instead. */
+long double zerol = 0.0L;
+
/* Representation of an 80-bit 'long double' as an initializer for a sequence
of 'unsigned int' words. */
#ifdef WORDS_BIGENDIAN
{ /* Negative zero. */
size_t length;
char *result =
- my_asnprintf (NULL, &length, "%a %d", -0.0, 33, 44, 55);
+ my_asnprintf (NULL, &length, "%a %d", -zerod, 33, 44, 55);
ASSERT (result != NULL);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0x0p+0 33") == 0);
{ /* Negative zero. */
size_t length;
char *result =
- my_asnprintf (NULL, &length, "%La %d", -0.0L, 33, 44, 55);
+ my_asnprintf (NULL, &length, "%La %d", -zerol, 33, 44, 55);
ASSERT (result != NULL);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0x0p+0 33") == 0);
{ /* Negative zero. */
size_t length;
char *result =
- my_asnprintf (NULL, &length, "%f %d", -0.0, 33, 44, 55);
+ my_asnprintf (NULL, &length, "%f %d", -zerod, 33, 44, 55);
ASSERT (result != NULL);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0.000000 33") == 0);
{ /* Negative zero. */
size_t length;
char *result =
- my_asnprintf (NULL, &length, "%Lf %d", -0.0L, 33, 44, 55);
+ my_asnprintf (NULL, &length, "%Lf %d", -zerol, 33, 44, 55);
ASSERT (result != NULL);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0.000000 33") == 0);
{ /* Negative zero. */
size_t length;
char *result =
- my_asnprintf (NULL, &length, "%F %d", -0.0, 33, 44, 55);
+ my_asnprintf (NULL, &length, "%F %d", -zerod, 33, 44, 55);
ASSERT (result != NULL);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0.000000 33") == 0);
{ /* Negative zero. */
size_t length;
char *result =
- my_asnprintf (NULL, &length, "%LF %d", -0.0L, 33, 44, 55);
+ my_asnprintf (NULL, &length, "%LF %d", -zerol, 33, 44, 55);
ASSERT (result != NULL);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0.000000 33") == 0);
{ /* Negative zero. */
size_t length;
char *result =
- my_asnprintf (NULL, &length, "%e %d", -0.0, 33, 44, 55);
+ my_asnprintf (NULL, &length, "%e %d", -zerod, 33, 44, 55);
ASSERT (result != NULL);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0.000000e+00 33") == 0
{ /* Negative zero. */
size_t length;
char *result =
- my_asnprintf (NULL, &length, "%Le %d", -0.0L, 33, 44, 55);
+ my_asnprintf (NULL, &length, "%Le %d", -zerol, 33, 44, 55);
ASSERT (result != NULL);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0.000000e+00 33") == 0);
{ /* Negative zero. */
size_t length;
char *result =
- my_asnprintf (NULL, &length, "%g %d", -0.0, 33, 44, 55);
+ my_asnprintf (NULL, &length, "%g %d", -zerod, 33, 44, 55);
ASSERT (result != NULL);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0 33") == 0);
{ /* Negative zero. */
size_t length;
char *result =
- my_asnprintf (NULL, &length, "%Lg %d", -0.0L, 33, 44, 55);
+ my_asnprintf (NULL, &length, "%Lg %d", -zerol, 33, 44, 55);
ASSERT (result != NULL);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0 33") == 0);
have_minus_zero ()
{
static double plus_zero = 0.0;
- static double minus_zero = -0.0;
+ double minus_zero = - plus_zero;
return memcmp (&plus_zero, &minus_zero, sizeof (double)) != 0;
}
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0.
+ So we use -zero instead. */
+double zerod = 0.0;
+
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L.
+ So we use -zero instead. */
+long double zerol = 0.0L;
+
/* Representation of an 80-bit 'long double' as an initializer for a sequence
of 'unsigned int' words. */
#ifdef WORDS_BIGENDIAN
{ /* Negative zero. */
char *result;
int retval =
- my_asprintf (&result, "%a %d", -0.0, 33, 44, 55);
+ my_asprintf (&result, "%a %d", -zerod, 33, 44, 55);
ASSERT (result != NULL);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0x0p+0 33") == 0);
{ /* Negative zero. */
char *result;
int retval =
- my_asprintf (&result, "%La %d", -0.0L, 33, 44, 55);
+ my_asprintf (&result, "%La %d", -zerol, 33, 44, 55);
ASSERT (result != NULL);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0x0p+0 33") == 0);
{ /* Negative zero. */
char *result;
int retval =
- my_asprintf (&result, "%f %d", -0.0, 33, 44, 55);
+ my_asprintf (&result, "%f %d", -zerod, 33, 44, 55);
ASSERT (result != NULL);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0.000000 33") == 0);
{ /* Negative zero. */
char *result;
int retval =
- my_asprintf (&result, "%Lf %d", -0.0L, 33, 44, 55);
+ my_asprintf (&result, "%Lf %d", -zerol, 33, 44, 55);
ASSERT (result != NULL);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0.000000 33") == 0);
{ /* Negative zero. */
char *result;
int retval =
- my_asprintf (&result, "%F %d", -0.0, 33, 44, 55);
+ my_asprintf (&result, "%F %d", -zerod, 33, 44, 55);
ASSERT (result != NULL);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0.000000 33") == 0);
{ /* Negative zero. */
char *result;
int retval =
- my_asprintf (&result, "%LF %d", -0.0L, 33, 44, 55);
+ my_asprintf (&result, "%LF %d", -zerol, 33, 44, 55);
ASSERT (result != NULL);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0.000000 33") == 0);
{ /* Negative zero. */
char *result;
int retval =
- my_asprintf (&result, "%e %d", -0.0, 33, 44, 55);
+ my_asprintf (&result, "%e %d", -zerod, 33, 44, 55);
ASSERT (result != NULL);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0.000000e+00 33") == 0
{ /* Negative zero. */
char *result;
int retval =
- my_asprintf (&result, "%Le %d", -0.0L, 33, 44, 55);
+ my_asprintf (&result, "%Le %d", -zerol, 33, 44, 55);
ASSERT (result != NULL);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0.000000e+00 33") == 0);
{ /* Negative zero. */
char *result;
int retval =
- my_asprintf (&result, "%g %d", -0.0, 33, 44, 55);
+ my_asprintf (&result, "%g %d", -zerod, 33, 44, 55);
ASSERT (result != NULL);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0 33") == 0);
{ /* Negative zero. */
char *result;
int retval =
- my_asprintf (&result, "%Lg %d", -0.0L, 33, 44, 55);
+ my_asprintf (&result, "%Lg %d", -zerol, 33, 44, 55);
ASSERT (result != NULL);
if (have_minus_zero ())
ASSERT (strcmp (result, "-0 33") == 0);