Reviewers: jat,
Description:
Fix behavior of Double.compare and Double.compareTo (external issue
4935)
Please review this at http://gwt-code-reviews.appspot.com/603801/show
Affected files:
M user/super/com/google/gwt/emul/java/lang/Double.java
M user/test/com/google/gwt/emultest/java/lang/DoubleTest.java
Index: user/super/com/google/gwt/emul/java/lang/Double.java
===================================================================
--- user/super/com/google/gwt/emul/java/lang/Double.java (revision 8240)
+++ user/super/com/google/gwt/emul/java/lang/Double.java (working copy)
@@ -33,6 +33,16 @@
public static final int SIZE = 64;
public static int compare(double x, double y) {
+ if (isNaN(x)) {
+ if (isNaN(y)) {
+ return 0;
+ } else {
+ return 1;
+ }
+ } else if (isNaN(y)) {
+ return -1;
+ }
+
if (x < y) {
return -1;
} else if (x > y) {
@@ -89,13 +99,7 @@
}
public int compareTo(Double b) {
- if (value < b.value) {
- return -1;
- } else if (value > b.value) {
- return 1;
- } else {
- return 0;
- }
+ return compare(this.value, b.value);
}
@Override
Index: user/test/com/google/gwt/emultest/java/lang/DoubleTest.java
===================================================================
--- user/test/com/google/gwt/emultest/java/lang/DoubleTest.java (revision
8240)
+++ user/test/com/google/gwt/emultest/java/lang/DoubleTest.java (working
copy)
@@ -77,6 +77,34 @@
// Expected behavior
}
}
+
+ public void testCompare() {
+ assertTrue(Double.compare(Double.NaN, Double.NaN) == 0);
+ assertTrue(Double.compare(0.0, Double.NaN) < 0);
+ assertTrue(Double.compare(Double.NaN, Double.POSITIVE_INFINITY) > 0);
+ assertTrue(Double.compare(Double.NaN, 0.0) > 0);
+ assertTrue(Double.compare(Double.POSITIVE_INFINITY, Double.NaN) < 0);
+ assertTrue(Double.compare(3.0, 500.0) < 0);
+ assertTrue(Double.compare(500.0, 3.0) > 0);
+ assertTrue(Double.compare(500.0, 500.0) == 0);
+ }
+
+ public void testCompareTo() {
+ Double zero = new Double(0.0);
+ Double three = new Double(3.0);
+ Double fiveHundred = new Double(500.0);
+ Double infinity = new Double(Double.POSITIVE_INFINITY);
+ Double nan = new Double(Double.NaN);
+
+ assertTrue(nan.compareTo(nan) == 0);
+ assertTrue(zero.compareTo(nan) < 0);
+ assertTrue(nan.compareTo(infinity) > 0);
+ assertTrue(nan.compareTo(zero) > 0);
+ assertTrue(infinity.compareTo(nan) < 0);
+ assertTrue(three.compareTo(fiveHundred) < 0);
+ assertTrue(fiveHundred.compareTo(three) > 0);
+ assertTrue(fiveHundred.compareTo(fiveHundred) == 0);
+ }
public void testDoubleConstants() {
assertTrue(Double.isNaN(Double.NaN));
--
http://groups.google.com/group/Google-Web-Toolkit-Contributors