aboutsummaryrefslogtreecommitdiff
path: root/math/test-misc.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2007-01-15 23:43:04 +0000
committerJakub Jelinek <jakub@redhat.com>2007-01-15 23:43:04 +0000
commitd68f5d2cff7cd9fb5f1f5dfa4c24d245766bab49 (patch)
treec0cea5b208d8ff8f46eb3b6008959b268012bf51 /math/test-misc.c
parent2a1dea970d565187255f6acffcb9963d6cefc674 (diff)
downloadglibc-d68f5d2cff7cd9fb5f1f5dfa4c24d245766bab49.tar
glibc-d68f5d2cff7cd9fb5f1f5dfa4c24d245766bab49.tar.gz
glibc-d68f5d2cff7cd9fb5f1f5dfa4c24d245766bab49.tar.bz2
glibc-d68f5d2cff7cd9fb5f1f5dfa4c24d245766bab49.zip
[BZ #2749]
* soft-fp/op-common.h (FP_TRUNC): When truncating a NaN, clear workbits in semi-raw fraction. * math/test-misc.c: Add new tests. * math/basic-test.c: Include test-skeleton.c. (TEST_TRUNC): Define. (truncdfsf_test, trunctfsf_test, trunctfdf_test): New. (main): Rename to ... (do_test): ...this. Run new tests. (TEST_FUNCTION): Define. [BZ #2749] * soft-fp/op-4.h (__FP_FRAC_SUB_3, __FP_FRAC_SUB_4): Correct borrow handling for high words. * soft-fp/op-common.h (_FP_OVERFLOW_SEMIRAW): Always set inexact and overflow for infinity. 2007-01-15 Jakub Jelinek <jakub@redhat.com> * soft-fp/op-common.h (FP_TRUNC): When truncating a NaN, clear workbits in semi-raw fraction. * math/test-misc.c: Add new tests. 2007-01-14 Steven Munroe <sjmunroe@us.ibm.com> * math/basic-test.c: Include test-skeleton.c. (TEST_TRUNC): Define. (truncdfsf_test, trunctfsf_test, trunctfdf_test): New. (main): Rename to ... (do_test): ...this. Run new tests. (TEST_FUNCTION): Define. 2006-10-05 Steven Munroe <sjmunroe@us.ibm.com> Joe Kerian <jkerian@us.us.ibm.com> [BZ #2749] * soft-fp/op-4.h (__FP_FRAC_SUB_3, __FP_FRAC_SUB_4): Correct borrow handling for high words. * soft-fp/op-common.h (_FP_OVERFLOW_SEMIRAW): Always set inexact and overflow for infinity.
Diffstat (limited to 'math/test-misc.c')
-rw-r--r--math/test-misc.c74
1 files changed, 63 insertions, 11 deletions
diff --git a/math/test-misc.c b/math/test-misc.c
index d2393cc840..862e11f0c3 100644
--- a/math/test-misc.c
+++ b/math/test-misc.c
@@ -1,5 +1,5 @@
/* Miscellaneous tests which don't fit anywhere else.
- Copyright (C) 2000, 2001, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2000, 2001, 2004, 2005, 2007 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -44,7 +44,6 @@ main (void)
}
}
-# if __GNUC__ >= 3 || __GNUC_MINOR__ >= 96
{
long double x;
long double m;
@@ -52,17 +51,17 @@ main (void)
int e;
int i;
-# if LDBL_MANT_DIG == 64
+# if LDBL_MANT_DIG == 64
m = 0xf.fffffffffffffffp-4L;
-# elif LDBL_MANT_DIG == 106
+# elif LDBL_MANT_DIG == 106
/* This has to match the mantissa of LDBL_MAX which actually does have a
missing bit in the middle. */
m = 0x1.fffffffffffff7ffffffffffff8p-1L;
-# elif LDBL_MANT_DIG == 113
+# elif LDBL_MANT_DIG == 113
m = 0x1.ffffffffffffffffffffffffffffp-1L;
-# else
-# error "Please adjust"
-# endif
+# else
+# error "Please adjust"
+# endif
for (i = LDBL_MAX_EXP, x = LDBL_MAX; i >= LDBL_MIN_EXP; --i, x /= 2.0L)
{
@@ -106,9 +105,8 @@ main (void)
}
}
-# endif
-#if 0
+# if 0
{
int e;
long double r = frexpl (LDBL_MIN * LDBL_EPSILON, &e);
@@ -126,7 +124,7 @@ main (void)
result = 1;
}
}
-#endif
+# endif
#endif
{
@@ -1183,5 +1181,59 @@ main (void)
}
#endif
+ volatile float f1 = FLT_MAX;
+ volatile float f2 = FLT_MAX / 2;
+ (void) &f1;
+ (void) &f2;
+ feclearexcept (FE_ALL_EXCEPT);
+ f2 += f1;
+ int fe = fetestexcept (FE_ALL_EXCEPT);
+ if (fe != (FE_OVERFLOW | FE_INEXACT))
+ {
+ printf ("float overflow test failed: %x\n", fe);
+ result = 1;
+ }
+
+ volatile double d1 = DBL_MAX;
+ volatile double d2 = DBL_MAX / 2;
+ (void) &d1;
+ (void) &d2;
+ feclearexcept (FE_ALL_EXCEPT);
+ d2 += d1;
+ fe = fetestexcept (FE_ALL_EXCEPT);
+ if (fe != (FE_OVERFLOW | FE_INEXACT))
+ {
+ printf ("double overflow test failed: %x\n", fe);
+ result = 1;
+ }
+
+#ifndef NO_LONG_DOUBLE
+ volatile long double ld1 = LDBL_MAX;
+ volatile long double ld2 = LDBL_MAX / 2;
+ (void) &ld1;
+ (void) &ld2;
+ feclearexcept (FE_ALL_EXCEPT);
+ ld2 += ld1;
+ fe = fetestexcept (FE_ALL_EXCEPT);
+ if (fe != (FE_OVERFLOW | FE_INEXACT))
+ {
+ printf ("long double overflow test failed: %x\n", fe);
+ result = 1;
+ }
+#endif
+
+#if !defined NO_LONG_DOUBLE && LDBL_MANT_DIG == 113
+ volatile long double ld3 = 0x1.0000000000010000000100000001p+1;
+ volatile long double ld4 = 0x1.0000000000000000000000000001p+1;
+ (void) &ld3;
+ (void) &ld4;
+ ld3 -= ld4;
+ if (ld3 != 0x1.0p-47)
+ {
+ printf ("long double subtraction test failed %.28La\n", ld3);
+ result = 1;
+ }
+#endif
+
return result;
}