Use a more portable replacement expression for -0.0L.
authorBruno Haible <bruno@clisp.org>
Wed, 8 Oct 2008 00:05:26 +0000 (02:05 +0200)
committerBruno Haible <bruno@clisp.org>
Wed, 8 Oct 2008 00:05:26 +0000 (02:05 +0200)
31 files changed:
ChangeLog
m4/signbit.m4
modules/ceill-tests
modules/floorl-tests
modules/frexpl-tests
modules/isnan-tests
modules/isnanl-nolibm-tests
modules/isnanl-tests
modules/ldexpl-tests
modules/roundl-tests
modules/signbit-tests
modules/snprintf-posix-tests
modules/sprintf-posix-tests
modules/truncl-tests
modules/vasnprintf-posix-tests
modules/vasprintf-posix-tests
modules/vsnprintf-posix-tests
modules/vsprintf-posix-tests
tests/test-ceill.c
tests/test-floorl.c
tests/test-frexpl.c
tests/test-isnan.c
tests/test-isnanl.h
tests/test-ldexpl.c
tests/test-roundl.c
tests/test-signbit.c
tests/test-snprintf-posix.h
tests/test-sprintf-posix.h
tests/test-truncl.c
tests/test-vasnprintf-posix.c
tests/test-vasprintf-posix.c

index 04d5f43..931b308 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,81 @@
+2008-10-07  Bruno Haible  <bruno@clisp.org>
+
+       Use a more portable replacement expression for -0.0L.
+       * m4/signbit.m4 (gl_SIGNBIT_TEST_PROGRAM): Use -LDBL_MIN * LDBL_MIN
+       instead of -0.0L. Fix m4 quotation.
+
+       * tests/test-signbit.c: Include <float.h>.
+       (minus_zero): New variable.
+       (test_signbitl): Use minus_zero instead of -zero.
+       * modules/signbit-tests (Depends-on): Add float.
+
+       * tests/test-ceill.c: Include <float.h>.
+       (zero): Remove variable.
+       (minus_zero): New variable.
+       (main): Use minus_zero instead of -zero.
+       * modules/ceill-tests (Depends-on): Add float.
+
+       * tests/test-floorl.c: Include <float.h>.
+       (zero): Remove variable.
+       (minus_zero): New variable.
+       (main): Use minus_zero instead of -zero.
+       * modules/floorl-tests (Depends-on): Add float.
+
+       * tests/test-roundl.c: Include <float.h>.
+       (zero): Remove variable.
+       (minus_zero): New variable.
+       (main): Use minus_zero instead of -zero.
+       * modules/roundl-tests (Depends-on): Add float.
+
+       * tests/test-truncl.c: Include <float.h>.
+       (zero): Remove variable.
+       (minus_zero): New variable.
+       (main): Use minus_zero instead of -zero.
+       * modules/truncl-tests (Depends-on): Add float.
+
+       * tests/test-frexpl.c (zero): Remove variable.
+       (minus_zero): New variable.
+       (main): Use minus_zero instead of -zero.
+       * modules/frexpl-tests (Depends-on): Add float.
+
+       * tests/test-isnan.c (zerol): Remove variable.
+       (minus_zerol): New variable.
+       (test_long_double): Use minus_zerol instead of -zerol.
+       * modules/isnan-tests (Depends-on): Add float.
+
+       * tests/test-isnanl.h (zero): Remove variable.
+       (minus_zero): New variable.
+       (main): Use minus_zero instead of -zero.
+       * modules/isnanl-nolibm-tests (Depends-on): Add float.
+       * modules/isnanl-tests (Depends-on): Add float.
+
+       * tests/test-ldexpl.c (zero): Remove variable.
+       (minus_zero): New variable.
+       (main): Use minus_zero instead of -zero.
+       * modules/ldexpl-tests (Depends-on): Add float.
+
+       * tests/test-snprintf-posix.h (zerol): Remove variable.
+       (minus_zerol): New variable.
+       (test_function): Use minus_zerol instead of -zerol.
+       * modules/snprintf-posix-tests (Depends-on): Add float.
+       * modules/vsnprintf-posix-tests (Depends-on): Add float.
+
+       * tests/test-sprintf-posix.h (zerol): Remove variable.
+       (minus_zerol): New variable.
+       (test_function): Use minus_zerol instead of -zerol.
+       * modules/sprintf-posix-tests (Depends-on): Add float.
+       * modules/vsprintf-posix-tests (Depends-on): Add float.
+
+       * tests/test-vasnprintf-posix.c (zerol): Remove variable.
+       (minus_zerol): New variable.
+       (test_function): Use minus_zerol instead of -zerol.
+       * modules/vasnprintf-posix-tests (Depends-on): Add float.
+
+       * tests/test-vasprintf-posix.c (zerol): Remove variable.
+       (minus_zerol): New variable.
+       (test_function): Use minus_zerol instead of -zerol.
+       * modules/vasprintf-posix-tests (Depends-on): Add float.
+
 2008-10-07  Simon Josefsson  <simon@josefsson.org>
 
        * MODULES.html.sh (Support for building documentation): Mention
index 1748453..40ef49c 100644 (file)
@@ -1,4 +1,4 @@
-# signbit.m4 serial 3
+# signbit.m4 serial 4
 dnl Copyright (C) 2007-2008 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -123,15 +123,21 @@ AC_DEFUN([gl_SIGNBIT],
   fi
 ])
 
-AC_DEFUN([gl_SIGNBIT_TEST_PROGRAM], [
+AC_DEFUN([gl_SIGNBIT_TEST_PROGRAM], [[
 /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0.
-   So we use -p0f instead.  */
+   So we use -p0f and -p0d instead.  */
 float p0f = 0.0f;
 float m0f = -p0f;
 double p0d = 0.0;
 double m0d = -p0d;
+/* On HP-UX 10.20, negating 0.0L does not yield -0.0L.
+   So we use another constant expression instead.  */
 long double p0l = 0.0L;
+#ifdef __hpux
+long double m0l = -LDBL_MIN * LDBL_MIN;
+#else
 long double m0l = -p0l;
+#endif
 int main ()
 {
   {
@@ -169,7 +175,7 @@ int main ()
   }
   return 0;
 }
-])
+]])
 
 AC_DEFUN([gl_FLOAT_SIGN_LOCATION],
 [
index ef0bc8f..381b3a5 100644 (file)
@@ -4,6 +4,7 @@ tests/test-ceill.c
 Depends-on:
 fpucw
 isnanl-nolibm
+float
 
 configure.ac:
 
index 4354d66..7aef91d 100644 (file)
@@ -4,6 +4,7 @@ tests/test-floorl.c
 Depends-on:
 fpucw
 isnanl-nolibm
+float
 
 configure.ac:
 
index 572265d..e3b2d55 100644 (file)
@@ -5,6 +5,7 @@ Depends-on:
 fpucw
 isnanl-nolibm
 signbit
+float
 
 configure.ac:
 
index f06a783..d5aff2a 100644 (file)
@@ -3,6 +3,7 @@ tests/test-isnan.c
 tests/nan.h
 
 Depends-on:
+float
 
 configure.ac:
 gl_FLOAT_EXPONENT_LOCATION
index e69130d..a2e241c 100644 (file)
@@ -3,6 +3,7 @@ tests/test-isnanl-nolibm.c
 tests/test-isnanl.h
 
 Depends-on:
+float
 
 configure.ac:
 gl_LONG_DOUBLE_EXPONENT_LOCATION
index 4194c4f..7b4086e 100644 (file)
@@ -3,6 +3,7 @@ tests/test-isnanl.c
 tests/test-isnanl.h
 
 Depends-on:
+float
 
 configure.ac:
 gl_LONG_DOUBLE_EXPONENT_LOCATION
index 7421227..6c88bfd 100644 (file)
@@ -5,6 +5,7 @@ Depends-on:
 fpucw
 isnanl-nolibm
 signbit
+float
 
 configure.ac:
 
index 957c934..8e329a5 100644 (file)
@@ -4,6 +4,7 @@ tests/test-roundl.c
 Depends-on:
 fpucw
 isnanl-nolibm
+float
 
 configure.ac:
 
index 86d66bf..25851c9 100644 (file)
@@ -5,6 +5,7 @@ m4/exponentd.m4
 m4/exponentl.m4
 
 Depends-on:
+float
 
 configure.ac:
 AC_REQUIRE([gl_FLOAT_EXPONENT_LOCATION])
index 5af4266..f3c08c7 100644 (file)
@@ -6,6 +6,7 @@ tests/nan.h
 
 Depends-on:
 stdint
+float
 
 configure.ac:
 AC_DEFINE([CHECK_SNPRINTF_POSIX], 1,
index cf67204..7ed1fb5 100644 (file)
@@ -5,6 +5,7 @@ tests/nan.h
 
 Depends-on:
 stdint
+float
 
 configure.ac:
 
index aeb76af..2365854 100644 (file)
@@ -4,6 +4,7 @@ tests/test-truncl.c
 Depends-on:
 fpucw
 isnanl-nolibm
+float
 
 configure.ac:
 
index f46fffa..88e5b46 100644 (file)
@@ -7,6 +7,7 @@ m4/locale-fr.m4
 
 Depends-on:
 stdint
+float
 
 configure.ac:
 gt_LOCALE_FR
index 221ccd1..bf4bd34 100644 (file)
@@ -4,6 +4,7 @@ tests/nan.h
 
 Depends-on:
 stdint
+float
 
 configure.ac:
 
index 3b45e44..f099bd6 100644 (file)
@@ -6,6 +6,7 @@ tests/nan.h
 
 Depends-on:
 stdint
+float
 
 configure.ac:
 AC_DEFINE([CHECK_VSNPRINTF_POSIX], 1,
index e48d5ae..2d052e9 100644 (file)
@@ -5,6 +5,7 @@ tests/nan.h
 
 Depends-on:
 stdint
+float
 
 configure.ac:
 
index 80ff75b..2fa6ca1 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <math.h>
 
+#include <float.h>
 #include <stdio.h>
 #include <stdlib.h>
 
@@ -38,9 +39,9 @@
     }                                                                       \
   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;
+/* On HP-UX 10.20, negating 0.0L does not yield -0.0L.
+   So we use minus_zero instead.  */
+long double minus_zero = -LDBL_MIN * LDBL_MIN;
 
 int
 main ()
@@ -51,7 +52,7 @@ main ()
 
   /* Zero.  */
   ASSERT (ceill (0.0L) == 0.0L);
-  ASSERT (ceill (-zero) == 0.0L);
+  ASSERT (ceill (minus_zero) == 0.0L);
   /* Positive numbers.  */
   ASSERT (ceill (0.3L) == 1.0L);
   ASSERT (ceill (0.7L) == 1.0L);
index 49cc8c2..f090c9c 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <math.h>
 
+#include <float.h>
 #include <stdio.h>
 #include <stdlib.h>
 
@@ -38,9 +39,9 @@
     }                                                                       \
   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;
+/* On HP-UX 10.20, negating 0.0L does not yield -0.0L.
+   So we use minus_zero instead.  */
+long double minus_zero = -LDBL_MIN * LDBL_MIN;
 
 int
 main ()
@@ -51,7 +52,7 @@ main ()
 
   /* Zero.  */
   ASSERT (floorl (0.0L) == 0.0L);
-  ASSERT (floorl (-zero) == 0.0L);
+  ASSERT (floorl (minus_zero) == 0.0L);
   /* Positive numbers.  */
   ASSERT (floorl (0.3L) == 0.0L);
   ASSERT (floorl (0.7L) == 0.0L);
index a91afce..f98bf51 100644 (file)
@@ -57,9 +57,9 @@
 # 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;
+/* On HP-UX 10.20, negating 0.0L does not yield -0.0L.
+   So we use minus_zero instead.  */
+long double minus_zero = -LDBL_MIN * LDBL_MIN;
 
 static long double
 my_ldexp (long double x, int d)
@@ -117,7 +117,7 @@ main ()
   { /* Negative zero.  */
     int exp = -9999;
     long double mantissa;
-    x = -zero;
+    x = minus_zero;
     mantissa = frexpl (x, &exp);
     ASSERT (exp == 0);
     ASSERT (mantissa == x);
index ed3e827..bb925cb 100644 (file)
@@ -48,9 +48,9 @@ float zerof = 0.0f;
    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;
+/* On HP-UX 10.20, negating 0.0L does not yield -0.0L.
+   So we use minus_zerol instead.  */
+long double minus_zerol = -LDBL_MIN * LDBL_MIN;
 
 static void
 test_float (void)
@@ -146,7 +146,7 @@ test_long_double (void)
   ASSERT (!isnan (-2.718e30L));
   ASSERT (!isnan (-2.718e-30L));
   ASSERT (!isnan (0.0L));
-  ASSERT (!isnan (-zerol));
+  ASSERT (!isnan (minus_zerol));
   /* Infinite values.  */
   ASSERT (!isnan (1.0L / 0.0L));
   ASSERT (!isnan (-1.0L / 0.0L));
index d897190..1315475 100644 (file)
@@ -33,9 +33,9 @@
     }                                                                       \
   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;
+/* On HP-UX 10.20, negating 0.0L does not yield -0.0L.
+   So we use minus_zero instead.  */
+long double minus_zero = -LDBL_MIN * LDBL_MIN;
 
 int
 main ()
@@ -53,7 +53,7 @@ main ()
   ASSERT (!isnanl (-2.718e30L));
   ASSERT (!isnanl (-2.718e-30L));
   ASSERT (!isnanl (0.0L));
-  ASSERT (!isnanl (-zero));
+  ASSERT (!isnanl (minus_zero));
   /* Infinite values.  */
   ASSERT (!isnanl (1.0L / 0.0L));
   ASSERT (!isnanl (-1.0L / 0.0L));
index 322c063..4b5ea32 100644 (file)
@@ -39,9 +39,9 @@
     }                                                                       \
   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;
+/* On HP-UX 10.20, negating 0.0L does not yield -0.0L.
+   So we use minus_zero instead.  */
+long double minus_zero = -LDBL_MIN * LDBL_MIN;
 
 int
 main ()
@@ -82,7 +82,7 @@ main ()
   }
 
   { /* Negative zero.  */
-    x = -zero;
+    x = minus_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));
index ae4d346..88cb854 100644 (file)
@@ -22,6 +22,7 @@
 
 #include <math.h>
 
+#include <float.h>
 #include <stdio.h>
 #include <stdlib.h>
 
@@ -40,9 +41,9 @@
     }                                                                       \
   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;
+/* On HP-UX 10.20, negating 0.0L does not yield -0.0L.
+   So we use minus_zero instead.  */
+long double minus_zero = -LDBL_MIN * LDBL_MIN;
 
 int
 main ()
@@ -53,7 +54,7 @@ main ()
 
   /* Zero.  */
   ASSERT (roundl (0.0L) == 0.0L);
-  ASSERT (roundl (-zero) == 0.0L);
+  ASSERT (roundl (minus_zero) == 0.0L);
   /* Positive numbers.  */
   ASSERT (roundl (0.3L) == 0.0L);
   ASSERT (roundl (0.5L) == 1.0L);
index 95ba613..94cab37 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <math.h>
 
+#include <float.h>
 #include <limits.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -40,6 +41,16 @@ float zerof = 0.0f;
 double zerod = 0.0;
 long double zerol = 0.0L;
 
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0f.
+   So we use -zerof instead.  */
+
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0.
+   So we use -zerod instead.  */
+
+/* On HP-UX 10.20, negating 0.0L does not yield -0.0L.
+   So we use minus_zerol instead.  */
+long double minus_zerol = -LDBL_MIN * LDBL_MIN;
+
 static void
 test_signbitf ()
 {
@@ -140,10 +151,10 @@ test_signbitl ()
   ASSERT (signbit (-2.718e-30L));
   /* Zeros.  */
   ASSERT (!signbit (0.0L));
-  if (1.0L / -zerol < 0)
-    ASSERT (signbit (-zerol));
+  if (1.0L / minus_zerol < 0)
+    ASSERT (signbit (minus_zerol));
   else
-    ASSERT (!signbit (-zerol));
+    ASSERT (!signbit (minus_zerol));
   /* Infinite values.  */
   ASSERT (!signbit (1.0L / 0.0L));
   ASSERT (signbit (-1.0L / 0.0L));
index f603133..58dfbe2 100644 (file)
@@ -28,12 +28,12 @@ have_minus_zero ()
 }
 
 /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0.
-   So we use -zero instead.  */
+   So we use -zerod 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;
+/* On HP-UX 10.20, negating 0.0L does not yield -0.0L.
+   So we use minus_zerol instead.  */
+long double minus_zerol = -LDBL_MIN * LDBL_MIN;
 
 /* Representation of an 80-bit 'long double' as an initializer for a sequence
    of 'unsigned int' words.  */
@@ -444,7 +444,7 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...))
   { /* Negative zero.  */
     char result[100];
     int retval =
-      my_snprintf (result, sizeof (result), "%La %d", -zerol, 33, 44, 55);
+      my_snprintf (result, sizeof (result), "%La %d", minus_zerol, 33, 44, 55);
     if (have_minus_zero ())
       ASSERT (strcmp (result, "-0x0p+0 33") == 0);
     ASSERT (retval == strlen (result));
@@ -1146,7 +1146,7 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...))
   { /* Negative zero.  */
     char result[100];
     int retval =
-      my_snprintf (result, sizeof (result), "%Lf %d", -zerol, 33, 44, 55);
+      my_snprintf (result, sizeof (result), "%Lf %d", minus_zerol, 33, 44, 55);
     if (have_minus_zero ())
       ASSERT (strcmp (result, "-0.000000 33") == 0);
     ASSERT (retval == strlen (result));
@@ -1513,7 +1513,7 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...))
   { /* Negative zero.  */
     char result[100];
     int retval =
-      my_snprintf (result, sizeof (result), "%LF %d", -zerol, 33, 44, 55);
+      my_snprintf (result, sizeof (result), "%LF %d", minus_zerol, 33, 44, 55);
     if (have_minus_zero ())
       ASSERT (strcmp (result, "-0.000000 33") == 0);
     ASSERT (retval == strlen (result));
@@ -2015,7 +2015,7 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...))
   { /* Negative zero.  */
     char result[100];
     int retval =
-      my_snprintf (result, sizeof (result), "%Le %d", -zerol, 33, 44, 55);
+      my_snprintf (result, sizeof (result), "%Le %d", minus_zerol, 33, 44, 55);
     if (have_minus_zero ())
       ASSERT (strcmp (result, "-0.000000e+00 33") == 0
              || strcmp (result, "-0.000000e+000 33") == 0);
@@ -2668,7 +2668,7 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...))
   { /* Negative zero.  */
     char result[100];
     int retval =
-      my_snprintf (result, sizeof (result), "%Lg %d", -zerol, 33, 44, 55);
+      my_snprintf (result, sizeof (result), "%Lg %d", minus_zerol, 33, 44, 55);
     if (have_minus_zero ())
       ASSERT (strcmp (result, "-0 33") == 0);
     ASSERT (retval == strlen (result));
index ce87a3a..3caf49f 100644 (file)
@@ -28,12 +28,12 @@ have_minus_zero ()
 }
 
 /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0.
-   So we use -zero instead.  */
+   So we use -zerod 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;
+/* On HP-UX 10.20, negating 0.0L does not yield -0.0L.
+   So we use minus_zerol instead.  */
+long double minus_zerol = -LDBL_MIN * LDBL_MIN;
 
 /* Representation of an 80-bit 'long double' as an initializer for a sequence
    of 'unsigned int' words.  */
@@ -430,7 +430,7 @@ test_function (int (*my_sprintf) (char *, const char *, ...))
   { /* Negative zero.  */
     char result[1000];
     int retval =
-      my_sprintf (result, "%La %d", -zerol, 33, 44, 55);
+      my_sprintf (result, "%La %d", minus_zerol, 33, 44, 55);
     if (have_minus_zero ())
       ASSERT (strcmp (result, "-0x0p+0 33") == 0);
     ASSERT (retval == strlen (result));
@@ -1132,7 +1132,7 @@ test_function (int (*my_sprintf) (char *, const char *, ...))
   { /* Negative zero.  */
     char result[1000];
     int retval =
-      my_sprintf (result, "%Lf %d", -zerol, 33, 44, 55);
+      my_sprintf (result, "%Lf %d", minus_zerol, 33, 44, 55);
     if (have_minus_zero ())
       ASSERT (strcmp (result, "-0.000000 33") == 0);
     ASSERT (retval == strlen (result));
@@ -1499,7 +1499,7 @@ test_function (int (*my_sprintf) (char *, const char *, ...))
   { /* Negative zero.  */
     char result[1000];
     int retval =
-      my_sprintf (result, "%LF %d", -zerol, 33, 44, 55);
+      my_sprintf (result, "%LF %d", minus_zerol, 33, 44, 55);
     if (have_minus_zero ())
       ASSERT (strcmp (result, "-0.000000 33") == 0);
     ASSERT (retval == strlen (result));
@@ -2001,7 +2001,7 @@ test_function (int (*my_sprintf) (char *, const char *, ...))
   { /* Negative zero.  */
     char result[1000];
     int retval =
-      my_sprintf (result, "%Le %d", -zerol, 33, 44, 55);
+      my_sprintf (result, "%Le %d", minus_zerol, 33, 44, 55);
     if (have_minus_zero ())
       ASSERT (strcmp (result, "-0.000000e+00 33") == 0
              || strcmp (result, "-0.000000e+000 33") == 0);
@@ -2654,7 +2654,7 @@ test_function (int (*my_sprintf) (char *, const char *, ...))
   { /* Negative zero.  */
     char result[1000];
     int retval =
-      my_sprintf (result, "%Lg %d", -zerol, 33, 44, 55);
+      my_sprintf (result, "%Lg %d", minus_zerol, 33, 44, 55);
     if (have_minus_zero ())
       ASSERT (strcmp (result, "-0 33") == 0);
     ASSERT (retval == strlen (result));
index 3ea856a..384300f 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <math.h>
 
+#include <float.h>
 #include <stdio.h>
 #include <stdlib.h>
 
@@ -38,9 +39,9 @@
     }                                                                       \
   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;
+/* On HP-UX 10.20, negating 0.0L does not yield -0.0L.
+   So we use minus_zero instead.  */
+long double minus_zero = -LDBL_MIN * LDBL_MIN;
 
 int
 main ()
@@ -51,7 +52,7 @@ main ()
 
   /* Zero.  */
   ASSERT (truncl (0.0L) == 0.0L);
-  ASSERT (truncl (-zero) == 0.0L);
+  ASSERT (truncl (minus_zero) == 0.0L);
   /* Positive numbers.  */
   ASSERT (truncl (0.3L) == 0.0L);
   ASSERT (truncl (0.7L) == 0.0L);
index 1a6054a..aa537fb 100644 (file)
@@ -53,12 +53,12 @@ have_minus_zero ()
 }
 
 /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0.
-   So we use -zero instead.  */
+   So we use -zerod 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;
+/* On HP-UX 10.20, negating 0.0L does not yield -0.0L.
+   So we use minus_zerol instead.  */
+long double minus_zerol = -LDBL_MIN * LDBL_MIN;
 
 /* Representation of an 80-bit 'long double' as an initializer for a sequence
    of 'unsigned int' words.  */
@@ -539,7 +539,7 @@ test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...))
   { /* Negative zero.  */
     size_t length;
     char *result =
-      my_asnprintf (NULL, &length, "%La %d", -zerol, 33, 44, 55);
+      my_asnprintf (NULL, &length, "%La %d", minus_zerol, 33, 44, 55);
     ASSERT (result != NULL);
     if (have_minus_zero ())
       ASSERT (strcmp (result, "-0x0p+0 33") == 0);
@@ -1351,7 +1351,7 @@ test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...))
   { /* Negative zero.  */
     size_t length;
     char *result =
-      my_asnprintf (NULL, &length, "%Lf %d", -zerol, 33, 44, 55);
+      my_asnprintf (NULL, &length, "%Lf %d", minus_zerol, 33, 44, 55);
     ASSERT (result != NULL);
     if (have_minus_zero ())
       ASSERT (strcmp (result, "-0.000000 33") == 0);
@@ -1798,7 +1798,7 @@ test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...))
   { /* Negative zero.  */
     size_t length;
     char *result =
-      my_asnprintf (NULL, &length, "%LF %d", -zerol, 33, 44, 55);
+      my_asnprintf (NULL, &length, "%LF %d", minus_zerol, 33, 44, 55);
     ASSERT (result != NULL);
     if (have_minus_zero ())
       ASSERT (strcmp (result, "-0.000000 33") == 0);
@@ -2372,7 +2372,7 @@ test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...))
   { /* Negative zero.  */
     size_t length;
     char *result =
-      my_asnprintf (NULL, &length, "%Le %d", -zerol, 33, 44, 55);
+      my_asnprintf (NULL, &length, "%Le %d", minus_zerol, 33, 44, 55);
     ASSERT (result != NULL);
     if (have_minus_zero ())
       ASSERT (strcmp (result, "-0.000000e+00 33") == 0
@@ -3127,7 +3127,7 @@ test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...))
   { /* Negative zero.  */
     size_t length;
     char *result =
-      my_asnprintf (NULL, &length, "%Lg %d", -zerol, 33, 44, 55);
+      my_asnprintf (NULL, &length, "%Lg %d", minus_zerol, 33, 44, 55);
     ASSERT (result != NULL);
     if (have_minus_zero ())
       ASSERT (strcmp (result, "-0 33") == 0);
index e046589..703b24f 100644 (file)
@@ -53,12 +53,12 @@ have_minus_zero ()
 }
 
 /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0.
-   So we use -zero instead.  */
+   So we use -zerod 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;
+/* On HP-UX 10.20, negating 0.0L does not yield -0.0L.
+   So we use minus_zerol instead.  */
+long double minus_zerol = -LDBL_MIN * LDBL_MIN;
 
 /* Representation of an 80-bit 'long double' as an initializer for a sequence
    of 'unsigned int' words.  */
@@ -520,7 +520,7 @@ test_function (int (*my_asprintf) (char **, const char *, ...))
   { /* Negative zero.  */
     char *result;
     int retval =
-      my_asprintf (&result, "%La %d", -zerol, 33, 44, 55);
+      my_asprintf (&result, "%La %d", minus_zerol, 33, 44, 55);
     ASSERT (result != NULL);
     if (have_minus_zero ())
       ASSERT (strcmp (result, "-0x0p+0 33") == 0);
@@ -1332,7 +1332,7 @@ test_function (int (*my_asprintf) (char **, const char *, ...))
   { /* Negative zero.  */
     char *result;
     int retval =
-      my_asprintf (&result, "%Lf %d", -zerol, 33, 44, 55);
+      my_asprintf (&result, "%Lf %d", minus_zerol, 33, 44, 55);
     ASSERT (result != NULL);
     if (have_minus_zero ())
       ASSERT (strcmp (result, "-0.000000 33") == 0);
@@ -1779,7 +1779,7 @@ test_function (int (*my_asprintf) (char **, const char *, ...))
   { /* Negative zero.  */
     char *result;
     int retval =
-      my_asprintf (&result, "%LF %d", -zerol, 33, 44, 55);
+      my_asprintf (&result, "%LF %d", minus_zerol, 33, 44, 55);
     ASSERT (result != NULL);
     if (have_minus_zero ())
       ASSERT (strcmp (result, "-0.000000 33") == 0);
@@ -2353,7 +2353,7 @@ test_function (int (*my_asprintf) (char **, const char *, ...))
   { /* Negative zero.  */
     char *result;
     int retval =
-      my_asprintf (&result, "%Le %d", -zerol, 33, 44, 55);
+      my_asprintf (&result, "%Le %d", minus_zerol, 33, 44, 55);
     ASSERT (result != NULL);
     if (have_minus_zero ())
       ASSERT (strcmp (result, "-0.000000e+00 33") == 0
@@ -3108,7 +3108,7 @@ test_function (int (*my_asprintf) (char **, const char *, ...))
   { /* Negative zero.  */
     char *result;
     int retval =
-      my_asprintf (&result, "%Lg %d", -zerol, 33, 44, 55);
+      my_asprintf (&result, "%Lg %d", minus_zerol, 33, 44, 55);
     ASSERT (result != NULL);
     if (have_minus_zero ())
       ASSERT (strcmp (result, "-0 33") == 0);