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