X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=tests%2Ftest-strtod.c;h=d99e5fe5ec9abe690a7397e586d23f69132dbd7e;hb=2464bbfa7a6b82eca7bf3f7d517515ed462f1b23;hp=7f0971c8064a1b3546cf2f943c2e9dd72c4d47e6;hpb=e220635fc952c63b533873f2af39ec76aed4b4e3;p=gnulib.git diff --git a/tests/test-strtod.c b/tests/test-strtod.c index 7f0971c80..d99e5fe5e 100644 --- a/tests/test-strtod.c +++ b/tests/test-strtod.c @@ -25,6 +25,8 @@ #include #include +#include "isnand-nolibm.h" + #define ASSERT(expr) \ do \ { \ @@ -37,6 +39,13 @@ } \ while (0) +/* 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 () { @@ -161,7 +170,7 @@ main () /* FIXME - gnulib's version is rather inaccurate. It would be nice to guarantee an exact result, but for now, we settle for a 1-ulp error. */ - ASSERT (abs (result - 0.5) < DBL_EPSILON); + ASSERT (FABS (result - 0.5) < DBL_EPSILON); ASSERT (ptr == input + 2); ASSERT (errno == 0); } @@ -244,7 +253,7 @@ main () /* FIXME - gnulib's version is rather inaccurate. It would be nice to guarantee an exact result, but for now, we settle for a 1-ulp error. */ - ASSERT (abs (result - 0.5) < DBL_EPSILON); + ASSERT (FABS (result - 0.5) < DBL_EPSILON); ASSERT (ptr == input + 4); ASSERT (errno == 0); } @@ -312,7 +321,7 @@ 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); } @@ -407,7 +416,7 @@ main () 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); } @@ -532,7 +541,7 @@ main () 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); @@ -602,8 +611,8 @@ main () result1 = strtod (input, &ptr1); result2 = strtod (input + 1, &ptr2); #if 1 /* All known CPUs support NaNs. */ - ASSERT (isnan (result1)); /* OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, mingw */ - ASSERT (isnan (result2)); /* OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, mingw */ + ASSERT (isnand (result1)); /* OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, mingw */ + ASSERT (isnand (result2)); /* OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, mingw */ # if 0 /* Sign bits of NaN is a portability sticking point, not worth worrying about. */ @@ -632,8 +641,8 @@ main () result1 = strtod (input, &ptr1); result2 = strtod (input + 1, &ptr2); #if 1 /* All known CPUs support NaNs. */ - ASSERT (isnan (result1)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ - ASSERT (isnan (result2)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ + ASSERT (isnand (result1)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ + ASSERT (isnand (result2)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (!!signbit (result1) == !!signbit (result2)); ASSERT (ptr1 == input + 4); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 2.5.1, mingw */ ASSERT (ptr2 == input + 4); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 2.5.1, mingw */ @@ -658,8 +667,8 @@ main () result1 = strtod (input, &ptr1); result2 = strtod (input + 1, &ptr2); #if 1 /* All known CPUs support NaNs. */ - ASSERT (isnan (result1)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ - ASSERT (isnan (result2)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ + ASSERT (isnand (result1)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ + ASSERT (isnand (result2)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ # if 0 /* Sign bits of NaN is a portability sticking point, not worth worrying about. */ @@ -685,7 +694,7 @@ main () errno = 0; result = strtod (input, &ptr); #if 1 /* All known CPUs support NaNs. */ - ASSERT (isnan (result)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ + ASSERT (isnand (result)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (ptr == input + 6); /* glibc-2.3.6, MacOS X 10.3, FreeBSD 6.2, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (errno == 0); #else @@ -708,8 +717,8 @@ main () result1 = strtod (input, &ptr1); result2 = strtod (input + 1, &ptr2); #if 1 /* All known CPUs support NaNs. */ - ASSERT (isnan (result1)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ - ASSERT (isnan (result2)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ + ASSERT (isnand (result1)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ + ASSERT (isnand (result2)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ # if 0 /* Sign bits of NaN is a portability sticking point, not worth worrying about. */ @@ -901,7 +910,7 @@ 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 + m); ASSERT (errno == 0); }