| // 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. |
| |
| // @dart = 2.9 |
| |
| // 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(); |
| } |