blob: b7115390465d7cc970c7513f58966c2f963146e0 [file] [log] [blame]
// Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
package backport;
public class StrictMathBackportJava9Main {
public static void main(String[] args) {
testMultiplyExactLongInt();
testFloorDivLongInt();
testFloorModLongInt();
}
public static void testMultiplyExactLongInt() {
assertEquals(8L, StrictMath.multiplyExact(2L, 4));
assertEquals(Long.MAX_VALUE, StrictMath.multiplyExact(Long.MAX_VALUE, 1));
assertEquals(Long.MIN_VALUE, StrictMath.multiplyExact(Long.MIN_VALUE / 2L, 2));
try {
throw new AssertionError(StrictMath.multiplyExact(Long.MAX_VALUE, 2));
} catch (ArithmeticException expected) {
}
try {
throw new AssertionError(StrictMath.multiplyExact(Long.MIN_VALUE, 2));
} catch (ArithmeticException expected) {
}
}
public static void testFloorDivLongInt() {
assertEquals(1L, StrictMath.floorDiv(4L, 4));
assertEquals(1L, StrictMath.floorDiv(-4L, -4));
assertEquals(-1L, StrictMath.floorDiv(-4L, 4));
assertEquals(-1L, StrictMath.floorDiv(4L, -4));
assertEquals(1L, StrictMath.floorDiv(4L, 3));
assertEquals(1L, StrictMath.floorDiv(-4L, -3));
assertEquals(-2L, StrictMath.floorDiv(-4L, 3));
assertEquals(-2L, StrictMath.floorDiv(4L, -3));
// Spec edge case: result is actually MAX_VALUE+1 which becomes MIN_VALUE.
assertEquals(Long.MIN_VALUE, StrictMath.floorDiv(Long.MIN_VALUE, -1));
}
public static void testFloorModLongInt() {
assertEquals(0, StrictMath.floorMod(4L, 4));
assertEquals(0, StrictMath.floorMod(-4L, -4));
assertEquals(0, StrictMath.floorMod(-4L, 4));
assertEquals(0, StrictMath.floorMod(4L, -4));
assertEquals(1, StrictMath.floorMod(4L, 3));
assertEquals(-1, StrictMath.floorMod(-4L, -3));
assertEquals(2, StrictMath.floorMod(-4L, 3));
assertEquals(-2, StrictMath.floorMod(4L, -3));
}
private static void assertEquals(int expected, int actual) {
if (expected != actual) {
throw new AssertionError("Expected <" + expected + "> but was <" + actual + '>');
}
}
private static void assertEquals(long expected, long actual) {
if (expected != actual) {
throw new AssertionError("Expected <" + expected + "> but was <" + actual + '>');
}
}
}