Revision: 8241
Author: r...@google.com
Date: Fri Jun 11 10:06:45 2010
Log: Fix behavior of Double.compare and Double.compareTo (external issue 4935)

Review at http://gwt-code-reviews.appspot.com/603801

Review by: j...@google.com
http://code.google.com/p/google-web-toolkit/source/detail?r=8241

Modified:
 /trunk/user/super/com/google/gwt/emul/java/lang/Double.java
 /trunk/user/test/com/google/gwt/emultest/java/lang/DoubleTest.java

=======================================
--- /trunk/user/super/com/google/gwt/emul/java/lang/Double.java Thu Apr 10 23:17:07 2008 +++ /trunk/user/super/com/google/gwt/emul/java/lang/Double.java Fri Jun 11 10:06:45 2010
@@ -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
=======================================
--- /trunk/user/test/com/google/gwt/emultest/java/lang/DoubleTest.java Thu Mar 25 14:04:46 2010 +++ /trunk/user/test/com/google/gwt/emultest/java/lang/DoubleTest.java Fri Jun 11 10:06:45 2010
@@ -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