diff options
author | David Schultz <das@FreeBSD.org> | 2011-10-15 05:28:13 +0000 |
---|---|---|
committer | David Schultz <das@FreeBSD.org> | 2011-10-15 05:28:13 +0000 |
commit | 31b4d3aef3ead5fa331a3429fa3adb9bf45dc26a (patch) | |
tree | 8414dc0cfb7574a664dfb7e590727bb91997cb91 | |
parent | 9c7781b7a31d15dc5cc2c7154b94053e21597012 (diff) | |
download | src-31b4d3aef3ead5fa331a3429fa3adb9bf45dc26a.tar.gz src-31b4d3aef3ead5fa331a3429fa3adb9bf45dc26a.zip |
Add some tests for corner cases of log() in unusual rounding modes.
I wrote these ages ago, but they've been failing until now.
Notes
Notes:
svn path=/head/; revision=226378
-rw-r--r-- | tools/regression/lib/msun/test-logarithm.c | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/tools/regression/lib/msun/test-logarithm.c b/tools/regression/lib/msun/test-logarithm.c index 52f562c5fdb5..258c5141305e 100644 --- a/tools/regression/lib/msun/test-logarithm.c +++ b/tools/regression/lib/msun/test-logarithm.c @@ -97,7 +97,7 @@ void run_generic_tests(void) { - /* exp(1) == 0, no exceptions raised */ + /* log(1) == 0, no exceptions raised */ testall0(1.0, 0.0, ALL_STD_EXCEPT, 0); testall1(0.0, 0.0, ALL_STD_EXCEPT, 0); testall1(-0.0, -0.0, ALL_STD_EXCEPT, 0); @@ -142,11 +142,35 @@ run_log2_tests(void) } } +void +run_roundingmode_tests(void) +{ + + /* + * Corner cases in other rounding modes. + */ + fesetround(FE_DOWNWARD); + /* These are still positive per IEEE 754R */ + testall0(1.0, 0.0, ALL_STD_EXCEPT, 0); + testall1(0.0, 0.0, ALL_STD_EXCEPT, 0); + fesetround(FE_TOWARDZERO); + testall0(1.0, 0.0, ALL_STD_EXCEPT, 0); + testall1(0.0, 0.0, ALL_STD_EXCEPT, 0); + + fesetround(FE_UPWARD); + testall0(1.0, 0.0, ALL_STD_EXCEPT, 0); + testall1(0.0, 0.0, ALL_STD_EXCEPT, 0); + /* log1p(-0.0) == -0.0 even when rounding upwards */ + testall1(-0.0, -0.0, ALL_STD_EXCEPT, 0); + + fesetround(FE_TONEAREST); +} + int main(int argc, char *argv[]) { - printf("1..2\n"); + printf("1..3\n"); run_generic_tests(); printf("ok 1 - logarithm\n"); @@ -154,5 +178,8 @@ main(int argc, char *argv[]) run_log2_tests(); printf("ok 2 - logarithm\n"); + run_roundingmode_tests(); + printf("ok 3 - logarithm\n"); + return (0); } |