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/StrictMathBackportJava9Main.java b/src/test/examplesJava9/backport/StrictMathBackportJava9Main.java
index e0e45fb..e9c33ca 100644
--- a/src/test/examplesJava9/backport/StrictMathBackportJava9Main.java
+++ b/src/test/examplesJava9/backport/StrictMathBackportJava9Main.java
@@ -4,6 +4,8 @@
package backport;
+import java.math.BigInteger;
+
public class StrictMathBackportJava9Main {
public static void main(String[] args) {
@@ -37,6 +39,27 @@
StrictMath.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, StrictMath.multiplyHigh(x, y));
+ }
+ }
+ }
+
public static void testFloorDivLongInt() {
assertEquals(1L, StrictMath.floorDiv(4L, 4));
assertEquals(1L, StrictMath.floorDiv(-4L, -4));