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

Reply via email to