Make sure that float follows the same semantics as double
...in equals and relevant utilities in java.util.Arrays.
Change-Id: I8980f29289d2a7723d1f939aa594bee1236e18a7
diff --git a/user/super/com/google/gwt/emul/java/lang/Float.java b/user/super/com/google/gwt/emul/java/lang/Float.java
index 565e2df..64340d4 100644
--- a/user/super/com/google/gwt/emul/java/lang/Float.java
+++ b/user/super/com/google/gwt/emul/java/lang/Float.java
@@ -207,7 +207,8 @@
@Override
public boolean equals(Object o) {
- return (o instanceof Float) && (((Float) o).value == value);
+ // Make sure Float follow the same semantic as Double for consistency.
+ return (o instanceof Float) && Double.valueOf(value).equals(Double.valueOf(((Float) o).value));
}
@Override
diff --git a/user/super/com/google/gwt/emul/java/util/Arrays.java b/user/super/com/google/gwt/emul/java/util/Arrays.java
index 53a927f..06c1ded 100644
--- a/user/super/com/google/gwt/emul/java/util/Arrays.java
+++ b/user/super/com/google/gwt/emul/java/util/Arrays.java
@@ -39,11 +39,9 @@
import java.util.stream.LongStream;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
-
import javaemul.internal.ArrayHelper;
import javaemul.internal.JsUtils;
import javaemul.internal.NativeArray.CompareFunction;
-
import jsinterop.annotations.JsFunction;
/**
@@ -287,34 +285,11 @@
* the array) minus 1 (to ensure error returns are negative)
*/
public static int binarySearch(float[] sortedArray, int fromIndex, int toIndex, float key) {
- checkCriticalArrayBounds(fromIndex, toIndex, sortedArray.length);
- return binarySearch0(sortedArray, fromIndex, toIndex, key);
+ return binarySearch(JsUtils.<double[]>uncheckedCast(sortedArray), fromIndex, toIndex, key);
}
public static int binarySearch(float[] sortedArray, float key) {
- return binarySearch0(sortedArray, 0, sortedArray.length, key);
- }
-
- private static int binarySearch0(final float[] sortedArray, int fromIndex, int toIndex,
- final float key) {
- int low = fromIndex;
- int high = toIndex - 1;
-
- while (low <= high) {
- final int mid = low + ((high - low) >> 1);
- final float midVal = sortedArray[mid];
-
- if (midVal < key) {
- low = mid + 1;
- } else if (midVal > key) {
- high = mid - 1;
- } else {
- // key found
- return mid;
- }
- }
- // key not found.
- return -low - 1;
+ return binarySearch(JsUtils.<double[]>uncheckedCast(sortedArray), key);
}
/**
@@ -780,7 +755,8 @@
}
for (int i = 0; i < array1.length; ++i) {
- if (array1[i] != array2[i]) {
+ // Make sure we follow Double equality semantics (per spec of the method).
+ if (!((Double) array1[i]).equals(array2[i])) {
return false;
}
}
@@ -789,25 +765,7 @@
}
public static boolean equals(float[] array1, float[] array2) {
- if (array1 == array2) {
- return true;
- }
-
- if (array1 == null || array2 == null) {
- return false;
- }
-
- if (array1.length != array2.length) {
- return false;
- }
-
- for (int i = 0; i < array1.length; ++i) {
- if (array1[i] != array2[i]) {
- return false;
- }
- }
-
- return true;
+ return equals(JsUtils.<double[]>uncheckedCast(array1), JsUtils.<double[]>uncheckedCast(array2));
}
public static boolean equals(int[] array1, int[] array2) {