Test cosh, sinh in non-default rounding modes (bug 3976).

This commit is contained in:
Joseph Myers 2012-03-05 12:20:24 +00:00
parent 6c6a98c983
commit ca811b2256
4 changed files with 503 additions and 0 deletions

View File

@ -1,3 +1,18 @@
2012-03-02 Joseph Myers <joseph@codesourcery.com>
[BZ #3976]
* math/libm-test.inc (cosh_test_tonearest): New function.
(cosh_test_towardzero): Likewise.
(cosh_test_downward): Likewise.
(cosh_test_upward): Likewise.
(sinh_test_tonearest): Likewise.
(sinh_test_towardzero): Likewise.
(sinh_test_downward): Likewise.
(sinh_test_upward): Likewise.
(main): Call the new functions.
* sysdeps/i386/fpu/libm-test-ulps: Update.
* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
2012-03-05 Tom de Vries <tom@codesourcery.com>
* sysdeps/generic/dl-osinfo.h (_dl_setup_stack_chk_guard): Ensure

View File

@ -2177,6 +2177,114 @@ cosh_test (void)
}
static void
cosh_test_tonearest (void)
{
int save_round_mode;
errno = 0;
FUNC(cosh) (0);
if (errno == ENOSYS)
/* Function not implemented. */
return;
START (cosh_tonearest);
save_round_mode = fegetround ();
if (!fesetround (FE_TONEAREST))
{
TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
}
fesetround (save_round_mode);
END (cosh_tonearest);
}
static void
cosh_test_towardzero (void)
{
int save_round_mode;
errno = 0;
FUNC(cosh) (0);
if (errno == ENOSYS)
/* Function not implemented. */
return;
START (cosh_towardzero);
save_round_mode = fegetround ();
if (!fesetround (FE_TOWARDZERO))
{
TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
}
fesetround (save_round_mode);
END (cosh_towardzero);
}
static void
cosh_test_downward (void)
{
int save_round_mode;
errno = 0;
FUNC(cosh) (0);
if (errno == ENOSYS)
/* Function not implemented. */
return;
START (cosh_downward);
save_round_mode = fegetround ();
if (!fesetround (FE_DOWNWARD))
{
TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
}
fesetround (save_round_mode);
END (cosh_downward);
}
static void
cosh_test_upward (void)
{
int save_round_mode;
errno = 0;
FUNC(cosh) (0);
if (errno == ENOSYS)
/* Function not implemented. */
return;
START (cosh_upward);
save_round_mode = fegetround ();
if (!fesetround (FE_UPWARD))
{
TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
}
fesetround (save_round_mode);
END (cosh_upward);
}
static void
cpow_test (void)
{
@ -6243,6 +6351,115 @@ sinh_test (void)
END (sinh);
}
static void
sinh_test_tonearest (void)
{
int save_round_mode;
errno = 0;
FUNC(sinh) (0);
if (errno == ENOSYS)
/* Function not implemented. */
return;
START (sinh_tonearest);
save_round_mode = fegetround ();
if (!fesetround (FE_TONEAREST))
{
TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
}
fesetround (save_round_mode);
END (sinh_tonearest);
}
static void
sinh_test_towardzero (void)
{
int save_round_mode;
errno = 0;
FUNC(sinh) (0);
if (errno == ENOSYS)
/* Function not implemented. */
return;
START (sinh_towardzero);
save_round_mode = fegetround ();
if (!fesetround (FE_TOWARDZERO))
{
TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
}
fesetround (save_round_mode);
END (sinh_towardzero);
}
static void
sinh_test_downward (void)
{
int save_round_mode;
errno = 0;
FUNC(sinh) (0);
if (errno == ENOSYS)
/* Function not implemented. */
return;
START (sinh_downward);
save_round_mode = fegetround ();
if (!fesetround (FE_DOWNWARD))
{
TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
}
fesetround (save_round_mode);
END (sinh_downward);
}
static void
sinh_test_upward (void)
{
int save_round_mode;
errno = 0;
FUNC(sinh) (0);
if (errno == ENOSYS)
/* Function not implemented. */
return;
START (sinh_upward);
save_round_mode = fegetround ();
if (!fesetround (FE_UPWARD))
{
TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
}
fesetround (save_round_mode);
END (sinh_upward);
}
static void
sqrt_test (void)
{
@ -6962,7 +7179,15 @@ main (int argc, char **argv)
asinh_test ();
atanh_test ();
cosh_test ();
cosh_test_tonearest ();
cosh_test_towardzero ();
cosh_test_downward ();
cosh_test_upward ();
sinh_test ();
sinh_test_tonearest ();
sinh_test_towardzero ();
sinh_test_downward ();
sinh_test_upward ();
tanh_test ();
/* Exponential and logarithmic functions: */

View File

@ -408,6 +408,42 @@ ifloat: 1
Test "cosh (0.75) == 1.29468328467684468784170818539018176":
ildouble: 1
# cosh_downward
Test "cosh_downward (22) == 1792456423.065795780980053377632656584997":
double: 1
float: 1
ldouble: 2
Test "cosh_downward (23) == 4872401723.124451300068625740569997090344":
double: 1
float: 1
ldouble: 1
Test "cosh_downward (24) == 13244561064.92173614708845674912733665919":
float: 1
ldouble: 1
# cosh_tonearest
Test "cosh_tonearest (22) == 1792456423.065795780980053377632656584997":
ldouble: 1
# cosh_towardzero
Test "cosh_towardzero (22) == 1792456423.065795780980053377632656584997":
double: 1
float: 1
ldouble: 2
Test "cosh_towardzero (23) == 4872401723.124451300068625740569997090344":
double: 1
float: 1
ldouble: 1
Test "cosh_towardzero (24) == 13244561064.92173614708845674912733665919":
float: 1
ldouble: 1
# cosh_upward
Test "cosh_upward (23) == 4872401723.124451300068625740569997090344":
ldouble: 1
Test "cosh_upward (24) == 13244561064.92173614708845674912733665919":
double: 1
# cpow
Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
float: 1
@ -1052,6 +1088,58 @@ Test "sinh (0.75) == 0.822316731935829980703661634446913849":
double: 1
ildouble: 1
# sinh_downward
Test "sinh_downward (22) == 1792456423.065795780701106568345764104225":
double: 1
float: 1
idouble: 1
ifloat: 1
ldouble: 4
Test "sinh_downward (23) == 4872401723.124451299966006944252978187305":
double: 1
float: 1
idouble: 1
ifloat: 1
Test "sinh_downward (24) == 13244561064.92173614705070540368454568168":
float: 1
ifloat: 1
ldouble: 5
# sinh_tonearest
Test "sinh_tonearest (22) == 1792456423.065795780701106568345764104225":
ldouble: 3
Test "sinh_tonearest (23) == 4872401723.124451299966006944252978187305":
ldouble: 1
Test "sinh_tonearest (24) == 13244561064.92173614705070540368454568168":
ldouble: 6
# sinh_towardzero
Test "sinh_towardzero (22) == 1792456423.065795780701106568345764104225":
double: 1
float: 1
idouble: 1
ifloat: 1
ldouble: 4
Test "sinh_towardzero (23) == 4872401723.124451299966006944252978187305":
double: 1
float: 1
idouble: 1
ifloat: 1
Test "sinh_towardzero (24) == 13244561064.92173614705070540368454568168":
float: 1
ifloat: 1
ldouble: 5
# sinh_upward
Test "sinh_upward (22) == 1792456423.065795780701106568345764104225":
ldouble: 16
Test "sinh_upward (23) == 4872401723.124451299966006944252978187305":
ldouble: 27
Test "sinh_upward (24) == 13244561064.92173614705070540368454568168":
double: 1
idouble: 1
ldouble: 7
# tan
Test "tan (pi/4) == 1":
double: 1
@ -1568,6 +1656,23 @@ ldouble: 1
Function: "cosh":
ildouble: 1
Function: "cosh_downward":
double: 1
float: 1
ldouble: 2
Function: "cosh_tonearest":
ldouble: 1
Function: "cosh_towardzero":
double: 1
float: 1
ldouble: 2
Function: "cosh_upward":
double: 1
ldouble: 1
Function: Real part of "cpow":
double: 1
float: 4
@ -1773,6 +1878,28 @@ Function: "sinh":
double: 1
ildouble: 1
Function: "sinh_downward":
double: 1
float: 1
idouble: 1
ifloat: 1
ldouble: 5
Function: "sinh_tonearest":
ldouble: 6
Function: "sinh_towardzero":
double: 1
float: 1
idouble: 1
ifloat: 1
ldouble: 5
Function: "sinh_upward":
double: 1
idouble: 1
ldouble: 27
Function: "tan":
double: 1
idouble: 1

View File

@ -428,6 +428,50 @@ Test "cos_upward (9) == -0.9111302618846769883682947111811653112463":
float: 2
ifloat: 2
# cosh_downward
Test "cosh_downward (22) == 1792456423.065795780980053377632656584997":
float: 1
ifloat: 1
ildouble: 2
ldouble: 2
Test "cosh_downward (23) == 4872401723.124451300068625740569997090344":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
Test "cosh_downward (24) == 13244561064.92173614708845674912733665919":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
# cosh_tonearest
Test "cosh_tonearest (22) == 1792456423.065795780980053377632656584997":
ildouble: 1
ldouble: 1
# cosh_towardzero
Test "cosh_towardzero (22) == 1792456423.065795780980053377632656584997":
float: 1
ifloat: 1
ildouble: 2
ldouble: 2
Test "cosh_towardzero (23) == 4872401723.124451300068625740569997090344":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
Test "cosh_towardzero (24) == 13244561064.92173614708845674912733665919":
float: 1
ifloat: 1
ildouble: 1
ldouble: 1
# cosh_upward
Test "cosh_upward (23) == 4872401723.124451300068625740569997090344":
ildouble: 1
ldouble: 1
# cpow
Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
float: 1
@ -1065,6 +1109,58 @@ Test "sinh (0x8p-32) == 1.86264514923095703232705808926175479e-9":
ildouble: 1
ldouble: 1
# sinh_downward
Test "sinh_downward (22) == 1792456423.065795780701106568345764104225":
float: 1
ifloat: 1
ildouble: 4
ldouble: 4
Test "sinh_downward (23) == 4872401723.124451299966006944252978187305":
float: 1
ifloat: 1
Test "sinh_downward (24) == 13244561064.92173614705070540368454568168":
float: 1
ifloat: 1
ildouble: 5
ldouble: 5
# sinh_tonearest
Test "sinh_tonearest (22) == 1792456423.065795780701106568345764104225":
ildouble: 3
ldouble: 3
Test "sinh_tonearest (23) == 4872401723.124451299966006944252978187305":
ildouble: 1
ldouble: 1
Test "sinh_tonearest (24) == 13244561064.92173614705070540368454568168":
ildouble: 6
ldouble: 6
# sinh_towardzero
Test "sinh_towardzero (22) == 1792456423.065795780701106568345764104225":
float: 1
ifloat: 1
ildouble: 4
ldouble: 4
Test "sinh_towardzero (23) == 4872401723.124451299966006944252978187305":
float: 1
ifloat: 1
Test "sinh_towardzero (24) == 13244561064.92173614705070540368454568168":
float: 1
ifloat: 1
ildouble: 5
ldouble: 5
# sinh_upward
Test "sinh_upward (22) == 1792456423.065795780701106568345764104225":
ildouble: 16
ldouble: 16
Test "sinh_upward (23) == 4872401723.124451299966006944252978187305":
ildouble: 27
ldouble: 27
Test "sinh_upward (24) == 13244561064.92173614705070540368454568168":
ildouble: 7
ldouble: 7
# tan
Test "tan (pi/4) == 1":
double: 1
@ -1546,6 +1642,26 @@ ifloat: 2
ildouble: 1
ldouble: 1
Function: "cosh_downward":
float: 1
ifloat: 1
ildouble: 2
ldouble: 2
Function: "cosh_tonearest":
ildouble: 1
ldouble: 1
Function: "cosh_towardzero":
float: 1
ifloat: 1
ildouble: 2
ldouble: 2
Function: "cosh_upward":
ildouble: 1
ldouble: 1
Function: Real part of "cpow":
double: 2
float: 5
@ -1754,6 +1870,26 @@ Function: "sinh":
ildouble: 1
ldouble: 1
Function: "sinh_downward":
float: 1
ifloat: 1
ildouble: 5
ldouble: 5
Function: "sinh_tonearest":
ildouble: 6
ldouble: 6
Function: "sinh_towardzero":
float: 1
ifloat: 1
ildouble: 5
ldouble: 5
Function: "sinh_upward":
ildouble: 27
ldouble: 27
Function: "tan":
double: 1
idouble: 1