Handle NaN and -0.0 in Math.signum Change-Id: I0aae67a00fb99ac61c17aa80e595cd689e5d18d8
diff --git a/user/super/com/google/gwt/emul/java/lang/Math.java b/user/super/com/google/gwt/emul/java/lang/Math.java index cb01dc1..82463fa 100644 --- a/user/super/com/google/gwt/emul/java/lang/Math.java +++ b/user/super/com/google/gwt/emul/java/lang/Math.java
@@ -324,12 +324,10 @@ } public static double signum(double d) { - if (d > 0.0d) { - return 1.0d; - } else if (d < 0.0d) { - return -1.0d; + if (d == 0. || Double.isNaN(d)) { + return d; } else { - return 0.0d; + return d < 0 ? -1 : 1; } }
diff --git a/user/test/com/google/gwt/emultest/java/lang/MathTest.java b/user/test/com/google/gwt/emultest/java/lang/MathTest.java index 7f63a27..c47d4ff 100644 --- a/user/test/com/google/gwt/emultest/java/lang/MathTest.java +++ b/user/test/com/google/gwt/emultest/java/lang/MathTest.java
@@ -475,6 +475,18 @@ } } + public void testSignum() { + assertTrue(Double.isNaN(Math.signum(Double.NaN))); + assertTrue(isNegativeZero(Math.signum(-0.))); + assertEquals(0., Math.signum(0.), 0); + assertEquals(-1, Math.signum(-2), 0); + assertEquals(1, Math.signum(2), 0); + assertEquals(-1., Math.signum(-Double.MAX_VALUE), 0); + assertEquals(1., Math.signum(Double.MAX_VALUE), 0); + assertEquals(-1., Math.signum(Double.NEGATIVE_INFINITY), 0); + assertEquals(1., Math.signum(Double.POSITIVE_INFINITY), 0); + } + public void testSin() { double v = Math.sin(0.0); assertEquals(0.0, v, 1e-7);