mirror of
https://github.com/dart-lang/sdk
synced 2024-09-19 14:43:32 +00:00
284f662022
Change-Id: I764d0457da85b2935e1d83309eab4c4b5b3ea000 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/126204 Commit-Queue: Bob Nystrom <rnystrom@google.com> Reviewed-by: Lasse R.H. Nielsen <lrn@google.com> Auto-Submit: Bob Nystrom <rnystrom@google.com>
67 lines
2.8 KiB
Dart
67 lines
2.8 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.
|
|
|
|
// Testing integers with and without intrinsics.
|
|
// VMOptions=
|
|
// VMOptions=--no_intrinsify
|
|
|
|
library integer_arithmetic_test;
|
|
|
|
import "package:expect/expect.dart";
|
|
|
|
divRemParsed(String a, String b, String quotient, String remainder) {
|
|
int int_a = int.parse(a);
|
|
int int_b = int.parse(b);
|
|
int int_quotient = int.parse(quotient);
|
|
int int_remainder = int.parse(remainder);
|
|
int computed_quotient = int_a ~/ int_b;
|
|
Expect.equals(int_quotient, computed_quotient);
|
|
String str_quotient = computed_quotient >= 0
|
|
? "0x${computed_quotient.toRadixString(16)}"
|
|
: "-0x${computed_quotient.toRadixString(16).substring(1)}";
|
|
Expect.equals(quotient.toLowerCase(), str_quotient);
|
|
int computed_remainder = int_a.remainder(int_b) as int;
|
|
Expect.equals(int_remainder, computed_remainder);
|
|
String str_remainder = computed_remainder >= 0
|
|
? "0x${computed_remainder.toRadixString(16)}"
|
|
: "-0x${computed_remainder.toRadixString(16).substring(1)}";
|
|
Expect.equals(remainder.toLowerCase(), str_remainder);
|
|
}
|
|
|
|
testDivideRemainder() {
|
|
String zero = "0x0";
|
|
String one = "0x1";
|
|
String minus_one = "-0x1";
|
|
|
|
divRemParsed(one, one, one, zero);
|
|
divRemParsed(zero, one, zero, zero);
|
|
divRemParsed(minus_one, one, minus_one, zero);
|
|
divRemParsed(one, "0x2", zero, one);
|
|
divRemParsed(minus_one, "0x7", zero, minus_one);
|
|
divRemParsed("0xB", "0x7", one, "0x4");
|
|
divRemParsed("0x12345678", "0x7", "0x299C335", "0x5");
|
|
divRemParsed("-0x12345678", "0x7", "-0x299C335", "-0x5");
|
|
divRemParsed("0x12345678", "-0x7", "-0x299C335", "0x5");
|
|
divRemParsed("-0x12345678", "-0x7", "0x299C335", "-0x5");
|
|
divRemParsed("0x7", "0x12345678", zero, "0x7");
|
|
divRemParsed("-0x7", "0x12345678", zero, "-0x7");
|
|
divRemParsed("-0x7", "-0x12345678", zero, "-0x7");
|
|
divRemParsed("0x7", "-0x12345678", zero, "0x7");
|
|
divRemParsed("0x12345678", "0x7", "0x299C335", "0x5");
|
|
divRemParsed("-0x12345678", "0x7", "-0x299C335", "-0x5");
|
|
divRemParsed("0x12345678", "-0x7", "-0x299C335", "0x5");
|
|
divRemParsed("-0x12345678", "-0x7", "0x299C335", "-0x5");
|
|
divRemParsed("9223372036854775807", "0x7", "0x1249249249249249", "0x0");
|
|
divRemParsed("9223372036854775807", "-0x7", "-0x1249249249249249", "0x0");
|
|
divRemParsed("-9223372036854775807", "0x7", "-0x1249249249249249", "0x0");
|
|
divRemParsed("-9223372036854775807", "-0x7", "0x1249249249249249", "0x0");
|
|
divRemParsed("-9223372036854775808", "-1", "-0x8000000000000000", "0x0"); //# 01: ok
|
|
divRemParsed("-9223372036854775808", "0x7", "-0x1249249249249249", "-0x1");
|
|
divRemParsed("-9223372036854775808", "-0x7", "0x1249249249249249", "-0x1");
|
|
}
|
|
|
|
main() {
|
|
testDivideRemainder();
|
|
}
|