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) {