mirror of
https://github.com/dart-lang/sdk
synced 2024-09-18 21:11:19 +00:00
b101a7d002
Change-Id: Ib33169c3e0ffc870915c189404074a1dea472546 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/196548 Reviewed-by: Bob Nystrom <rnystrom@google.com> Commit-Queue: Leaf Petersen <leafp@google.com>
84 lines
3 KiB
Dart
84 lines
3 KiB
Dart
// 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();
|
|
}
|