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
diff --git a/tests/math_test.cpp b/tests/math_test.cpp
index b4604f8..538ebb1 100644
--- a/tests/math_test.cpp
+++ b/tests/math_test.cpp
@@ -1188,12 +1188,51 @@
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));
}