libm: add tests that would have caught the recent regression.
Bug: http://b/111710419
Test: ran tests
Change-Id: I00ec8ef24fb4c2cfef7c9cef311bbd6c755993e1
diff --git a/tests/complex_test.cpp b/tests/complex_test.cpp
index 2aaa192..3bbddbb 100644
--- a/tests/complex_test.cpp
+++ b/tests/complex_test.cpp
@@ -317,12 +317,64 @@
TEST(COMPLEX_TEST, ctanh) {
ASSERT_EQ(0.0, ctanh(0));
+
+ double complex z;
+
+ // If z is NaN+0i, the result is NaN+0i.
+ z = ctanh(nan("") + 0i);
+ ASSERT_TRUE(isnan(creal(z)));
+ ASSERT_EQ(0.0, cimag(z));
+
+ // If z is NaN+yi, the result is NaN+NaNi.
+ z = ctanh(nan("") + 2.0i);
+ ASSERT_TRUE(isnan(creal(z)));
+ ASSERT_TRUE(isnan(cimag(z)));
+
+ // If z is NaN+NaNi, the result is NaN+NaNi.
+ z = ctanh(nan("") + nan("") * I);
+ ASSERT_TRUE(isnan(creal(z)));
+ ASSERT_TRUE(isnan(cimag(z)));
}
TEST(COMPLEX_TEST, ctanhf) {
- ASSERT_EQ(0.0, ctanhf(0));
+ ASSERT_EQ(0.0f, ctanhf(0.0f));
+
+ float complex z;
+
+ // If z is NaN+0i, the result is NaN+0i.
+ z = ctanhf(nanf("") + 0.0fi);
+ ASSERT_TRUE(isnan(crealf(z)));
+ ASSERT_EQ(0.0f, cimagf(z));
+
+ // If z is NaN+yi, the result is NaN+NaNi.
+ z = ctanhf(nanf("") + 2.0fi);
+ ASSERT_TRUE(isnan(crealf(z)));
+ ASSERT_TRUE(isnan(cimagf(z)));
+
+ // If z is NaN+NaNi, the result is NaN+NaNi.
+ z = ctanhf(nanf("") + nanf("") * I);
+ ASSERT_TRUE(isnan(crealf(z)));
+ ASSERT_TRUE(isnan(cimagf(z)));
}
TEST(COMPLEX_TEST, ctanhl) {
- ASSERT_EQ(0.0, ctanhl(0));
+ ASSERT_EQ(0.0L, ctanhl(0.0L));
+
+ long double complex z;
+
+ // If z is NaN+0i, the result is NaN+0i.
+ z = ctanhl(nanl("") + 0.0Li);
+ ASSERT_TRUE(isnan(creall(z)));
+ // TODO: this case is currently broken in the netbsd ctanhl.
+ // ASSERT_EQ(0.0L, cimagl(z));
+
+ // If z is NaN+yi, the result is NaN+NaNi.
+ z = ctanhl(nanl("") + 2.0Li);
+ ASSERT_TRUE(isnan(creall(z)));
+ ASSERT_TRUE(isnan(cimagl(z)));
+
+ // If z is NaN+NaNi, the result is NaN+NaNi.
+ z = ctanhl(nanl("") + nanl("") * I);
+ ASSERT_TRUE(isnan(creall(z)));
+ ASSERT_TRUE(isnan(cimagl(z)));
}