Add tests to Math.atan and Math.atan2.
Bug: 29068959
Change-Id: Id711b2c078f2fc341b9d94824968d37f0b498cc2
diff --git a/luni/src/test/java/libcore/java/lang/OldAndroidMathTest.java b/luni/src/test/java/libcore/java/lang/OldAndroidMathTest.java
index c18f2bd..ab6cfe6 100644
--- a/luni/src/test/java/libcore/java/lang/OldAndroidMathTest.java
+++ b/luni/src/test/java/libcore/java/lang/OldAndroidMathTest.java
@@ -20,6 +20,8 @@
import junit.framework.Assert;
import junit.framework.TestCase;
+import static java.lang.Math.PI;
+
public class OldAndroidMathTest extends TestCase {
private static final double HYP = Math.sqrt(2.0);
@@ -101,13 +103,51 @@
double answer = Math.tan(Math.atan(1.0));
assertTrue("Returned incorrect arc tangent: " + answer, answer <= 1.0
&& answer >= 9.9999999999999983E-1);
+
+ assertEquals("wrong atan(1)", PI / 4, Math.atan(1d), 0);
+ assertEquals("wrong atan(-1)", -PI / 4, Math.atan(-1), 0);
+ assertEquals("wrong atan(+INF)", PI / 2, Math.atan(Double.POSITIVE_INFINITY), 0);
+ assertEquals("wrong atan(-INF)", -PI / 2, Math.atan(Double.NEGATIVE_INFINITY), 0);
+ }
+
+ public void testAtanDZeroValues() {
+ double negativeZero = Math.copySign(0d, -1d);
+ assertEquals("wrong value for atan(0)", 0, Math.atan(0d), 0);
+ assertTrue("Wrong sign for atan(0)", Math.copySign(1, Math.atan(0d)) == 1);
+
+ assertEquals("wrong value for atan(-0)", negativeZero, Math.atan(negativeZero), 0);
+ assertTrue("Wrong sign for atan(-0)", Math.copySign(1, Math.atan(negativeZero)) == -1);
}
public void testAtan2DD() {
- // Test for method double java.lang.Math.atan2(double, double)
- double answer = Math.atan(Math.tan(1.0));
- assertTrue("Returned incorrect arc tangent: " + answer, answer <= 1.0
- && answer >= 9.9999999999999983E-1);
+ // Verify values are put in the correct quadrants.
+ assertEquals("wrong atan2(0, 1)", 0, Math.atan2(0, 1), 0);
+ assertEquals("wrong atan2(1, 1)", PI / 4, Math.atan2(1, 1), 0);
+ assertEquals("wrong atan2(1, 0)", PI / 2, Math.atan2(1, 0), 0);
+ assertEquals("wrong atan2(1, -1)", 3 * PI / 4, Math.atan2(1, -1), 0);
+ assertEquals("wrong atan2(0, -1)", PI, Math.atan2(0, -1), 0);
+ assertEquals("wrong atan2(-1, -1)", -3 * PI / 4, Math.atan2(-1, -1), 0);
+ assertEquals("wrong atan2(-1, 0)", -PI / 2, Math.atan2(-1, 0), 0);
+ assertEquals("wrong atan2(-1, 1)", -PI / 4, Math.atan2(-1, 1), 0);
+
+ // Check numeric values.
+ assertEquals("atan2(42, 42) != atan2(1, 1)", Math.atan2(1, 1), Math.atan2(42, 42), 0);
+ assertEquals("wrong atan2(2, 1)", Math.atan(2), Math.atan2(2, 1), 0);
+ assertEquals("wrong atan2(5, 3)", Math.atan(5d / 3), Math.atan2(5, 3), 0);
+ assertEquals("wrong atan2(9, 10)", Math.atan(9d / 10), Math.atan2(9, 10), 0);
+ assertEquals("wrong atan2(-10, 5)", Math.atan(-10d / 5), Math.atan2(-10, 5), 0);
+ }
+
+ public void testAtan2DDZeroValues() {
+ double negativeZero = Math.copySign(0d, -1d);
+ assertEquals("wrong atan2(+0, +0)", 0, Math.atan2(+0, +0), 0);
+ assertTrue("Wrong sign for atan2(+0, +0)",
+ Math.copySign(1, Math.atan2(+0, +0)) == 1);;
+ assertEquals("wrong atan2(+0, -0)", PI, Math.atan2(+0, negativeZero), 0);
+ assertEquals("wrong atan2(-0, +0)", -0, Math.atan2(negativeZero, +0), 0);
+ assertTrue("Wrong sign for atan2(-0, +0)",
+ Math.copySign(1, Math.atan2(negativeZero, +0)) == -1);
+ assertEquals("wrong atan2(-0, -0)", -PI, Math.atan2(negativeZero, negativeZero), 0);
}
public void testCbrtD() {
@@ -560,7 +600,7 @@
assertEquals("Wrong value E",
4613303445314885481L, Double.doubleToLongBits(Math.E));
assertEquals("Wrong value PI",
- 4614256656552045848L, Double.doubleToLongBits(Math.PI));
+ 4614256656552045848L, Double.doubleToLongBits(PI));
for (int i = 500; i >= 0; i--) {
double d = Math.random();