blob: 607aa7f7fd3a4b9f2fb965c2cdb53ad79690c35f [file] [log] [blame]
// Copyright (c) 2011, the Dart 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.
// Testing integers with and without intrinsics.
// VMOptions=
// VMOptions=--no_intrinsify
library integer_arithmetic_test;
import "package:expect/expect.dart";
mulDivParsed(String a, String b, String product,
{String? expected_quotient1, String? expected_quotient2}) {
int int_a = int.parse(a);
int int_b = int.parse(b);
int int_product = int.parse(product);
int computed_product = int_a * int_b;
Expect.equals(int_product, computed_product);
String str_product = computed_product >= 0
? "0x${computed_product.toRadixString(16)}"
: "-0x${(-computed_product).toRadixString(16)}";
Expect.equals(product.toLowerCase(), str_product);
int computed_product2 = int_b * int_a;
Expect.equals(int_product, computed_product2);
String str_product2 = computed_product2 >= 0
? "0x${computed_product2.toRadixString(16)}"
: "-0x${(-computed_product2).toRadixString(16)}";
Expect.equals(product.toLowerCase(), str_product2);
if (int_a != 0) {
expected_quotient1 ??= b;
int int_expected_quotient1 = int.parse(expected_quotient1);
int computed_quotient1 = int_product ~/ int_a;
Expect.equals(int_expected_quotient1, computed_quotient1);
String str_quotient1 = computed_quotient1 >= 0
? "0x${computed_quotient1.toRadixString(16)}"
: "-0x${(-computed_quotient1).toRadixString(16)}";
Expect.equals(expected_quotient1.toLowerCase(), str_quotient1);
}
if (int_b != 0) {
expected_quotient2 ??= a;
int int_expected_quotient2 = int.parse(expected_quotient2);
int computed_quotient2 = int_product ~/ int_b;
Expect.equals(int_expected_quotient2, computed_quotient2);
String str_quotient2 = computed_quotient2 >= 0
? "0x${computed_quotient2.toRadixString(16)}"
: "-0x${(-computed_quotient2).toRadixString(16)}";
Expect.equals(expected_quotient2.toLowerCase(), str_quotient2);
}
}
testMultiplyDivide() {
String zero = "0x0";
String one = "0x1";
String minus_one = "-0x1";
mulDivParsed(zero, zero, zero);
mulDivParsed(one, one, one);
mulDivParsed(one, zero, zero);
mulDivParsed(zero, one, zero);
mulDivParsed(one, minus_one, minus_one);
mulDivParsed(minus_one, minus_one, one);
mulDivParsed("0x42", one, "0x42");
mulDivParsed("0x42", "0x2", "0x84");
mulDivParsed("0xFFFF", "0x2", "0x1FFFE");
mulDivParsed("0x3", "0x5", "0xF");
mulDivParsed("0xFFFFF", "0x5", "0x4FFFFB");
mulDivParsed("0xFFFFFFF", "0x5", "0x4FFFFFFB");
mulDivParsed("0xFFFFFFFF", "0x5", "0x4FFFFFFFB");
mulDivParsed("0x7FFFFFFFFFFFFFFF", "0x5", "0x7FFFFFFFFFFFFFFB",
expected_quotient1: zero, expected_quotient2: "0x1999999999999998");
mulDivParsed("0x7FFFFFFFFFFFFFFF", "0x3039", "0x7FFFFFFFFFFFCFC7",
expected_quotient1: zero, expected_quotient2: "0x2A783BE38C73D");
mulDivParsed("0x10000001", "0x5", "0x50000005");
}
main() {
testMultiplyDivide();
}