Add some tests for corner cases of log() in unusual rounding modes.

I wrote these ages ago, but they've been failing until now.
This commit is contained in:
David Schultz 2011-10-15 05:28:13 +00:00
parent 9c7781b7a3
commit 31b4d3aef3
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=226378

View File

@ -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);
}