Backport Math/StrictMath.multiplyHigh
Test: tools/test.py --dex_vm all --no-internal -v *Backport*Test*
Test: tools/test.py --no-internal -v *GenerateBackportMethods*
Change-Id: Icf3d4400ab3e5be6fd6c9ac977ac0f8e840794f5
diff --git a/src/test/examplesJava9/backport/MathBackportJava9Main.java b/src/test/examplesJava9/backport/MathBackportJava9Main.java
index c465af1..9030283 100644
--- a/src/test/examplesJava9/backport/MathBackportJava9Main.java
+++ b/src/test/examplesJava9/backport/MathBackportJava9Main.java
@@ -4,11 +4,14 @@
package backport;
+import java.math.BigInteger;
+
public class MathBackportJava9Main {
public static void main(String[] args) {
testMultiplyExactLongInt();
testMultiplyFull();
+ testMultiplyHigh();
testFloorDivLongInt();
testFloorModLongInt();
}
@@ -37,6 +40,27 @@
Math.multiplyFull(Integer.MIN_VALUE, Integer.MIN_VALUE));
}
+ public static void testMultiplyHigh() {
+ long[] interestingValues = {
+ Long.MIN_VALUE, Long.MAX_VALUE,
+ Integer.MIN_VALUE, Integer.MAX_VALUE,
+ Short.MIN_VALUE, Short.MAX_VALUE,
+ Byte.MIN_VALUE, Byte.MAX_VALUE,
+ 0L,
+ -1L, 1L,
+ -42L, 42L
+ };
+ for (long x : interestingValues) {
+ for (long y : interestingValues) {
+ long expected = BigInteger.valueOf(x)
+ .multiply(BigInteger.valueOf(y))
+ .shiftRight(64)
+ .longValue();
+ assertEquals(expected, Math.multiplyHigh(x, y));
+ }
+ }
+ }
+
public static void testFloorDivLongInt() {
assertEquals(1L, Math.floorDiv(4L, 4));
assertEquals(1L, Math.floorDiv(-4L, -4));