Move vasprintf prototypes to stdio.
[gnulib.git] / tests / test-frexpl.c
index 447c3b9..1bcde6e 100644 (file)
 #include <stdlib.h>
 
 #include "fpucw.h"
+#include "isnanl-nolibm.h"
 
 #define ASSERT(expr) if (!(expr)) abort ();
 
+/* On MIPS IRIX machines, LDBL_MIN_EXP is -1021, but the smallest reliable
+   exponent for 'long double' is -964.  For exponents below that, the
+   precision may be truncated to the precision used for 'double'.  */
+#ifdef __sgi
+# define MIN_NORMAL_EXP (LDBL_MIN_EXP + 57)
+#else
+# define MIN_NORMAL_EXP LDBL_MIN_EXP
+#endif
+
 static long double
 my_ldexp (long double x, int d)
 {
@@ -52,7 +62,7 @@ main ()
     long double mantissa;
     x = 0.0L / 0.0L;
     mantissa = frexpl (x, &exp);
-    ASSERT (mantissa != mantissa);
+    ASSERT (isnanl (mantissa));
   }
 
   { /* Positive infinity.  */
@@ -96,7 +106,7 @@ main ()
       ASSERT (exp == i);
       ASSERT (mantissa == 0.5L);
     }
-  for (i = 1, x = 1.0L; i >= LDBL_MIN_EXP; i--, x *= 0.5L)
+  for (i = 1, x = 1.0L; i >= MIN_NORMAL_EXP; i--, x *= 0.5L)
     {
       int exp = -9999;
       long double mantissa = frexpl (x, &exp);
@@ -118,7 +128,7 @@ main ()
       ASSERT (exp == i);
       ASSERT (mantissa == -0.5L);
     }
-  for (i = 1, x = -1.0L; i >= LDBL_MIN_EXP; i--, x *= 0.5L)
+  for (i = 1, x = -1.0L; i >= MIN_NORMAL_EXP; i--, x *= 0.5L)
     {
       int exp = -9999;
       long double mantissa = frexpl (x, &exp);
@@ -140,7 +150,7 @@ main ()
       ASSERT (exp == i);
       ASSERT (mantissa == 0.505L);
     }
-  for (i = 1, x = 1.01L; i >= LDBL_MIN_EXP; i--, x *= 0.5L)
+  for (i = 1, x = 1.01L; i >= MIN_NORMAL_EXP; i--, x *= 0.5L)
     {
       int exp = -9999;
       long double mantissa = frexpl (x, &exp);
@@ -164,7 +174,7 @@ main ()
       ASSERT (exp == i);
       ASSERT (mantissa == 0.866025L);
     }
-  for (i = 1, x = 1.73205L; i >= LDBL_MIN_EXP; i--, x *= 0.5L)
+  for (i = 1, x = 1.73205L; i >= MIN_NORMAL_EXP; i--, x *= 0.5L)
     {
       int exp = -9999;
       long double mantissa = frexpl (x, &exp);