Fix lgamma_r/lgammaf_r/lgammal_r for -0.

Upstream has implemented lgammal/lgammal_r for ld128, and fixed the
sign problem we reported with all the lgamma*_r functions and -0.

Bug: 17471883
Change-Id: Ibb175d9cab67efae75f1010796fd44c9ba6ce4fc
This commit is contained in:
Elliott Hughes
2014-09-18 11:23:58 -07:00
parent 82e71085c2
commit 755318548d
9 changed files with 511 additions and 102 deletions

View File

@@ -1188,12 +1188,51 @@ TEST(math, lgamma_r) {
ASSERT_EQ(1, sign);
}
TEST(math, lgamma_r_17471883) {
int sign;
sign = 0;
ASSERT_DOUBLE_EQ(HUGE_VAL, lgamma_r(0.0, &sign));
ASSERT_EQ(1, sign);
sign = 0;
ASSERT_DOUBLE_EQ(HUGE_VAL, lgamma_r(-0.0, &sign));
ASSERT_EQ(-1, sign);
}
TEST(math, lgammaf_r) {
int sign;
ASSERT_FLOAT_EQ(logf(24.0f), lgammaf_r(5.0f, &sign));
ASSERT_EQ(1, sign);
}
TEST(math, lgammaf_r_17471883) {
int sign;
sign = 0;
ASSERT_FLOAT_EQ(HUGE_VALF, lgammaf_r(0.0f, &sign));
ASSERT_EQ(1, sign);
sign = 0;
ASSERT_FLOAT_EQ(HUGE_VALF, lgammaf_r(-0.0f, &sign));
ASSERT_EQ(-1, sign);
}
TEST(math, lgammal_r) {
int sign;
ASSERT_DOUBLE_EQ(log(24.0L), lgamma_r(5.0L, &sign));
ASSERT_EQ(1, sign);
}
TEST(math, lgammal_r_17471883) {
int sign;
sign = 0;
ASSERT_DOUBLE_EQ(HUGE_VAL, lgammal_r(0.0L, &sign));
ASSERT_EQ(1, sign);
sign = 0;
ASSERT_DOUBLE_EQ(HUGE_VAL, lgammal_r(-0.0L, &sign));
ASSERT_EQ(-1, sign);
}
TEST(math, tgamma) {
ASSERT_DOUBLE_EQ(24.0, tgamma(5.0));
}