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