[Tests] Update _2 tests for Dart 2.0 fixed-size integers

Also, --limit-ints-to-64-bits is enabled when running tests in _2 test
suites.

This is the re-landing of 92ebd8aefa with
fixes:

* Revert changes in pkg/dev_compiler/test/browser/language_tests.js
  and tests/language/language_dart2js.status as they describe
  'language' test suite, not 'language_2'

* Correct tests/standalone_2/io/fuzz_support.dart as file_fuzz test was
  timing out on Windows and failing on android/arm.

Closes https://github.com/dart-lang/sdk/issues/31396

Change-Id: If9ca77fca300ddc605f17a7be39d1707e9724e25
Reviewed-on: https://dart-review.googlesource.com/21700
Reviewed-by: Zach Anderson <zra@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
This commit is contained in:
Alexander Markov 2017-11-17 20:28:06 +00:00 committed by commit-bot@chromium.org
parent 374a7c9e00
commit a211134136
74 changed files with 626 additions and 2015 deletions

View file

@ -1,444 +0,0 @@
// 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 Bigints with and without intrinsics.
// VMOptions=
// VMOptions=--no_intrinsify
// VMOptions=--optimization_counter_threshold=10 --no-background_compilation
library big_integer_test;
import "package:expect/expect.dart";
foo() => 1234567890123456789;
bar() => 12345678901234567890;
testSmiOverflow() {
var a = 1073741823;
var b = 1073741822;
Expect.equals(2147483645, a + b);
a = -1000000000;
b = 1000000001;
Expect.equals(-2000000001, a - b);
Expect.equals(-1000000001000000000, a * b);
}
testBigintAdd() {
// Bigint and Smi.
var a = 12345678901234567890;
var b = 2;
Expect.equals(12345678901234567892, a + b);
Expect.equals(12345678901234567892, b + a);
// Bigint and Bigint.
a = 10000000000000000001;
Expect.equals(20000000000000000002, a + a);
// Bigint and double.
b = 200000000000000000000;
var c = 100000000000000000000.0;
Expect.isTrue((c + b) is double);
Expect.equals(300000000000000000000.0, b + c);
Expect.isTrue((b + c) is double);
Expect.equals(300000000000000000000.0, c + b);
}
testBigintSub() {
// Bigint and Smi.
var a = 12345678901234567890;
var b = 2;
Expect.equals(12345678901234567888, a - b);
Expect.equals(-12345678901234567888, b - a);
// Bigint and Bigint.
a = 10000000000000000001;
Expect.equals(20000000000000000002, a + a);
// Bigint and double.
b = 200000000000000000000;
var c = 100000000000000000000.0;
Expect.isTrue((c + b) is double);
Expect.equals(-100000000000000000000.0, c - b);
Expect.isTrue((b + c) is double);
Expect.equals(100000000000000000000.0, b - c);
Expect.equals(-1, 0xF00000000 - 0xF00000001);
}
testBigintMul() {
// Bigint and Smi.
var a = 12345678901234567890;
var b = 10;
Expect.equals(123456789012345678900, a * b);
Expect.equals(123456789012345678900, b * a);
// Bigint and Bigint.
a = 12345678901234567890;
b = 10000000000000000;
Expect.equals(123456789012345678900000000000000000, a * b);
// Bigint and double.
b = 200000000000000000000;
var c = 2.0;
Expect.isTrue((c * b) is double);
Expect.equals(400000000000000000000.0, c * b);
Expect.isTrue((b * c) is double);
Expect.equals(400000000000000000000.0, b * c);
}
testBigintTruncDiv() {
var a = 12345678901234567890;
var b = 10;
// Bigint and Smi.
Expect.equals(1234567890123456789, a ~/ b);
Expect.equals(0, b ~/ a);
Expect.equals(123456789, 123456789012345678 ~/ 1000000000);
// Bigint and Bigint.
a = 12345678901234567890;
b = 10000000000000000;
Expect.equals(1234, a ~/ b);
// Bigint and double.
b = 200000000000000000000;
var c = 100000000000000000000.0;
Expect.equals(0, c ~/ b);
Expect.equals(2, b ~/ c);
}
testBigintDiv() {
// Bigint and Smi.
Expect.equals(1234567890123456789.1, 12345678901234567891 / 10);
Expect.equals(0.000000001234, 1234 / 1000000000000);
Expect.equals(12345678901234000000.0, 123456789012340000000 / 10);
// Bigint and Bigint.
var a = 12345670000000000000;
var b = 10000000000000000;
Expect.equals(1234.567, a / b);
// Bigint and double.
b = 200000000000000000000;
var c = 400000000000000000000.0;
Expect.equals(2.0, c / b);
Expect.equals(0.5, b / c);
}
testBigintModulo() {
// Bigint and Smi.
var a = 1000000000005;
var b = 10;
Expect.equals(5, a % b);
Expect.equals(10, b % a);
// Bigint & Bigint
a = 10000000000000000001;
b = 10000000000000000000;
Expect.equals(1, a % b);
Expect.equals(10000000000000000000, b % a);
// Bigint & double.
b = 10000000000000000;
var c = 10000000100000000.0;
Expect.equals(100000000.0, c % b);
Expect.equals(10000000000000000.0, b % c);
// Transitioning from Mint to Bigint.
var iStart = 4611686018427387900;
var prevX = -23 % iStart;
for (int i = iStart + 1; i < iStart + 10; i++) {
var x = -23 % i;
Expect.equals(1, x - prevX);
Expect.isTrue(x > 0);
prevX = x;
}
}
testBigintModPow() {
var x, e, m;
x = 1234567890;
e = 1000000001;
m = 19;
Expect.equals(11, x.modPow(e, m));
x = 1234567890;
e = 19;
m = 1000000001;
Expect.equals(122998977, x.modPow(e, m));
x = 19;
e = 1234567890;
m = 1000000001;
Expect.equals(619059596, x.modPow(e, m));
x = 19;
e = 1000000001;
m = 1234567890;
Expect.equals(84910879, x.modPow(e, m));
x = 1000000001;
e = 19;
m = 1234567890;
Expect.equals(872984351, x.modPow(e, m));
x = 1000000001;
e = 1234567890;
m = 19;
Expect.equals(0, x.modPow(e, m));
x = 12345678901234567890;
e = 10000000000000000001;
m = 19;
Expect.equals(2, x.modPow(e, m));
x = 12345678901234567890;
e = 19;
m = 10000000000000000001;
Expect.equals(3239137215315834625, x.modPow(e, m));
x = 19;
e = 12345678901234567890;
m = 10000000000000000001;
Expect.equals(4544207837373941034, x.modPow(e, m));
x = 19;
e = 10000000000000000001;
m = 12345678901234567890;
Expect.equals(11135411705397624859, x.modPow(e, m));
x = 10000000000000000001;
e = 19;
m = 12345678901234567890;
Expect.equals(2034013733189773841, x.modPow(e, m));
x = 10000000000000000001;
e = 12345678901234567890;
m = 19;
Expect.equals(1, x.modPow(e, m));
x = 12345678901234567890;
e = 19;
m = 10000000000000000001;
Expect.equals(3239137215315834625, x.modPow(e, m));
x = 12345678901234567890;
e = 10000000000000000001;
m = 19;
Expect.equals(2, x.modPow(e, m));
x = 123456789012345678901234567890;
e = 123456789012345678901234567891;
m = 123456789012345678901234567899;
Expect.equals(116401406051033429924651549616, x.modPow(e, m));
x = 123456789012345678901234567890;
e = 123456789012345678901234567899;
m = 123456789012345678901234567891;
Expect.equals(123456789012345678901234567890, x.modPow(e, m));
x = 123456789012345678901234567899;
e = 123456789012345678901234567890;
m = 123456789012345678901234567891;
Expect.equals(35088523091000351053091545070, x.modPow(e, m));
x = 123456789012345678901234567899;
e = 123456789012345678901234567891;
m = 123456789012345678901234567890;
Expect.equals(18310047270234132455316941949, x.modPow(e, m));
x = 123456789012345678901234567891;
e = 123456789012345678901234567899;
m = 123456789012345678901234567890;
Expect.equals(1, x.modPow(e, m));
x = 123456789012345678901234567891;
e = 123456789012345678901234567890;
m = 123456789012345678901234567899;
Expect.equals(40128068573873018143207285483, x.modPow(e, m));
}
testBigintModInverse() {
var x, m;
x = 1;
m = 1;
Expect.equals(0, x.modInverse(m));
x = 0;
m = 1000000001;
Expect.throws(() => x.modInverse(m), (e) => e is Exception); // Not coprime.
x = 1234567890;
m = 19;
Expect.equals(11, x.modInverse(m));
x = 1234567890;
m = 1000000001;
Expect.equals(189108911, x.modInverse(m));
x = 19;
m = 1000000001;
Expect.throws(() => x.modInverse(m), (e) => e is Exception); // Not coprime.
x = 19;
m = 1234567890;
Expect.equals(519818059, x.modInverse(m));
x = 1000000001;
m = 1234567890;
Expect.equals(1001100101, x.modInverse(m));
x = 1000000001;
m = 19;
Expect.throws(() => x.modInverse(m), (e) => e is Exception); // Not coprime.
x = 12345678901234567890;
m = 19;
Expect.equals(3, x.modInverse(m));
x = 12345678901234567890;
m = 10000000000000000001;
Expect.equals(9736746307686209582, x.modInverse(m));
x = 19;
m = 10000000000000000001;
Expect.equals(6315789473684210527, x.modInverse(m));
x = 19;
m = 12345678901234567890;
Expect.equals(10396361179987004539, x.modInverse(m));
x = 10000000000000000001;
m = 12345678901234567890;
Expect.equals(325004555487045911, x.modInverse(m));
x = 10000000000000000001;
m = 19;
Expect.equals(7, x.modInverse(m));
x = 12345678901234567890;
m = 10000000000000000001;
Expect.equals(9736746307686209582, x.modInverse(m));
x = 12345678901234567890;
m = 19;
Expect.equals(3, x.modInverse(m));
x = 123456789012345678901234567890;
m = 123456789012345678901234567899;
Expect.throws(() => x.modInverse(m), (e) => e is Exception); // Not coprime.
x = 123456789012345678901234567890;
m = 123456789012345678901234567891;
Expect.equals(123456789012345678901234567890, x.modInverse(m));
x = 123456789012345678901234567899;
m = 123456789012345678901234567891;
Expect.equals(77160493132716049313271604932, x.modInverse(m));
x = 123456789012345678901234567899;
m = 123456789012345678901234567890;
Expect.throws(() => x.modInverse(m), (e) => e is Exception); // Not coprime.
x = 123456789012345678901234567891;
m = 123456789012345678901234567890;
Expect.equals(1, x.modInverse(m));
x = 123456789012345678901234567891;
m = 123456789012345678901234567899;
Expect.equals(46296295879629629587962962962, x.modInverse(m));
}
testBigintGcd() {
var x, m;
x = 1;
m = 1;
Expect.equals(1, x.gcd(m));
x = 693;
m = 609;
Expect.equals(21, x.gcd(m));
x = 693 << 40;
m = 609 << 40;
Expect.equals(21 << 40, x.gcd(m));
x = 609 << 40;
m = 693 << 40;
Expect.equals(21 << 40, x.gcd(m));
x = 0;
m = 1000000001;
Expect.equals(m, x.gcd(m));
x = 1000000001;
m = 0;
Expect.equals(x, x.gcd(m));
x = 0;
m = -1000000001;
Expect.equals(-m, x.gcd(m));
x = -1000000001;
m = 0;
Expect.equals(-x, x.gcd(m));
x = 0;
m = 0;
Expect.equals(0, x.gcd(m));
x = 0;
m = 123456789012345678901234567890;
Expect.equals(m, x.gcd(m));
x = 123456789012345678901234567890;
m = 0;
Expect.equals(x, x.gcd(m));
x = 0;
m = -123456789012345678901234567890;
Expect.equals(-m, x.gcd(m));
x = -123456789012345678901234567890;
m = 0;
Expect.equals(-x, x.gcd(m));
x = 1234567890;
m = 19;
Expect.equals(1, x.gcd(m));
x = 1234567890;
m = 1000000001;
Expect.equals(1, x.gcd(m));
x = 19;
m = 1000000001;
Expect.equals(19, x.gcd(m));
x = 19;
m = 1234567890;
Expect.equals(1, x.gcd(m));
x = 1000000001;
m = 1234567890;
Expect.equals(1, x.gcd(m));
x = 1000000001;
m = 19;
Expect.equals(19, x.gcd(m));
x = 12345678901234567890;
m = 19;
Expect.equals(1, x.gcd(m));
x = 12345678901234567890;
m = 10000000000000000001;
Expect.equals(1, x.gcd(m));
x = 19;
m = 10000000000000000001;
Expect.equals(1, x.gcd(m));
x = 19;
m = 12345678901234567890;
Expect.equals(1, x.gcd(m));
x = 10000000000000000001;
m = 12345678901234567890;
Expect.equals(1, x.gcd(m));
x = 10000000000000000001;
m = 19;
Expect.equals(1, x.gcd(m));
x = 12345678901234567890;
m = 10000000000000000001;
Expect.equals(1, x.gcd(m));
x = 12345678901234567890;
m = 19;
Expect.equals(1, x.gcd(m));
x = 123456789012345678901234567890;
m = 123456789012345678901234567899;
Expect.equals(9, x.gcd(m));
x = 123456789012345678901234567890;
m = 123456789012345678901234567891;
Expect.equals(1, x.gcd(m));
x = 123456789012345678901234567899;
m = 123456789012345678901234567891;
Expect.equals(1, x.gcd(m));
x = 123456789012345678901234567899;
m = 123456789012345678901234567890;
Expect.equals(9, x.gcd(m));
x = 123456789012345678901234567891;
m = 123456789012345678901234567890;
Expect.equals(1, x.gcd(m));
x = 123456789012345678901234567891;
m = 123456789012345678901234567899;
Expect.equals(1, x.gcd(m));
}
testBigintNegate() {
var a = 0xF000000000000000F;
var b = ~a; // negate.
Expect.equals(-0xF0000000000000010, b);
Expect.equals(0, a & b);
Expect.equals(-1, a | b);
}
testShiftAmount() {
Expect.equals(0, 12 >> 111111111111111111111111111111);
Expect.equals(-1, -12 >> 111111111111111111111111111111);
bool exceptionCaught = false;
try {
var a = 1 << 1111111111111111111111111111;
} on OutOfMemoryError catch (e) {
exceptionCaught = true;
}
Expect.equals(true, exceptionCaught);
}
main() {
for (int i = 0; i < 10; i++) {
Expect.equals(1234567890123456789, foo());
Expect.equals(12345678901234567890, bar());
testSmiOverflow(); // //# overflow: ok
testBigintAdd(); // //# add: ok
testBigintSub(); // //# sub: ok
testBigintMul(); // //# mul: ok
testBigintTruncDiv(); // //# trunDiv: ok
testBigintDiv(); // //# div: ok
testBigintModulo(); // //# mod: ok
testBigintModPow(); // //# modPow: ok
testBigintModInverse(); // //# modInv: ok
testBigintGcd(); // //# gcd: ok
testBigintNegate(); // //# negate: ok
testShiftAmount(); // //# shift: ok
Expect.equals(12345678901234567890, (12345678901234567890).abs());
Expect.equals(12345678901234567890, (-12345678901234567890).abs());
var a = 10000000000000000000;
var b = 10000000000000000001;
Expect.equals(false, a.hashCode == b.hashCode);
Expect.equals(true, a.hashCode == (b - 1).hashCode);
}
}

View file

@ -1,25 +0,0 @@
// 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 Bigints with and without intrinsics.
// VMOptions=
// VMOptions=--no_intrinsify
library big_integer_test;
import "package:expect/expect.dart";
testBigintHugeMul() {
var bits = 65536;
var a = 1 << bits;
var a1 = a - 1; // all 1's
var p1 = a1 * a1;
var p2 = a * a - a - a + 1;
// Use isTrue instead of equals to avoid trying to print such big numbers.
Expect.isTrue(p1 == p2, 'products do not match');
}
main() {
testBigintHugeMul();
}

View file

@ -1,111 +0,0 @@
// 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 Bigints with and without intrinsics.
// VMOptions=
// VMOptions=--no_intrinsify
library big_integer_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)}";
Expect.equals(quotient.toLowerCase(), str_quotient);
int computed_remainder = int_a.remainder(int_b);
Expect.equals(int_remainder, computed_remainder);
String str_remainder = computed_remainder >= 0
? "0x${computed_remainder.toRadixString(16)}"
: "-0x${(-computed_remainder).toRadixString(16)}";
Expect.equals(remainder.toLowerCase(), str_remainder);
}
testBigintDivideRemainder() {
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(
"0x14B66DC327D3C88D7EAA988BBFFA9BBA877826E7EDAF373907A931FBFC3A25231DF7F2"
"516F511FB1638F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A"
"8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F"
"0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B"
"570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B57"
"0F4A8F0B570F4A8F0B570F4A8F0B570F35D89D93E776C67DD864B2034B5C739007933027"
"5CDFD41E07A15D0F5AD5256BED5F1CF91FBA375DE70",
"0x1234567890ABCDEF01234567890ABCDEF01234567890ABCDEF01234567890ABCDEF"
"01234567890ABCDEF",
"0x1234567890123456789012345678901234567890123456789012345678901234567890"
"123456789012345678901234567890123456789012345678901234567890123456789012"
"345678901234567890123456789012345678901234567890123456789012345678901234"
"567890123456789012345678901234567890123456789012345678901234567890123456"
"789012345678901234567890123456789012345678901234567890123456789012345678"
"90123456789012345678901234567890",
zero);
divRemParsed(
"0x14B66DC327D3C88D7EAA988BBFFA9BBA877826E7EDAF373907A931FBFC3A25231DF7F2"
"516F511FB1638F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A"
"8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F"
"0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B"
"570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B57"
"0F4A8F0B570F4A8F0B570F4A8F0B570F35D89D93E776C67DD864B2034B5C739007933027"
"5CDFD41E07A15D0F5AD5256BED5F1CF91FBA375DE71",
"0x1234567890ABCDEF01234567890ABCDEF01234567890ABCDEF01234567890ABCDEF"
"01234567890ABCDEF",
"0x1234567890123456789012345678901234567890123456789012345678901234567890"
"123456789012345678901234567890123456789012345678901234567890123456789012"
"345678901234567890123456789012345678901234567890123456789012345678901234"
"567890123456789012345678901234567890123456789012345678901234567890123456"
"789012345678901234567890123456789012345678901234567890123456789012345678"
"90123456789012345678901234567890",
one);
divRemParsed(
"0x14B66DC327D3C88D7EAA988BBFFA9BBA877826E7EDAF373907A931FBFC3A25231DF7F2"
"516F511FB1638F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A"
"8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F"
"0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B"
"570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B57"
"0F4A8F0B570F4A8F0B570F4A8F0B5710591E051CF233A56DEA99087BDC08417F08B6758E"
"E5EA90FCF7B39165D365D139DC60403E8743421AC5E",
"0x1234567890ABCDEF01234567890ABCDEF01234567890ABCDEF01234567890ABCDEF"
"01234567890ABCDEF",
"0x1234567890123456789012345678901234567890123456789012345678901234567890"
"123456789012345678901234567890123456789012345678901234567890123456789012"
"345678901234567890123456789012345678901234567890123456789012345678901234"
"567890123456789012345678901234567890123456789012345678901234567890123456"
"789012345678901234567890123456789012345678901234567890123456789012345678"
"90123456789012345678901234567890",
"0x1234567890ABCDEF01234567890ABCDEF01234567890ABCDEF01234567890ABCDEF"
"01234567890ABCDEE");
}
main() {
testBigintDivideRemainder();
}

View file

@ -1,804 +0,0 @@
// 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 Bigints with and without intrinsics.
// VMOptions=
// VMOptions=--no_intrinsify
library big_integer_test;
import "package:expect/expect.dart";
mulDivParsed(String a, String b, String product) {
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) {
int computed_quotient1 = int_product ~/ int_a;
Expect.equals(int_b, computed_quotient1);
String str_quotient1 = computed_quotient1 >= 0
? "0x${computed_quotient1.toRadixString(16)}"
: "-0x${(-computed_quotient1).toRadixString(16)}";
Expect.equals(b.toLowerCase(), str_quotient1);
}
if (int_b != 0) {
int computed_quotient2 = int_product ~/ int_b;
Expect.equals(int_a, computed_quotient2);
String str_quotient2 = computed_quotient2 >= 0
? "0x${computed_quotient2.toRadixString(16)}"
: "-0x${(-computed_quotient2).toRadixString(16)}";
Expect.equals(a.toLowerCase(), str_quotient2);
}
}
testBigintMultiplyDivide() {
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("0xFFFFFFFFFFFFFFFF", "0x5", "0x4FFFFFFFFFFFFFFFB");
mulDivParsed("0xFFFFFFFFFFFFFFFF", "0x3039", "0x3038FFFFFFFFFFFFCFC7");
mulDivParsed("0xFFFFFFFFFFFFFFFF", "0xFFFFFFFFFFFFFFFFFFFFFFFFFF",
"0xFFFFFFFFFFFFFFFEFFFFFFFFFF0000000000000001");
mulDivParsed(
"0xFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000",
"0xFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000",
"0xFFFFFFFFFFFFFFFEFFFFFFFFFF000000000000000100000000000000"
"000000000000000000000000000000000000000000000000000000000000");
mulDivParsed("0x10000001", "0x5", "0x50000005");
mulDivParsed(
"0x1234567890ABCDEF01234567890ABCDEF01234567890ABCDEF"
"01234567890ABCDEF01234567890ABCDEF",
"0x1234567890ABCDEF01234567890ABCDEF01234567890ABCDEF"
"01234567890ABCDEF01234567890ABCDEF",
"0x14B66DC328828BCA670CBE52943AA3894CCCE15C8F5ED1E55F"
"328F6D3F579F992299850C4B5B95213EF3FB7B4E73B5F43D4299"
"5B9F6FD5441C275F2FF89F86F28F47A94CA37481090DCCCDCA6475F09A2F2A521");
mulDivParsed(
"0x1234567890ABCDEF01234567890ABCDEF01234567890ABCDEF01234567890ABCDEF"
"01234567890ABCDEF",
"0x1234567890123456789012345678901234567890123456789012345678901234567890"
"123456789012345678901234567890123456789012345678901234567890123456789012"
"345678901234567890123456789012345678901234567890123456789012345678901234"
"567890123456789012345678901234567890123456789012345678901234567890123456"
"789012345678901234567890123456789012345678901234567890123456789012345678"
"90123456789012345678901234567890",
"0x14B66DC327D3C88D7EAA988BBFFA9BBA877826E7EDAF373907A931FBFC3A25231DF7F2"
"516F511FB1638F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A"
"8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F"
"0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B"
"570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B570F4A8F0B57"
"0F4A8F0B570F4A8F0B570F4A8F0B570F35D89D93E776C67DD864B2034B5C739007933027"
"5CDFD41E07A15D0F5AD5256BED5F1CF91FBA375DE70");
mulDivParsed(
"0x1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFF",
"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
"0x1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000"
"0000000000000000000000000000000000000000000000000000000000000000000001");
mulDivParsed(
"0x1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFF",
"0x1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFF",
"0x3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFC0000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"0000000000000000000000000000001");
// A 256 28-bit digits number squared.
mulDivParsed(
"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"0000000000000000000000000000000000000000000000000000000001");
mulDivParsed(
"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"000000000000000000000000000000000000000000000000000000000000000000000000"
"0000000000000000000000000000000000000000000000000000000001");
}
main() {
testBigintMultiplyDivide();
}

View file

@ -1,61 +0,0 @@
// Copyright (c) 2013, 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 Bigints.
library bit_twiddling_test;
import "package:expect/expect.dart";
// See bit_twiddling_test.dart first. This file contains only the tests that
// need Bigint or would fail in dart2js compatibility mode.
testBitLength() {
check(int i, width) {
Expect.equals(width, i.bitLength, '$i.bitLength == $width');
// (~i) written as (-i-1) to avoid issues with limited range of dart2js ops.
Expect.equals(width, (-i - 1).bitLength, '(~$i).bitLength == $width');
}
check(0xffffffffffffff, 56);
check(0xffffffffffffffff, 64);
check(0xffffffffffffffffff, 72);
check(0x1000000000000000000, 73);
check(0x1000000000000000001, 73);
check(0xfffffffffffffffffffffffffffffffffffffe, 152);
check(0xffffffffffffffffffffffffffffffffffffff, 152);
check(0x100000000000000000000000000000000000000, 153);
check(0x100000000000000000000000000000000000001, 153);
}
testToUnsigned() {
checkU(src, width, expected) {
Expect.equals(expected, src.toUnsigned(width));
}
checkU(0x100000100000000000001, 2, 1);
checkU(0x100000200000000000001, 60, 0x200000000000001);
checkU(0x100000200000000000001, 59, 0x200000000000001);
checkU(0x100000200000000000001, 58, 0x200000000000001);
checkU(0x100000200000000000001, 57, 1);
}
testToSigned() {
checkS(src, width, expected) {
Expect.equals(
expected, src.toSigned(width), '$src.toSigned($width) == $expected');
}
checkS(0x100000100000000000001, 2, 1);
checkS(0x100000200000000000001, 60, 0x200000000000001);
checkS(0x100000200000000000001, 59, 0x200000000000001);
checkS(0x100000200000000000001, 58, -0x200000000000000 + 1);
checkS(0x100000200000000000001, 57, 1);
}
main() {
testBitLength();
testToUnsigned();
testToSigned();
}

View file

@ -1,16 +1,12 @@
// Copyright (c) 2013, 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 Bigints.
// Testing int.bitLength, int.toUnsigned and int.toSigned.
library bit_twiddling_test;
import "package:expect/expect.dart";
bool haveBigints() {
return 100000000000000000000 + 1 != 100000000000000000000;
}
testBitLength() {
check(int i, width) {
Expect.equals(width, i.bitLength, '$i.bitLength == $width');
@ -45,18 +41,9 @@ testBitLength() {
check(0x2000000000000, 50);
check(0x2000000000001, 50);
if (haveBigints()) {
check(0xffffffffffffff, 56);
check(0xffffffffffffffff, 64);
check(0xffffffffffffffffff, 72);
check(0x1000000000000000000, 73);
check(0x1000000000000000001, 73);
check(0xfffffffffffffffffffffffffffffffffffffe, 152);
check(0xffffffffffffffffffffffffffffffffffffff, 152);
check(0x100000000000000000000000000000000000000, 153);
check(0x100000000000000000000000000000000000001, 153);
}
check(0xffffffffffffff, 56); // //# int64: ok
check(0x7fffffffffffffff, 63); // //# int64: continued
check(0xffffffffffffffff, 0); // //# int64: continued
}
testToUnsigned() {
@ -112,6 +99,18 @@ testToUnsigned() {
checkU(2, 3, 2);
checkU(3, 3, 3);
checkU(4, 3, 4);
checkU(0x0100000000000001, 2, 1); // //# int64: continued
checkU(0x0200000000000001, 60, 0x200000000000001); // //# int64: continued
checkU(0x0200000000000001, 59, 0x200000000000001); // //# int64: continued
checkU(0x0200000000000001, 58, 0x200000000000001); // //# int64: continued
checkU(0x0200000000000001, 57, 1); // //# int64: continued
checkU(0x8100000000000001, 2, 1); // //# int64: continued
checkU(0x8200000000000001, 60, 0x200000000000001); // //# int64: continued
checkU(0x8200000000000001, 59, 0x200000000000001); // //# int64: continued
checkU(0x8200000000000001, 58, 0x200000000000001); // //# int64: continued
checkU(0x8200000000000001, 57, 1); // //# int64: continued
}
testToSigned() {
@ -164,6 +163,18 @@ testToSigned() {
checkS(2, 3, 2);
checkS(3, 3, 3);
checkS(4, 3, -4);
checkS(0x0100000000000001, 2, 1); // //# int64: continued
checkS(0x0200000000000001, 60, 0x200000000000001); // //# int64: continued
checkS(0x0200000000000001, 59, 0x200000000000001); // //# int64: continued
checkS(0x0200000000000001, 58, -0x200000000000000 + 1); // //# int64: continued
checkS(0x0200000000000001, 57, 1); // //# int64: continued
checkS(0x8100000000000001, 2, 1); // //# int64: continued
checkS(0x8200000000000001, 60, 0x200000000000001); // //# int64: continued
checkS(0x8200000000000001, 59, 0x200000000000001); // //# int64: continued
checkS(0x8200000000000001, 58, -0x200000000000000 + 1); // //# int64: continued
checkS(0x8200000000000001, 57, 1); // //# int64: continued
}
main() {

View file

@ -86,7 +86,6 @@ apply3_test: Fail # mirrors not supported
dynamic_nosuchmethod_test: Fail # mirrors not supported
[ $compiler == precompiler ]
big_integer_huge_mul_vm_test: Pass, Timeout # --no_intrinsify
regexp/stack-overflow_test: RuntimeError, OK # Smaller limit with irregex interpreter
int_parse_radix_test: Pass, Timeout # --no_intrinsify
@ -100,8 +99,8 @@ growable_list_test: RuntimeError # Concurrent modifications test always runs
[ $compiler == dartdevc && $runtime != none ]
apply2_test: RuntimeError # Issue 29921
apply3_test: RuntimeError # Issue 29921
big_integer_arith_vm_test: RuntimeError # Issue 30170
big_integer_parsed_arith_vm_test: RuntimeError # Issue 29921
integer_arith_vm_test/modPow: RuntimeError # Issue 30170
integer_parsed_arith_vm_test: RuntimeError # Issue 29921
compare_to2_test: RuntimeError # Issue 30170
date_time10_test: RuntimeError # Issue 29921
hash_set_test/01: RuntimeError # Issue 29921
@ -169,17 +168,20 @@ int_modulo_arith_test/none: RuntimeError # Issue 29921
iterable_return_type_test/02: RuntimeError # Issue 29921
[ ($compiler == dart2js || $compiler == dartdevc) && $runtime != none ]
big_integer_arith_vm_test: RuntimeError # Issues 10245, 30170
big_integer_parsed_arith_vm_test: RuntimeError # Issues 10245, 29921
big_integer_parsed_div_rem_vm_test: RuntimeError # Issue 29921
big_integer_parsed_mul_div_vm_test: RuntimeError # Issue 29921
bit_twiddling_bigint_test: RuntimeError # Required bigint support.
integer_arith_vm_test/modPow: RuntimeError # Issues 10245, 30170
integer_parsed_arith_vm_test: RuntimeError # Issues 10245, 29921
integer_parsed_div_rem_vm_test: RuntimeError # Issue 29921
integer_parsed_mul_div_vm_test: RuntimeError # Issue 29921
bit_twiddling_test/int64: RuntimeError, OK # Requires fixed-size int64 support.
double_ceil_test/int64: RuntimeError, OK # Requires fixed-size int64 support.
double_floor_test/int64: RuntimeError, OK # Requires fixed-size int64 support.
double_round_test/int64: RuntimeError, OK # Requires fixed-size int64 support.
double_truncate_test/int64: RuntimeError, OK # Requires fixed-size int64 support.
json_map_test: RuntimeError
compare_to2_test: RuntimeError, OK # Requires bigint support.
compare_to2_test: RuntimeError, OK # Requires fixed-size int64 support.
hash_set_test/01: RuntimeError # Issue 11551
int_modulo_arith_test/bignum: RuntimeError # Issue 29921
int_modulo_arith_test/modPow: RuntimeError # Issue 29921
regress_r21715_test: RuntimeError # Requires bigint support.
regress_r21715_test: RuntimeError # Requires fixed-size int64 support.
int_parse_with_limited_ints_test: Skip # dart2js and dartdevc don't know about --limit-ints-to-64-bits
typed_data_with_limited_ints_test: Skip # dart2js and dartdevc don't know about --limit-ints-to-64-bits
@ -241,11 +243,7 @@ string_from_environment2_test: Fail # Flutter Issue 9111
main_test: RuntimeError # Flutter Issue 9111
[ $hot_reload || $hot_reload_rollback ]
big_integer_huge_mul_vm_test: Pass, Slow # Slow
big_integer_parsed_mul_div_vm_test: Pass, Slow # Slow
[ $hot_reload || $hot_reload_rollback ]
big_integer_huge_mul_vm_test: Pass, Slow # Slow
integer_parsed_mul_div_vm_test: Pass, Slow # Slow
[ $compiler == none || $compiler == precompiler || $compiler == app_jit ]
compare_to2_test: Fail # Issue 4018
@ -270,11 +268,11 @@ unicode_test: Fail
string_case_test/01: Fail, OK
[ ($runtime == vm || $runtime == dart_precompiled) && $arch == simarmv5te ]
big_integer_parsed_mul_div_vm_test: Pass, SloW
integer_parsed_mul_div_vm_test: Pass, Slow
int_parse_radix_test/*: Pass, Slow
[ $compiler == precompiler ]
big_integer_parsed_mul_div_vm_test: Pass, Timeout # --no_intrinsify
integer_parsed_mul_div_vm_test: Pass, Timeout # --no_intrinsify
[ $compiler == none && ($runtime == vm || $runtime == flutter)]
string_trimlr_test/02: RuntimeError # Issue 29060
@ -825,3 +823,17 @@ uri_path_test: RuntimeError
uri_query_test: RuntimeError
uri_test: RuntimeError
[ $runtime == vm || $runtime == dart_precompiled ]
integer_to_radix_string_test/01: RuntimeError # Issue 31346
integer_parsed_div_rem_vm_test/01: RuntimeError # Issue 31346
integer_parsed_arith_vm_test/01: RuntimeError # Issue 31346
[ $runtime == vm || $runtime == dart_precompiled ]
integer_parsed_arith_vm_test/02: RuntimeError # Issue 31369
[ $compiler == dartkp ]
integer_to_radix_string_test/01: CompileTimeError # Issue 31339
integer_to_radix_string_test/02: CompileTimeError # Issue 31339
integer_to_string_test/01: CompileTimeError # Issue 31339
bit_twiddling_test/int64: CompileTimeError # Issue 31339
num_sign_test: CompileTimeError, Crash # Issue 31339

View file

@ -24,9 +24,7 @@ main() {
Expect.equals(9007199254740991, 9007199254740991.0.ceil());
Expect.equals(9007199254740992, 9007199254740992.0.ceil());
Expect.equals(
179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368,
double.maxFinite.ceil());
Expect.equals(9223372036854775807, double.maxFinite.ceil()); // //# int64: ok
Expect.equals(0, (-double.minPositive).ceil());
Expect.equals(0, (2.0 * -double.minPositive).ceil());
@ -43,9 +41,7 @@ main() {
Expect.equals(-4503599627370499, (-4503599627370499.0).ceil());
Expect.equals(-9007199254740991, (-9007199254740991.0).ceil());
Expect.equals(-9007199254740992, (-9007199254740992.0).ceil());
Expect.equals(
-179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368,
(-double.maxFinite).ceil());
Expect.equals(-9223372036854775808, (-double.maxFinite).ceil()); // //# int64: ok
Expect.isTrue(0.0.ceil() is int);
Expect.isTrue(double.minPositive.ceil() is int);

View file

@ -24,9 +24,7 @@ main() {
Expect.equals(9007199254740991, 9007199254740991.0.floor());
Expect.equals(9007199254740992, 9007199254740992.0.floor());
Expect.equals(
179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368,
double.maxFinite.floor());
Expect.equals(9223372036854775807, double.maxFinite.floor()); // //# int64: ok
Expect.equals(-1, (-double.minPositive).floor());
Expect.equals(-1, (2.0 * -double.minPositive).floor());
@ -43,9 +41,7 @@ main() {
Expect.equals(-4503599627370499, (-4503599627370499.0).floor());
Expect.equals(-9007199254740991, (-9007199254740991.0).floor());
Expect.equals(-9007199254740992, (-9007199254740992.0).floor());
Expect.equals(
-179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368,
(-double.maxFinite).floor());
Expect.equals(-9223372036854775808, (-double.maxFinite).floor()); // //# int64: ok
Expect.isTrue(0.0.floor() is int);
Expect.isTrue(double.minPositive.floor() is int);

View file

@ -14,10 +14,7 @@ main() {
Expect.equals(1, 0.9999999999999999.round());
Expect.equals(1, 1.0.round());
Expect.equals(1, 1.000000000000001.round());
Expect.equals(
179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368,
double.maxFinite.round());
Expect.equals(9223372036854775807, double.maxFinite.round()); // //# int64: ok
Expect.equals(0, (-double.minPositive).round());
Expect.equals(0, (2.0 * -double.minPositive).round());
@ -27,9 +24,7 @@ main() {
Expect.equals(-1, (-0.9999999999999999).round());
Expect.equals(-1, (-1.0).round());
Expect.equals(-1, (-1.000000000000001).round());
Expect.equals(
-179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368,
(-double.maxFinite).round());
Expect.equals(-9223372036854775808, (-double.maxFinite).round()); // //# int64: ok
Expect.isTrue(0.0.round() is int);
Expect.isTrue(double.minPositive.round() is int);

View file

@ -24,9 +24,7 @@ main() {
Expect.equals(9007199254740991, 9007199254740991.0.truncate());
Expect.equals(9007199254740992, 9007199254740992.0.truncate());
Expect.equals(
179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368,
double.maxFinite.truncate());
Expect.equals(9223372036854775807, double.maxFinite.truncate()); // //# int64: ok
Expect.equals(0, (-double.minPositive).truncate());
Expect.equals(0, (2.0 * -double.minPositive).truncate());
@ -43,9 +41,7 @@ main() {
Expect.equals(-4503599627370499, (-4503599627370499.0).truncate());
Expect.equals(-9007199254740991, (-9007199254740991.0).truncate());
Expect.equals(-9007199254740992, (-9007199254740992.0).truncate());
Expect.equals(
-179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368,
(-double.maxFinite).truncate());
Expect.equals(-9223372036854775808, (-double.maxFinite).truncate()); // //# int64: ok
Expect.isTrue(0.0.truncate() is int);
Expect.isTrue(double.minPositive.truncate() is int);

View file

@ -11,15 +11,11 @@ main() {
Expect.equals(0x12345678, 0x12345678.ceil());
Expect.equals(0x123456789AB, 0x123456789AB.ceil());
Expect.equals(0x123456789ABCDEF, 0x123456789ABCDEF.ceil());
Expect.equals(0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF,
0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF.ceil());
Expect.equals(-1, -1.ceil());
Expect.equals(-0x1234, -0x1234.ceil());
Expect.equals(-0x12345678, -0x12345678.ceil());
Expect.equals(-0x123456789AB, -0x123456789AB.ceil());
Expect.equals(-0x123456789ABCDEF, -0x123456789ABCDEF.ceil());
Expect.equals(-0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF,
-0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF.ceil());
Expect.isTrue(0.ceil() is int);
Expect.isTrue(1.ceil() is int);
@ -27,13 +23,9 @@ main() {
Expect.isTrue(0x12345678.ceil() is int);
Expect.isTrue(0x123456789AB.ceil() is int);
Expect.isTrue(0x123456789ABCDEF.ceil() is int);
Expect
.isTrue(0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF.ceil() is int);
Expect.isTrue(-1.ceil() is int);
Expect.isTrue(-0x1234.ceil() is int);
Expect.isTrue(-0x12345678.ceil() is int);
Expect.isTrue(-0x123456789AB.ceil() is int);
Expect.isTrue(-0x123456789ABCDEF.ceil() is int);
Expect
.isTrue(-0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF.ceil() is int);
}

View file

@ -11,15 +11,11 @@ main() {
Expect.equals(0x12345678, 0x12345678.ceilToDouble());
Expect.equals(0x123456789AB, 0x123456789AB.ceilToDouble());
Expect.equals(81985529216486900.0, 0x123456789ABCDEF.ceilToDouble());
Expect.equals(2.7898229935051914e+55,
0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF.ceilToDouble());
Expect.equals(-1.0, -1.ceilToDouble());
Expect.equals(-0x1234, -0x1234.ceilToDouble());
Expect.equals(-0x12345678, -0x12345678.ceilToDouble());
Expect.equals(-0x123456789AB, -0x123456789AB.ceilToDouble());
Expect.equals(-81985529216486900.0, -0x123456789ABCDEF.ceilToDouble());
Expect.equals(-2.7898229935051914e+55,
-0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF.ceilToDouble());
Expect.isTrue(0.ceilToDouble() is double);
Expect.isTrue(1.ceilToDouble() is double);
@ -27,13 +23,9 @@ main() {
Expect.isTrue(0x12345678.ceilToDouble() is double);
Expect.isTrue(0x123456789AB.ceilToDouble() is double);
Expect.isTrue(0x123456789ABCDEF.ceilToDouble() is double);
Expect.isTrue(0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF.ceilToDouble()
is double);
Expect.isTrue(-1.ceilToDouble() is double);
Expect.isTrue(-0x1234.ceilToDouble() is double);
Expect.isTrue(-0x12345678.ceilToDouble() is double);
Expect.isTrue(-0x123456789AB.ceilToDouble() is double);
Expect.isTrue(-0x123456789ABCDEF.ceilToDouble() is double);
Expect.isTrue(-0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
.ceilToDouble() is double);
}

View file

@ -11,15 +11,11 @@ main() {
Expect.equals(0x12345678, 0x12345678.floor());
Expect.equals(0x123456789AB, 0x123456789AB.floor());
Expect.equals(0x123456789ABCDEF, 0x123456789ABCDEF.floor());
Expect.equals(0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF,
0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF.floor());
Expect.equals(-1, -1.floor());
Expect.equals(-0x1234, -0x1234.floor());
Expect.equals(-0x12345678, -0x12345678.floor());
Expect.equals(-0x123456789AB, -0x123456789AB.floor());
Expect.equals(-0x123456789ABCDEF, -0x123456789ABCDEF.floor());
Expect.equals(-0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF,
-0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF.floor());
Expect.isTrue(0.floor() is int);
Expect.isTrue(1.floor() is int);
@ -27,13 +23,9 @@ main() {
Expect.isTrue(0x12345678.floor() is int);
Expect.isTrue(0x123456789AB.floor() is int);
Expect.isTrue(0x123456789ABCDEF.floor() is int);
Expect
.isTrue(0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF.floor() is int);
Expect.isTrue(-1.floor() is int);
Expect.isTrue(-0x1234.floor() is int);
Expect.isTrue(-0x12345678.floor() is int);
Expect.isTrue(-0x123456789AB.floor() is int);
Expect.isTrue(-0x123456789ABCDEF.floor() is int);
Expect.isTrue(
-0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF.floor() is int);
}

View file

@ -11,15 +11,11 @@ main() {
Expect.equals(0x12345678, 0x12345678.floorToDouble());
Expect.equals(0x123456789AB, 0x123456789AB.floorToDouble());
Expect.equals(81985529216486900.0, 0x123456789ABCDEF.floorToDouble());
Expect.equals(2.7898229935051914e+55,
0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF.floorToDouble());
Expect.equals(-1.0, -1.floorToDouble());
Expect.equals(-0x1234, -0x1234.floorToDouble());
Expect.equals(-0x12345678, -0x12345678.floorToDouble());
Expect.equals(-0x123456789AB, -0x123456789AB.floorToDouble());
Expect.equals(-81985529216486900.0, -0x123456789ABCDEF.floorToDouble());
Expect.equals(-2.7898229935051914e+55,
-0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF.floorToDouble());
Expect.isTrue(0.floorToDouble() is double);
Expect.isTrue(1.floorToDouble() is double);
@ -27,13 +23,9 @@ main() {
Expect.isTrue(0x12345678.floorToDouble() is double);
Expect.isTrue(0x123456789AB.floorToDouble() is double);
Expect.isTrue(0x123456789ABCDEF.floorToDouble() is double);
Expect.isTrue(0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
.floorToDouble() is double);
Expect.isTrue(-1.floorToDouble() is double);
Expect.isTrue(-0x1234.floorToDouble() is double);
Expect.isTrue(-0x12345678.floorToDouble() is double);
Expect.isTrue(-0x123456789AB.floorToDouble() is double);
Expect.isTrue(-0x123456789ABCDEF.floorToDouble() is double);
Expect.isTrue(-0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
.floorToDouble() is double);
}

View file

@ -1,7 +1,7 @@
// Copyright (c) 2013, 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.
// SharedOptions=-Da=1 -Db=-12 -Dc=0x123 -Dd=-0x1234 -De=+0x112296 -Df=99999999999999999999
// SharedOptions=-Da=1 -Db=-12 -Dc=0x123 -Dd=-0x1234 -De=+0x112296 -Df=-9223372036854775808 -Dg=9223372036854775807
import "package:expect/expect.dart";
@ -11,5 +11,6 @@ main() {
Expect.equals(0x123, const int.fromEnvironment('c'));
Expect.equals(-0x1234, const int.fromEnvironment('d'));
Expect.equals(0x112296, const int.fromEnvironment('e'));
Expect.equals(99999999999999999999, const int.fromEnvironment('f'));
Expect.equals(-9223372036854775808, const int.fromEnvironment('f'));
Expect.equals(9223372036854775807, const int.fromEnvironment('g'));
}

View file

@ -8,7 +8,6 @@ import "dart:math" show pow;
var smallNumber = 1234567890; // is 31-bit integer.
var mediumNumber = 1234567890123456; // is 53-bit integer
var bigNumber = 590295810358705600000; // is > 64-bit integer, exact as double.
testModPow() {
test(x, e, m, expectedResult) {
@ -38,26 +37,6 @@ testModPow() {
test(19, 1000000001, 1234567890, 84910879);
test(1000000001, 19, 1234567890, 872984351);
test(1000000001, 1234567890, 19, 0);
test(12345678901234567890, 10000000000000000001, 19, 2);
test(12345678901234567890, 19, 10000000000000000001, 3239137215315834625);
test(19, 12345678901234567890, 10000000000000000001, 4544207837373941034);
test(19, 10000000000000000001, 12345678901234567890, 11135411705397624859);
test(10000000000000000001, 19, 12345678901234567890, 2034013733189773841);
test(10000000000000000001, 12345678901234567890, 19, 1);
test(12345678901234567890, 19, 10000000000000000001, 3239137215315834625);
test(12345678901234567890, 10000000000000000001, 19, 2);
test(123456789012345678901234567890, 123456789012345678901234567891,
123456789012345678901234567899, 116401406051033429924651549616);
test(123456789012345678901234567890, 123456789012345678901234567899,
123456789012345678901234567891, 123456789012345678901234567890);
test(123456789012345678901234567899, 123456789012345678901234567890,
123456789012345678901234567891, 35088523091000351053091545070);
test(123456789012345678901234567899, 123456789012345678901234567891,
123456789012345678901234567890, 18310047270234132455316941949);
test(123456789012345678901234567891, 123456789012345678901234567899,
123456789012345678901234567890, 1);
test(123456789012345678901234567891, 123456789012345678901234567890,
123456789012345678901234567899, 40128068573873018143207285483);
}
testModInverse() {
@ -91,7 +70,6 @@ testModInverse() {
testThrows(2, 4);
testThrows(99, 9);
testThrows(19, 1000000001);
testThrows(123456789012345678901234567890, 123456789012345678901234567899);
// Co-prime numbers
test(1234567890, 19, 11);
@ -106,9 +84,6 @@ testModInverse() {
test(137, smallNumber, 856087223);
test(mediumNumber, 137, 77);
test(137, mediumNumber, 540686667207353);
test(bigNumber, 137, 128); // //# bignum: ok
// Bigger numbers as modulo is tested in big_integer_arith_vm_test.dart.
// Big doubles are not co-prime, so there is nothing to test for dart2js.
}
testGcd() {
@ -186,8 +161,8 @@ testGcd() {
test(pow(2, 54), pow(2, 53), pow(2, 53));
test((pow(2, 52) - 1) * pow(2, 14), (pow(2, 26) - 1) * pow(2, 22),
(pow(2, 26) - 1) * pow(2, 14));
test((pow(2, 52) - 1) * pow(2, 10), (pow(2, 26) - 1) * pow(2, 22),
(pow(2, 26) - 1) * pow(2, 10));
}
main() {

View file

@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
import "package:expect/expect.dart";
import "dart:math" show pow;
import "dart:math" show pow, log;
void main() {
const String oneByteWhiteSpace = "\x09\x0a\x0b\x0c\x0d\x20"
@ -65,10 +65,12 @@ void main() {
}
}
final max = 9223372036854775807;
for (int i = 2; i <= 36; i++) { // //# 02: ok
// Test with bignums. // //# 02: continued
final n = (log(max) / log(i)).truncate(); // //# 02: continued
var digit = digits[i - 1]; // //# 02: continued
testParse(pow(i, 64) - 1, digit * 64, i); // //# 02: continued
testParse(pow(i, n) - 1, digit * n, i); // //# 02: continued
testParse(0, zeros, i); // //# 02: continued
} // //# 02: continued
@ -77,9 +79,8 @@ void main() {
Expect.equals(0xABCD, int.parse("abcd", radix: 16));
Expect.equals(15628859, int.parse("09azAZ", radix: 36));
// Big number.
Expect.equals(0x12345678123456781234567812345678, // //# 02: continued
int.parse("0x1234567812345678" // //# 02: continued
"1234567812345678")); // //# 02: continued
Expect.equals(9223372036854775807, int.parse("9223372036854775807"));
Expect.equals(-9223372036854775808, int.parse("-9223372036854775808"));
// Allow whitespace before and after the number.
Expect.equals(1, int.parse(" 1", radix: 2));
Expect.equals(1, int.parse("1 ", radix: 2));

View file

@ -11,15 +11,11 @@ main() {
Expect.equals(0x12345678, 0x12345678.round());
Expect.equals(0x123456789AB, 0x123456789AB.round());
Expect.equals(0x123456789ABCDEF, 0x123456789ABCDEF.round());
Expect.equals(0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF,
0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF.round());
Expect.equals(-1, -1.round());
Expect.equals(-0x1234, -0x1234.round());
Expect.equals(-0x12345678, -0x12345678.round());
Expect.equals(-0x123456789AB, -0x123456789AB.round());
Expect.equals(-0x123456789ABCDEF, -0x123456789ABCDEF.round());
Expect.equals(-0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF,
-0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF.round());
Expect.isTrue(0.round() is int);
Expect.isTrue(1.round() is int);
@ -27,13 +23,9 @@ main() {
Expect.isTrue(0x12345678.round() is int);
Expect.isTrue(0x123456789AB.round() is int);
Expect.isTrue(0x123456789ABCDEF.round() is int);
Expect
.isTrue(0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF.round() is int);
Expect.isTrue(-1.round() is int);
Expect.isTrue(-0x1234.round() is int);
Expect.isTrue(-0x12345678.round() is int);
Expect.isTrue(-0x123456789AB.round() is int);
Expect.isTrue(-0x123456789ABCDEF.round() is int);
Expect.isTrue(
-0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF.round() is int);
}

View file

@ -11,15 +11,11 @@ main() {
Expect.equals(0x12345678, 0x12345678.roundToDouble());
Expect.equals(0x123456789AB, 0x123456789AB.roundToDouble());
Expect.equals(81985529216486900.0, 0x123456789ABCDEF.roundToDouble());
Expect.equals(2.7898229935051914e+55,
0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF.roundToDouble());
Expect.equals(-1.0, -1.roundToDouble());
Expect.equals(-0x1234, -0x1234.roundToDouble());
Expect.equals(-0x12345678, -0x12345678.roundToDouble());
Expect.equals(-0x123456789AB, -0x123456789AB.roundToDouble());
Expect.equals(-81985529216486900.0, -0x123456789ABCDEF.roundToDouble());
Expect.equals(-2.7898229935051914e+55,
-0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF.roundToDouble());
Expect.isTrue(0.roundToDouble() is double);
Expect.isTrue(1.roundToDouble() is double);
@ -27,13 +23,9 @@ main() {
Expect.isTrue(0x12345678.roundToDouble() is double);
Expect.isTrue(0x123456789AB.roundToDouble() is double);
Expect.isTrue(0x123456789ABCDEF.roundToDouble() is double);
Expect.isTrue(0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
.roundToDouble() is double);
Expect.isTrue(-1.roundToDouble() is double);
Expect.isTrue(-0x1234.roundToDouble() is double);
Expect.isTrue(-0x12345678.roundToDouble() is double);
Expect.isTrue(-0x123456789AB.roundToDouble() is double);
Expect.isTrue(-0x123456789ABCDEF.roundToDouble() is double);
Expect.isTrue(-0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
.roundToDouble() is double);
}

View file

@ -11,15 +11,11 @@ main() {
Expect.equals(0x12345678, 0x12345678.toInt());
Expect.equals(0x123456789AB, 0x123456789AB.toInt());
Expect.equals(0x123456789ABCDEF, 0x123456789ABCDEF.toInt());
Expect.equals(0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF,
0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF.toInt());
Expect.equals(-1, -1.toInt());
Expect.equals(-0x1234, -0x1234.toInt());
Expect.equals(-0x12345678, -0x12345678.toInt());
Expect.equals(-0x123456789AB, -0x123456789AB.toInt());
Expect.equals(-0x123456789ABCDEF, -0x123456789ABCDEF.toInt());
Expect.equals(-0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF,
-0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF.toInt());
Expect.isTrue(0.toInt() is int);
Expect.isTrue(1.toInt() is int);
@ -27,13 +23,9 @@ main() {
Expect.isTrue(0x12345678.toInt() is int);
Expect.isTrue(0x123456789AB.toInt() is int);
Expect.isTrue(0x123456789ABCDEF.toInt() is int);
Expect
.isTrue(0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF.toInt() is int);
Expect.isTrue(-1.toInt() is int);
Expect.isTrue(-0x1234.toInt() is int);
Expect.isTrue(-0x12345678.toInt() is int);
Expect.isTrue(-0x123456789AB.toInt() is int);
Expect.isTrue(-0x123456789ABCDEF.toInt() is int);
Expect.isTrue(
-0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF.toInt() is int);
}

View file

@ -11,15 +11,11 @@ main() {
Expect.equals(0x12345678, 0x12345678.truncate());
Expect.equals(0x123456789AB, 0x123456789AB.truncate());
Expect.equals(0x123456789ABCDEF, 0x123456789ABCDEF.truncate());
Expect.equals(0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF,
0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF.truncate());
Expect.equals(-1, -1.truncate());
Expect.equals(-0x1234, -0x1234.truncate());
Expect.equals(-0x12345678, -0x12345678.truncate());
Expect.equals(-0x123456789AB, -0x123456789AB.truncate());
Expect.equals(-0x123456789ABCDEF, -0x123456789ABCDEF.truncate());
Expect.equals(-0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF,
-0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF.truncate());
Expect.isTrue(0.truncate() is int);
Expect.isTrue(1.truncate() is int);
@ -27,13 +23,9 @@ main() {
Expect.isTrue(0x12345678.truncate() is int);
Expect.isTrue(0x123456789AB.truncate() is int);
Expect.isTrue(0x123456789ABCDEF.truncate() is int);
Expect.isTrue(
0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF.truncate() is int);
Expect.isTrue(-1.truncate() is int);
Expect.isTrue(-0x1234.truncate() is int);
Expect.isTrue(-0x12345678.truncate() is int);
Expect.isTrue(-0x123456789AB.truncate() is int);
Expect.isTrue(-0x123456789ABCDEF.truncate() is int);
Expect.isTrue(
-0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF.truncate() is int);
}

View file

@ -11,15 +11,11 @@ main() {
Expect.equals(0x12345678, 0x12345678.truncateToDouble());
Expect.equals(0x123456789AB, 0x123456789AB.truncateToDouble());
Expect.equals(81985529216486900.0, 0x123456789ABCDEF.truncateToDouble());
Expect.equals(2.7898229935051914e+55,
0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF.truncateToDouble());
Expect.equals(-1.0, -1.truncateToDouble());
Expect.equals(-0x1234, -0x1234.truncateToDouble());
Expect.equals(-0x12345678, -0x12345678.truncateToDouble());
Expect.equals(-0x123456789AB, -0x123456789AB.truncateToDouble());
Expect.equals(-81985529216486900.0, -0x123456789ABCDEF.truncateToDouble());
Expect.equals(-2.7898229935051914e+55,
-0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF.truncateToDouble());
Expect.isTrue(0.truncateToDouble() is double);
Expect.isTrue(1.truncateToDouble() is double);
@ -27,13 +23,9 @@ main() {
Expect.isTrue(0x12345678.truncateToDouble() is double);
Expect.isTrue(0x123456789AB.truncateToDouble() is double);
Expect.isTrue(0x123456789ABCDEF.truncateToDouble() is double);
Expect.isTrue(0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
.truncateToDouble() is double);
Expect.isTrue(-1.truncateToDouble() is double);
Expect.isTrue(-0x1234.truncateToDouble() is double);
Expect.isTrue(-0x12345678.truncateToDouble() is double);
Expect.isTrue(-0x123456789AB.truncateToDouble() is double);
Expect.isTrue(-0x123456789ABCDEF.truncateToDouble() is double);
Expect.isTrue(-0x123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
.truncateToDouble() is double);
}

View file

@ -0,0 +1,139 @@
// 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
// VMOptions=--optimization_counter_threshold=10 --no-background_compilation
library integer_arithmetic_test;
import "package:expect/expect.dart";
foo() => 1234567890123456789;
testSmiOverflow() {
var a = 1073741823;
var b = 1073741822;
Expect.equals(2147483645, a + b);
a = -1000000000;
b = 1000000001;
Expect.equals(-2000000001, a - b);
Expect.equals(-1000000001000000000, a * b);
}
testModPow() {
var x, e, m;
x = 1234567890;
e = 1000000001;
m = 19;
Expect.equals(11, x.modPow(e, m));
x = 1234567890;
e = 19;
m = 1000000001;
Expect.equals(122998977, x.modPow(e, m));
x = 19;
e = 1234567890;
m = 1000000001;
Expect.equals(619059596, x.modPow(e, m));
x = 19;
e = 1000000001;
m = 1234567890;
Expect.equals(84910879, x.modPow(e, m));
x = 1000000001;
e = 19;
m = 1234567890;
Expect.equals(872984351, x.modPow(e, m));
x = 1000000001;
e = 1234567890;
m = 19;
Expect.equals(0, x.modPow(e, m));
}
testModInverse() {
var x, m;
x = 1;
m = 1;
Expect.equals(0, x.modInverse(m));
x = 0;
m = 1000000001;
Expect.throws(() => x.modInverse(m), (e) => e is Exception); // Not coprime.
x = 1234567890;
m = 19;
Expect.equals(11, x.modInverse(m));
x = 1234567890;
m = 1000000001;
Expect.equals(189108911, x.modInverse(m));
x = 19;
m = 1000000001;
Expect.throws(() => x.modInverse(m), (e) => e is Exception); // Not coprime.
x = 19;
m = 1234567890;
Expect.equals(519818059, x.modInverse(m));
x = 1000000001;
m = 1234567890;
Expect.equals(1001100101, x.modInverse(m));
x = 1000000001;
m = 19;
Expect.throws(() => x.modInverse(m), (e) => e is Exception); // Not coprime.
}
testGcd() {
var x, m;
x = 1;
m = 1;
Expect.equals(1, x.gcd(m));
x = 693;
m = 609;
Expect.equals(21, x.gcd(m));
x = 693 << 40;
m = 609 << 40;
Expect.equals(21 << 40, x.gcd(m));
x = 609 << 40;
m = 693 << 40;
Expect.equals(21 << 40, x.gcd(m));
x = 0;
m = 1000000001;
Expect.equals(m, x.gcd(m));
x = 1000000001;
m = 0;
Expect.equals(x, x.gcd(m));
x = 0;
m = -1000000001;
Expect.equals(-m, x.gcd(m));
x = -1000000001;
m = 0;
Expect.equals(-x, x.gcd(m));
x = 0;
m = 0;
Expect.equals(0, x.gcd(m));
x = 1234567890;
m = 19;
Expect.equals(1, x.gcd(m));
x = 1234567890;
m = 1000000001;
Expect.equals(1, x.gcd(m));
x = 19;
m = 1000000001;
Expect.equals(19, x.gcd(m));
x = 19;
m = 1234567890;
Expect.equals(1, x.gcd(m));
x = 1000000001;
m = 1234567890;
Expect.equals(1, x.gcd(m));
x = 1000000001;
m = 19;
Expect.equals(19, x.gcd(m));
}
main() {
for (int i = 0; i < 10; i++) {
Expect.equals(1234567890123456789, foo());
testSmiOverflow();
testModPow(); // //# modPow: ok
testModInverse();
testGcd();
}
}

View file

@ -2,11 +2,11 @@
// 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 Bigints with and without intrinsics.
// Testing integers with and without intrinsics.
// VMOptions=
// VMOptions=--no_intrinsify
library big_integer_test;
library integer_arithmetic_test;
import "package:expect/expect.dart";
@ -34,7 +34,7 @@ addSubParsed(String a, String b, String sum) {
Expect.equals(a.toLowerCase(), str_difference2);
}
testBigintAddSub() {
testAddSub() {
String zero = "0x0";
String one = "0x1";
String minus_one = "-0x1";
@ -60,16 +60,14 @@ testBigintAddSub() {
"0xFFFFFFFFFFFFFF",
one, // 56 bit overflow.
"0x100000000000000");
addSubParsed(
"0xFFFFFFFFFFFFFFFF",
one, // 64 bit overflow.
"0x10000000000000000");
addSubParsed(
"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", // 128 bit.
one,
"0x100000000000000000000000000000000");
addSubParsed("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", one,
"0x10000000000000000000000000000000000000000000");
addSubParsed( // //# 01: ok
"0x7FFFFFFFFFFFFFFF", // //# 01: continued
one, // 64 bit overflow. //# 01: continued
"-0x8000000000000000"); // //# 01: continued
addSubParsed( // //# 02: ok
"0xFFFFFFFFFFFFFFFF", // //# 02: continued
one, // 64 bit overflow. //# 02: continued
"0"); // //# 02: continued
addSubParsed(
"0x8000000", // 28 bit overflow.
"0x8000000",
@ -82,27 +80,10 @@ testBigintAddSub() {
"0x80000000000000", // 56 bit overflow.
"0x80000000000000",
"0x100000000000000");
addSubParsed(
"0x8000000000000000", // 64 bit overflow.
"0x8000000000000000",
"0x10000000000000000");
addSubParsed(
"0x80000000000000000000000000000000", // 128 bit.
"0x80000000000000000000000000000000",
"0x100000000000000000000000000000000");
addSubParsed(
"0x8000000000000000000000000000000000000000000",
"0x8000000000000000000000000000000000000000000",
"0x10000000000000000000000000000000000000000000");
{
String a = "0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0";
String sum1 = "0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF1";
String times2 = "0x2468ACF13579BDE02468ACF121579BDE02468ACF13579BDE0";
addSubParsed(a, zero, a);
addSubParsed(a, one, sum1);
addSubParsed(a, a, times2);
}
addSubParsed( // //# 02: continued
"0x8000000000000000", // 64 bit overflow. //# 02: continued
"0x8000000000000000", // //# 02: continued
"0"); // //# 02: continued
addSubParsed("-0x123", minus_one, "-0x124");
addSubParsed(minus_one, "-0x123", "-0x124");
@ -118,16 +99,10 @@ testBigintAddSub() {
"-0xFFFFFFFFFFFFFF",
minus_one, // 56 bit overflow.
"-0x100000000000000");
addSubParsed(
"-0xFFFFFFFFFFFFFFFF",
minus_one, // 64 bit overflow.
"-0x10000000000000000");
addSubParsed(
"-0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", // 128 bit.
minus_one,
"-0x100000000000000000000000000000000");
addSubParsed("-0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", minus_one,
"-0x10000000000000000000000000000000000000000000");
addSubParsed( // //# 01: continued
"-0x8000000000000000", // //# 01: continued
minus_one, // 64 bit overflow. //# 01: continued
"0x7FFFFFFFFFFFFFFF"); // //# 01: continued
addSubParsed(
"-0x8000000", // 28 bit overflow.
"-0x8000000",
@ -140,38 +115,10 @@ testBigintAddSub() {
"-0x80000000000000", // 56 bit overflow.
"-0x80000000000000",
"-0x100000000000000");
addSubParsed(
"-0x8000000000000000", // 64 bit overflow.
"-0x8000000000000000",
"-0x10000000000000000");
addSubParsed(
"-0x80000000000000000000000000000000", // 128 bit.
"-0x80000000000000000000000000000000",
"-0x100000000000000000000000000000000");
addSubParsed(
"-0x8000000000000000000000000000000000000000000",
"-0x8000000000000000000000000000000000000000000",
"-0x10000000000000000000000000000000000000000000");
{
String a = "-0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF0";
String sum1 = "-0x123456789ABCDEF01234567890ABCDEF0123456789ABCDEF1";
String times2 = "-0x2468ACF13579BDE02468ACF121579BDE02468ACF13579BDE0";
addSubParsed(a, zero, a);
addSubParsed(a, minus_one, sum1);
addSubParsed(a, a, times2);
}
addSubParsed("0x10000000000000000000000000000000000000000000", "0xFFFF",
"0x1000000000000000000000000000000000000000FFFF");
addSubParsed("0x10000000000000000000000000000000000000000000",
"0xFFFF00000000", "0x10000000000000000000000000000000FFFF00000000");
addSubParsed("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "0x100000000",
"0x1000000000000000000000000000000000000FFFFFFFF");
addSubParsed(
"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
"0x10000000000000000000",
"0x10000000000000000000000000FFFFFFFFFFFFFFFFFFF");
addSubParsed( // //# 01: continued
"-0x8000000000000000", // 64 bit overflow. //# 01: continued
"-0x8000000000000000", // //# 01: continued
"0x0"); // //# 01: continued
addSubParsed("0xB", "-0x7", "0x4");
addSubParsed("-0xB", "-0x7", "-0x12");
@ -183,9 +130,12 @@ testBigintAddSub() {
addSubParsed("0x7", "-0xB", "-0x4");
}
shiftLeftParsed(String a, int amount, String result) {
shiftLeftParsed(String a, int amount, String result,
{String result_back_shifted}) {
result_back_shifted ??= a;
int int_a = int.parse(a);
int int_result = int.parse(result);
int int_result_back_shifted = int.parse(result_back_shifted);
int shifted = int_a << amount;
Expect.equals(int_result, shifted);
String str_shifted = shifted >= 0
@ -193,14 +143,14 @@ shiftLeftParsed(String a, int amount, String result) {
: "-0x${(-shifted).toRadixString(16)}";
Expect.equals(result.toLowerCase(), str_shifted);
int back_shifted = shifted >> amount;
Expect.equals(int_a, back_shifted);
Expect.equals(int_result_back_shifted, back_shifted);
String str_back_shifted = back_shifted >= 0
? "0x${back_shifted.toRadixString(16)}"
: "-0x${(-back_shifted).toRadixString(16)}";
Expect.equals(a.toLowerCase(), str_back_shifted);
Expect.equals(result_back_shifted.toLowerCase(), str_back_shifted);
}
testBigintLeftShift() {
testLeftShift() {
String zero = "0x0";
String one = "0x1";
String minus_one = "-0x1";
@ -212,43 +162,50 @@ testBigintLeftShift() {
shiftLeftParsed(one, 1, "0x2");
shiftLeftParsed(one, 28, "0x10000000");
shiftLeftParsed(one, 32, "0x100000000");
shiftLeftParsed(one, 64, "0x10000000000000000");
shiftLeftParsed(one, 64, zero, result_back_shifted: zero);
shiftLeftParsed("0x5", 28, "0x50000000");
shiftLeftParsed("0x5", 32, "0x500000000");
shiftLeftParsed("0x5", 56, "0x500000000000000");
shiftLeftParsed("0x5", 64, "0x50000000000000000");
shiftLeftParsed("0x5", 128, "0x500000000000000000000000000000000");
shiftLeftParsed("0x5", 64, zero, result_back_shifted: zero);
shiftLeftParsed("0x5", 128, zero, result_back_shifted: zero);
shiftLeftParsed("0x5", 27, "0x28000000");
shiftLeftParsed("0x5", 31, "0x280000000");
shiftLeftParsed("0x5", 55, "0x280000000000000");
shiftLeftParsed("0x5", 63, "0x28000000000000000");
shiftLeftParsed("0x5", 127, "0x280000000000000000000000000000000");
shiftLeftParsed("0x5", 63, "-0x8000000000000000", // //# 01: continued
result_back_shifted: "-0x1"); // //# 01: continued
shiftLeftParsed("0x5", 127, zero, result_back_shifted: zero);
shiftLeftParsed("0x8000001", 1, "0x10000002");
shiftLeftParsed("0x80000001", 1, "0x100000002");
shiftLeftParsed("0x8000000000000001", 1, "0x10000000000000002");
shiftLeftParsed("0x8000000000000001", 1, "0x2", // //# 02: continued
result_back_shifted: "0x1"); // //# 02: continued
shiftLeftParsed("0x8000001", 29, "0x100000020000000");
shiftLeftParsed("0x80000001", 33, "0x10000000200000000");
shiftLeftParsed(
"0x8000000000000001", 65, "0x100000000000000020000000000000000");
shiftLeftParsed("0x80000001", 33, "0x200000000", result_back_shifted: "0x1");
shiftLeftParsed("0x8000000000000001", 65, zero, // //# 02: continued
result_back_shifted: zero); // //# 02: continued
shiftLeftParsed("0x7fffffffffffffff", 1, "-0x2", result_back_shifted: "-0x1");
shiftLeftParsed("0x7fffffffffffffff", 29, "-0x20000000",
result_back_shifted: "-0x1");
shiftLeftParsed(minus_one, 0, minus_one);
shiftLeftParsed("-0x1234", 0, "-0x1234");
shiftLeftParsed(minus_one, 1, "-0x2");
shiftLeftParsed(minus_one, 28, "-0x10000000");
shiftLeftParsed(minus_one, 32, "-0x100000000");
shiftLeftParsed(minus_one, 64, "-0x10000000000000000");
shiftLeftParsed(minus_one, 64, zero, result_back_shifted: zero);
shiftLeftParsed("-0x5", 28, "-0x50000000");
shiftLeftParsed("-0x5", 32, "-0x500000000");
shiftLeftParsed("-0x5", 64, "-0x50000000000000000");
shiftLeftParsed("-0x5", 64, zero, result_back_shifted: zero);
shiftLeftParsed("-0x5", 27, "-0x28000000");
shiftLeftParsed("-0x5", 31, "-0x280000000");
shiftLeftParsed("-0x5", 63, "-0x28000000000000000");
shiftLeftParsed("-0x5", 63, "-0x8000000000000000"); // //# 01: continued
shiftLeftParsed("-0x8000001", 1, "-0x10000002");
shiftLeftParsed("-0x80000001", 1, "-0x100000002");
shiftLeftParsed("-0x8000000000000001", 1, "-0x10000000000000002");
shiftLeftParsed("-0x8000001", 29, "-0x100000020000000");
shiftLeftParsed("-0x80000001", 33, "-0x10000000200000000");
shiftLeftParsed(
"-0x8000000000000001", 65, "-0x100000000000000020000000000000000");
shiftLeftParsed("-0x80000001", 33, "-0x200000000",
result_back_shifted: "-0x1");
shiftLeftParsed("-0x7fffffffffffffff", 1, "0x2", result_back_shifted: "0x1");
shiftLeftParsed("-0x7fffffffffffffff", 65, zero, result_back_shifted: zero);
shiftLeftParsed("-0x8000000000000000", 1, zero, result_back_shifted: zero);
shiftLeftParsed("-0x8000000000000000", 29, zero, result_back_shifted: zero);
}
shiftRightParsed(String a, int amount, String result) {
@ -262,7 +219,7 @@ shiftRightParsed(String a, int amount, String result) {
Expect.equals(result.toLowerCase(), str_shifted);
}
testBigintRightShift() {
testRightShift() {
String zero = "0x0";
String one = "0x1";
String minus_one = "-0x1";
@ -279,16 +236,19 @@ testBigintRightShift() {
shiftRightParsed("-0x5", 2, "-0x2");
shiftRightParsed("0x10000001", 28, one);
shiftRightParsed("0x100000001", 32, one);
shiftRightParsed("0x10000000000000001", 64, one);
shiftRightParsed("0x1000000000000001", 60, one);
shiftRightParsed("0x1000000000000001", 64, zero);
shiftRightParsed("-0x10000001", 28, "-0x2");
shiftRightParsed("-0x100000001", 32, "-0x2");
shiftRightParsed("-0x10000000000000001", 64, "-0x2");
shiftRightParsed("-0x1000000000000001", 64, minus_one);
shiftRightParsed("0x30000000", 29, one);
shiftRightParsed("0x300000000", 33, one);
shiftRightParsed("0x30000000000000000", 65, one);
shiftRightParsed("0x3000000000000000", 61, one);
shiftRightParsed("0x3000000000000000", 65, zero);
shiftRightParsed("-0x30000000", 29, "-0x2");
shiftRightParsed("-0x300000000", 33, "-0x2");
shiftRightParsed("-0x30000000000000000", 65, "-0x2");
shiftRightParsed("-0x3000000000000000", 60, "-0x3");
shiftRightParsed("-0x3000000000000000", 65, minus_one);
}
bitAndParsed(String a, String b, String result) {
@ -309,7 +269,7 @@ bitAndParsed(String a, String b, String result) {
Expect.equals(result.toLowerCase(), str_anded2);
}
testBigintBitAnd() {
testBitAnd() {
String zero = "0x0";
String one = "0x1";
String minus_one = "-0x1";
@ -325,22 +285,10 @@ testBigintBitAnd() {
bitAndParsed("0x50000000", minus_one, "0x50000000");
bitAndParsed("0x500000000", one, zero);
bitAndParsed("0x500000000", minus_one, "0x500000000");
bitAndParsed("0x50000000000000000", one, zero);
bitAndParsed("0x50000000000000000", minus_one, "0x50000000000000000");
bitAndParsed("0x5000000000000000", one, zero);
bitAndParsed("0x5000000000000000", minus_one, "0x5000000000000000");
bitAndParsed("-0x50000000", "-0x50000000", "-0x50000000");
bitAndParsed("-0x500000000", "-0x500000000", "-0x500000000");
bitAndParsed(
"-0x50000000000000000", "-0x50000000000000000", "-0x50000000000000000");
bitAndParsed("0x1234567890ABCDEF012345678", "0x876543210FEDCBA0987654321",
"0x224422000A9C9A0002244220");
bitAndParsed("-0x1234567890ABCDEF012345678", "-0x876543210FEDCBA0987654321",
"-0x977557799FEFCFEF997755778");
bitAndParsed("0x1234567890ABCDEF012345678", "-0x876543210FEDCBA0987654321",
"0x101014589002044F010101458");
bitAndParsed(
"0x1234567890ABCDEF012345678FFFFFFFFFFFFFFFFFFFFFFFFF",
"-0x876543210FEDCBA0987654321",
"0x1234567890ABCDEF012345678789ABCDEF012345F6789ABCDF");
bitAndParsed("0x12345678", "0xFFFFFFF", "0x2345678");
bitAndParsed("0x123456789", "0xFFFFFFFF", "0x23456789");
bitAndParsed("-0x10000000", "0xFFFFFFF", "0x0");
@ -349,54 +297,25 @@ testBigintBitAnd() {
bitAndParsed("-0x100000001", "0xFFFFFFFF", "0xFFFFFFFF");
bitAndParsed("-0x10000001", "0x3FFFFFFF", "0x2FFFFFFF");
bitAndParsed("-0x100000001", "0x3FFFFFFFF", "0x2FFFFFFFF");
bitAndParsed(
"-0x10000000000000001", "0x3FFFFFFFFFFFFFFFF", "0x2FFFFFFFFFFFFFFFF");
bitAndParsed("-0x100000000000000", "0xFFFFFFFFFFFFFF", "0x0");
bitAndParsed("-0x10000000000000000", "0xFFFFFFFFFFFFFFFF", "0x0");
bitAndParsed("-0x1000000000000000", "0xFFFFFFFFFFFFFFFF", // //# 02: continued
"-0x1000000000000000"); // //# 02: continued
bitAndParsed("-0x300000000000000", "0xFFFFFFFFFFFFFFF", "0xD00000000000000");
bitAndParsed(
"-0x30000000000000000", "0xFFFFFFFFFFFFFFFFF", "0xD0000000000000000");
bitAndParsed("-0x3000000000000000", "0xFFFFFFFFFFFFFFFF", // //# 02: continued
"-0x3000000000000000"); // //# 02: continued
bitAndParsed("-0x10000000", "-0x10000000", "-0x10000000");
bitAndParsed("-0x100000000", "-0x100000000", "-0x100000000");
bitAndParsed(
"-0x100000000000000", "-0x100000000000000", "-0x100000000000000");
bitAndParsed(
"-0x10000000000000000", "-0x10000000000000000", "-0x10000000000000000");
"-0x1000000000000000", "-0x1000000000000000", "-0x1000000000000000");
bitAndParsed("-0x3", "-0x2", "-0x4");
bitAndParsed("-0x10000000", "-0x10000001", "-0x20000000");
bitAndParsed("-0x100000000", "-0x100000001", "-0x200000000");
bitAndParsed(
"-0x100000000000000", "-0x100000000000001", "-0x200000000000000");
bitAndParsed(
"-0x10000000000000000", "-0x10000000000000001", "-0x20000000000000000");
bitAndParsed(
"0x123456789ABCDEF01234567890",
"0x3FFFFFFF", // Max Smi for 32 bits.
"0x34567890");
bitAndParsed(
"0x123456789ABCDEF01274567890",
"0x3FFFFFFF", // Max Smi for 32 bits.
"0x34567890");
bitAndParsed(
"0x123456789ABCDEF01234567890",
"0x40000000", // Max Smi for 32 bits + 1.
"0x0");
bitAndParsed(
"0x123456789ABCDEF01274567890",
"0x40000000", // Max Smi for 32 bits + 1.
"0x40000000");
bitAndParsed(
"0x123456789ABCDEF01234567890",
"0x3FFFFFFFFFFFFFFF", // Max Smi for 64 bits.
"0x3CDEF01234567890");
bitAndParsed(
"0x123456789ACCDEF01234567890",
"0x4000000000000000", // Max Smi for 64 bits + 1.
"0x4000000000000000");
bitAndParsed(
"0x123456789ABCDEF01234567890",
"0x4000000000000000", // Max Smi for 64 bits + 1.
"0x0");
"-0x1000000000000000", "-0x1000000000000001", "-0x2000000000000000");
}
bitOrParsed(String a, String b, String result) {
@ -417,7 +336,7 @@ bitOrParsed(String a, String b, String result) {
Expect.equals(result.toLowerCase(), str_ored2);
}
testBigintBitOr() {
testBitOr() {
String zero = "0x0";
String one = "0x1";
String minus_one = "-0x1";
@ -435,20 +354,10 @@ testBigintBitOr() {
bitOrParsed("0x50000000", minus_one, minus_one);
bitOrParsed("0x500000000", one, "0x500000001");
bitOrParsed("0x500000000", minus_one, minus_one);
bitOrParsed("0x50000000000000000", one, "0x50000000000000001");
bitOrParsed("0x50000000000000000", minus_one, minus_one);
bitOrParsed("0x5000000000000000", one, "0x5000000000000001");
bitOrParsed("0x5000000000000000", minus_one, minus_one);
bitOrParsed("-0x50000000", "-0x50000000", "-0x50000000");
bitOrParsed("-0x500000000", "-0x500000000", "-0x500000000");
bitOrParsed(
"-0x50000000000000000", "-0x50000000000000000", "-0x50000000000000000");
bitOrParsed("0x1234567890ABCDEF012345678", "0x876543210FEDCBA0987654321",
"0x977557799FEFCFEF997755779");
bitOrParsed("-0x1234567890ABCDEF012345678", "-0x876543210FEDCBA0987654321",
"-0x224422000A9C9A0002244221");
bitOrParsed("0x1234567890ABCDEF012345678", "-0x876543210FEDCBA0987654321",
"-0x854101010F440200985410101");
bitOrParsed("0x1234567890ABCDEF012345678FFFFFFFFFFFFFFFFFFFFFFFFF",
"-0x876543210FEDCBA0987654321", "-0x1");
bitOrParsed("0x12345678", "0xFFFFFFF", "0x1FFFFFFF");
bitOrParsed("0x123456789", "0xFFFFFFFF", "0x1FFFFFFFF");
bitOrParsed("-0x10000000", "0xFFFFFFF", "-0x1");
@ -457,21 +366,21 @@ testBigintBitOr() {
bitOrParsed("-0x100000001", "0xFFFFFFFF", "-0x100000001");
bitOrParsed("-0x10000001", "0x3FFFFFFF", "-0x1");
bitOrParsed("-0x100000001", "0x3FFFFFFFF", "-0x1");
bitOrParsed("-0x10000000000000001", "0x3FFFFFFFFFFFFFFFF", "-0x1");
bitOrParsed("-0x1000000000000001", "0x3FFFFFFFFFFFFFFF", "-0x1");
bitOrParsed("-0x100000000000000", "0xFFFFFFFFFFFFFF", "-0x1");
bitOrParsed("-0x10000000000000000", "0xFFFFFFFFFFFFFFFF", "-0x1");
bitOrParsed("-0x1000000000000000", "0xFFFFFFFFFFFFFFF", "-0x1");
bitOrParsed("-0x300000000000000", "0xFFFFFFFFFFFFFFF", "-0x1");
bitOrParsed("-0x30000000000000000", "0xFFFFFFFFFFFFFFFFF", "-0x1");
bitOrParsed("-0x3000000000000000", "0xFFFFFFFFFFFFFFFF", "-0x1"); // //# 02: continued
bitOrParsed("-0x10000000", "-0x10000000", "-0x10000000");
bitOrParsed("-0x100000000", "-0x100000000", "-0x100000000");
bitOrParsed("-0x100000000000000", "-0x100000000000000", "-0x100000000000000");
bitOrParsed(
"-0x10000000000000000", "-0x10000000000000000", "-0x10000000000000000");
"-0x1000000000000000", "-0x1000000000000000", "-0x1000000000000000");
bitOrParsed("-0x10000000", "-0x10000001", "-0x1");
bitOrParsed("-0x100000000", "-0x100000001", "-0x1");
bitOrParsed("-0x100000000000000", "-0x100000000000001", "-0x1");
bitOrParsed("-0x10000000000000000", "-0x10000000000000001", "-0x1");
bitOrParsed("-0x10000000000000000", "-0x1", "-0x1");
bitOrParsed("-0x1000000000000000", "-0x1000000000000001", "-0x1");
bitOrParsed("-0x1000000000000000", "-0x1", "-0x1");
}
bitXorParsed(String a, String b, String result) {
@ -498,7 +407,7 @@ bitXorParsed(String a, String b, String result) {
Expect.equals(b.toLowerCase(), str_xored3);
}
testBigintBitXor() {
testBitXor() {
String zero = "0x0";
String one = "0x1";
String minus_one = "-0x1";
@ -516,21 +425,10 @@ testBigintBitXor() {
bitXorParsed("0x50000000", minus_one, "-0x50000001");
bitXorParsed("0x500000000", one, "0x500000001");
bitXorParsed("0x500000000", minus_one, "-0x500000001");
bitXorParsed("0x50000000000000000", one, "0x50000000000000001");
bitXorParsed("0x50000000000000000", minus_one, "-0x50000000000000001");
bitXorParsed("0x5000000000000000", one, "0x5000000000000001");
bitXorParsed("0x5000000000000000", minus_one, "-0x5000000000000001");
bitXorParsed("-0x50000000", "-0x50000000", zero);
bitXorParsed("-0x500000000", "-0x500000000", zero);
bitXorParsed("-0x50000000000000000", "-0x50000000000000000", zero);
bitXorParsed("0x1234567890ABCDEF012345678", "0x876543210FEDCBA0987654321",
"0x955115599F46064F995511559");
bitXorParsed("-0x1234567890ABCDEF012345678", "-0x876543210FEDCBA0987654321",
"0x955115599F46064F995511557");
bitXorParsed("0x1234567890ABCDEF012345678", "-0x876543210FEDCBA0987654321",
"-0x955115599F46064F995511559");
bitXorParsed(
"0x1234567890ABCDEF012345678FFFFFFFFFFFFFFFFFFFFFFFFF",
"-0x876543210FEDCBA0987654321",
"-0x1234567890ABCDEF012345678789ABCDEF012345F6789ABCE0");
bitXorParsed("0x12345678", "0xFFFFFFF", "0x1DCBA987");
bitXorParsed("0x123456789", "0xFFFFFFFF", "0x1DCBA9876");
bitXorParsed("-0x10000000", "0xFFFFFFF", "-0x1");
@ -540,21 +438,20 @@ testBigintBitXor() {
bitXorParsed("-0x10000001", "0x3FFFFFFF", "-0x30000000");
bitXorParsed("-0x100000001", "0x3FFFFFFFF", "-0x300000000");
bitXorParsed(
"-0x10000000000000001", "0x3FFFFFFFFFFFFFFFF", "-0x30000000000000000");
"-0x1000000000000001", "0x3FFFFFFFFFFFFFFF", "-0x3000000000000000");
bitXorParsed("-0x100000000000000", "0xFFFFFFFFFFFFFF", "-0x1");
bitXorParsed("-0x10000000000000000", "0xFFFFFFFFFFFFFFFF", "-0x1");
bitXorParsed("-0x1000000000000000", "0xFFFFFFFFFFFFFFF", "-0x1");
bitXorParsed("-0x300000000000000", "0xFFFFFFFFFFFFFFF", "-0xD00000000000001");
bitXorParsed(
"-0x30000000000000000", "0xFFFFFFFFFFFFFFFFF", "-0xD0000000000000001");
bitXorParsed("-0x3000000000000000", "-0x1", "0x2FFFFFFFFFFFFFFF");
bitXorParsed("-0x10000000", "-0x10000000", zero);
bitXorParsed("-0x100000000", "-0x100000000", zero);
bitXorParsed("-0x100000000000000", "-0x100000000000000", zero);
bitXorParsed("-0x10000000000000000", "-0x10000000000000000", zero);
bitXorParsed("-0x1000000000000000", "-0x1000000000000000", zero);
bitXorParsed("-0x10000000", "-0x10000001", "0x1FFFFFFF");
bitXorParsed("-0x100000000", "-0x100000001", "0x1FFFFFFFF");
bitXorParsed("-0x100000000000000", "-0x100000000000001", "0x1FFFFFFFFFFFFFF");
bitXorParsed(
"-0x10000000000000000", "-0x10000000000000001", "0x1FFFFFFFFFFFFFFFF");
"-0x1000000000000000", "-0x1000000000000001", "0x1FFFFFFFFFFFFFFF");
}
bitNotParsed(String a, String result) {
@ -574,7 +471,7 @@ bitNotParsed(String a, String result) {
Expect.equals(a.toLowerCase(), str_back);
}
testBigintBitNot() {
testBitNot() {
String zero = "0x0";
String one = "0x1";
String minus_one = "-0x1";
@ -586,16 +483,17 @@ testBigintBitNot() {
bitNotParsed("0xFFFFFFF", "-0x10000000");
bitNotParsed("0xFFFFFFFF", "-0x100000000");
bitNotParsed("0xFFFFFFFFFFFFFF", "-0x100000000000000");
bitNotParsed("0xFFFFFFFFFFFFFFFF", "-0x10000000000000000");
bitNotParsed("0x1234567890ABCDEF012345678", "-0x1234567890ABCDEF012345679");
bitNotParsed( // //# 01: continued
"0x7FFFFFFFFFFFFFFF", "-0x8000000000000000"); // //# 01: continued
bitNotParsed("-0x1", "0x0");
}
main() {
testBigintAddSub();
testBigintLeftShift();
testBigintRightShift();
testBigintBitAnd();
testBigintBitOr();
testBigintBitXor();
testBigintBitNot();
testAddSub();
testLeftShift();
testRightShift();
testBitAnd();
testBitOr();
testBitXor();
testBitNot();
}

View file

@ -0,0 +1,66 @@
// 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);
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();
}

View file

@ -0,0 +1,81 @@
// 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();
}

View file

@ -73,16 +73,8 @@ main() {
0x1000000000000100,
0x2000000000000000,
0x2000000000000200,
0x8000000000000000,
0x8000000000000800,
0x10000000000000000,
0x10000000000001000,
0x100000000000010000,
0x1000000000000100000,
0x10000000000001000000,
0x100000000000010000000,
0x1000000000000100000000,
0x10000000000001000000000,
0x8000000000000000, //# 01: ok
0x8000000000000800, //# 02: ok
];
for (var bignum in bignums) {
for (int radix = 2; radix <= 36; radix++) {

View file

@ -11,7 +11,7 @@ main() {
Expect.equals(expect, value.toString());
Expect.equals(expect, "$value");
Expect.equals(expect, (new StringBuffer()..write(value)).toString());
if (value == 0) return;
if (value <= 0) return;
expect = "-$expect";
value = -value;
Expect.equals(expect, value.toString());
@ -58,20 +58,15 @@ main() {
test(0x4000000000000001, "4611686018427387905"); // //# 01: continued
// ~2^63.
test(0x7fffffffffffffff, "9223372036854775807"); // //# 01: continued
test(0x8000000000000000, "9223372036854775808"); // //# 01: continued
test(0x8000000000000001, "9223372036854775809"); // //# 01: continued
test(0x8000000000000000, "-9223372036854775808"); // //# 01: continued
test(0x8000000000000001, "-9223372036854775807"); // //# 01: continued
// ~2^64.
test(0xffffffffffffffff, "18446744073709551615"); // //# 01: continued
test(0x10000000000000000, "18446744073709551616"); // //# 01: continued
test(0x10000000000000001, "18446744073709551617"); // //# 01: continued
// Big bignum.
test(123456789012345678901234567890, // //# 01: continued
"123456789012345678901234567890"); // //# 01: continued
test(0xffffffffffffffff, "-1"); // //# 01: continued
// Decimal special cases.
int number = 10;
// Numbers 99..99, 100...00, and 100..01 up to 23 digits.
// Numbers 99..99, 100...00, and 100..01 up to 18 digits.
for (int i = 1; i < 15; i++) {
// Works in dart2js up to 10^15.
test(number - 1, "9" * i);
@ -80,7 +75,7 @@ main() {
number *= 10;
}
// Fails to represent exactly in dart2js.
for (int i = 15; i < 22; i++) { // //# 01: continued
for (int i = 15; i < 19; i++) { // //# 01: continued
test(number - 1, "9" * i); // //# 01: continued
test(number, "1" + "0" * i); // //# 01: continued
test(number + 1, "1" + "0" * (i - 1) + "1"); // //# 01: continued

View file

@ -135,9 +135,7 @@ void main() {
testIntAround(0x10000000000000); // 2^52
testIntAround(0x20000000000000); // 2^53
testIntAround(0x40000000000000); // 2^54
testIntAround(0x8000000000000000); // 2^63
testIntAround(0x10000000000000000); // 2^64
testIntAround(0x100000000000000000000); // 2^80
testIntAround(0x7ffffffffffffffe); // 2^63
testDouble(0.0);
testDouble(5e-324);

View file

@ -50,12 +50,6 @@ var numbers = [
0x8000000000000000,
0x8000000000000001,
0xffffffffffffffff, // ~64 bits
0x10000000000000000,
0x10000000000000001,
// Integers around the max-double range (2^1024, ~1025 bits).
0xfffffffffffff800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,
0xfffffffffffffc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,
0x10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,
// Doubles.
0.0,
5e-324, // min positive

View file

@ -12,6 +12,6 @@ main() {
for (int i = 0; i < 10; i++) {
var x = 0x50000000;
var shift = 34;
Expect.equals(sll(x, shift), 0x14000000000000000);
Expect.equals(sll(x, shift), 0x4000000000000000);
}
}

View file

@ -403,8 +403,10 @@ class ArithmeticTest {
Expect.equals(12, int.parse("12"));
Expect.equals(-12, int.parse("-12"));
Expect.equals(12345678901234567890, int.parse("12345678901234567890"));
Expect.equals(-12345678901234567890, int.parse("-12345678901234567890"));
Expect.equals(1234567890123456789, int.parse("1234567890123456789"));
Expect.equals(-1234567890123456789, int.parse("-1234567890123456789"));
Expect.equals(9223372036854775807, int.parse("9223372036854775807"));
Expect.equals(-9223372036854775808, int.parse("-9223372036854775808"));
// Type checks.
{
int i = int.parse("12");
@ -413,10 +415,16 @@ class ArithmeticTest {
int i = int.parse("-12");
}
{
int i = int.parse("12345678901234567890");
int i = int.parse("1234567890123456789");
}
{
int i = int.parse("-12345678901234567890");
int i = int.parse("-1234567890123456789");
}
{
int i = int.parse("9223372036854775807");
}
{
int i = int.parse("-9223372036854775808");
}
Expect.equals(1.2, double.parse("1.2"));

View file

@ -22,8 +22,8 @@ void test() {
Expect.equals(400, (100 << 2));
Expect.equals(-25, (-100 >> 2));
Expect.equals(-101, ~100);
Expect.equals(0x10000000000000000, 1 << 64);
Expect.equals(-0x10000000000000000, -1 << 64);
Expect.equals(0, 1 << 64);
Expect.equals(0, -1 << 64);
Expect.equals(0x40000000, 0x04000000 << 4);
Expect.equals(0x4000000000000000, 0x0400000000000000 << 4);
Expect.equals(0, ~ -1);
@ -32,27 +32,24 @@ void test() {
Expect.equals(0, 1 >> 160);
Expect.equals(-1, -1 >> 160);
Expect.equals(
0x100000000000000001, 0x100000000000000001 & 0x100000100F00000001);
Expect.equals(0x1, 0x1 & 0x100000100F00000001);
Expect.equals(0x1, 0x100000100F00000001 & 0x1);
Expect.equals(0x1000000000000001, 0x1000000000000001 & 0x1000100F00000001);
Expect.equals(0x1, 0x1 & 0x1000100F00000001);
Expect.equals(0x1, 0x1000100F00000001 & 0x1);
Expect.equals(
0x100000100F00000001, 0x100000000000000001 | 0x100000100F00000001);
Expect.equals(0x100000100F00000011, 0x11 | 0x100000100F00000001);
Expect.equals(0x100000100F00000011, 0x100000100F00000001 | 0x11);
Expect.equals(0x1000100F00000001, 0x1000000000000001 | 0x1000100F00000001);
Expect.equals(0x1000100F00000011, 0x11 | 0x1000100F00000001);
Expect.equals(0x1000100F00000011, 0x1000100F00000001 | 0x11);
Expect.equals(
0x0F000F00000000000000, 0x0F00F00000000000001 ^ 0xFF00000000000000001);
Expect.equals(0x31, 0xF00F00000000000001 ^ 0xF00F00000000000030);
Expect.equals(0xF00F00000000000031, 0xF00F00000000000001 ^ 0x30);
Expect.equals(0xF00F00000000000031, 0x30 ^ 0xF00F00000000000001);
Expect.equals(0x0F00000000000000, 0x0F00000000000001 ^ 0x0000000000000001);
Expect.equals(0x31, 0x0F00000000000001 ^ 0x0F00000000000030);
Expect.equals(0x0F00000000000031, 0x0F00000000000001 ^ 0x30);
Expect.equals(0x0F00000000000031, 0x30 ^ 0x0F00000000000001);
Expect.equals(0xF0000000000000000F, 0xF0000000000000000F7 >> 4);
Expect.equals(0x000000000000000F, 0x000000000000000F7 >> 4);
Expect.equals(15, 0xF00000000 >> 32);
Expect.equals(1030792151040, 16492674416655 >> 4);
Expect.equals(0xF0000000000000000F0, 0xF0000000000000000F << 4);
Expect.equals(0x00000000000000F0, 0xF00000000000000F << 4);
Expect.equals(0xF00000000, 15 << 32);
testNegativeValueShifts();
@ -83,9 +80,9 @@ void testCornerCasesRightShifts() {
Expect.equals(0x3, v32 >> 0x1E);
Expect.equals(0x1, v32 >> 0x1F);
Expect.equals(0x0, v32 >> 0x20);
Expect.equals(0x3, v64 >> 0x3E);
Expect.equals(0x1, v64 >> 0x3F);
Expect.equals(0x0, v64 >> 0x40);
Expect.equals(-1, v64 >> 0x3E);
Expect.equals(-1, v64 >> 0x3F);
Expect.equals(-1, v64 >> 0x40);
}
void testRightShift64Bit() {
@ -98,19 +95,17 @@ void testLeftShift64Bit() {
Expect.equals(0xffffffff, t << 0);
Expect.equals(0x1fffffffe, t << 1);
Expect.equals(0x7fffffff80000000, t << 31);
Expect.equals(0x10000000000000000, 2*(t+1) << 31); //# 01: compile-time error
Expect.equals(0x20000000000000000, 4*(t+1) << 31); //# 02: compile-time error
Expect.equals(0x8000000000000000, (t + 1) << 31);
}
void testLeftShift64BitWithOverflow1() {
var t = 0xffffffff;
Expect.equals(0x10000000000000000, 2*(t+1) << 31); //# 03: compile-time error
Expect.equals(0, 2 * (t + 1) << 31); //# 03: ok
}
void testLeftShift64BitWithOverflow2() {
var t = 0xffffffff;
Expect.equals(0x20000000000000000, 4*(t+1) << 31); //# 04: compile-time error
Expect.equals(0, 4 * (t + 1) << 31); //# 04: ok
}
void testLeftShift64BitWithOverflow3() {
@ -149,7 +144,19 @@ void testNegativeValueShifts() {
for (int value = 0; value > -100; value--) {
for (int i = 0; i < 300; i++) {
int b = (value << i) >> i;
Expect.equals(value, b);
if (i < (64 - value.bitLength)) {
// No bits lost.
Expect.equals(value, b);
} else if (i >= 64) {
// All bits are shifted out.
Expect.equals(0, b);
} else {
// Some bits are lost.
int masked_value = value & ((1 << (64 - i)) - 1);
int signbit = masked_value & (1 << (63 - i));
int signmask = (signbit != 0) ? (-1 << (64 - i)) : 0;
Expect.equals(signmask | masked_value, b);
}
}
}
}
@ -158,7 +165,17 @@ void testPositiveValueShifts() {
for (int value = 0; value < 100; value++) {
for (int i = 0; i < 300; i++) {
int b = (value << i) >> i;
Expect.equals(value, b);
if (i < (64 - value.bitLength)) {
Expect.equals(value, b);
} else if (i >= 64) {
Expect.equals(0, b);
} else {
// Some bits are lost.
int masked_value = value & ((1 << (64 - i)) - 1);
int signbit = masked_value & (1 << (63 - i));
int signmask = (signbit != 0) ? (-1 << (64 - i)) : 0;
Expect.equals(signmask | masked_value, b);
}
}
}
}
@ -176,7 +193,12 @@ void testNoMaskingOfShiftCount() {
for (int shift = 1; shift <= 256; shift++) {
Expect.equals(0, shiftRight(1, shift));
Expect.equals(-1, shiftRight(-1, shift));
Expect.equals(true, shiftLeft(1, shift) > shiftLeft(1, shift - 1));
if (shift < 63) {
Expect.equals(true, shiftLeft(1, shift) > shiftLeft(1, shift - 1));
} else if (shift > 64) {
Expect.equals(
true, (shiftLeft(1, shift) == 0) && (shiftLeft(1, shift - 1) == 0));
}
}
}

View file

@ -10,7 +10,7 @@ call_native(x) {
// Wrap in try to avoid inlining.
// Use a large int so the intrinsifier does not fire.
try {
return x + 12342353257893275483274832;
return x + 9223372036854775807;
} finally {}
}

View file

@ -70,9 +70,11 @@ double binOpDouble(double i, double x) {
testOSR() {
// Foul up IC data in integer's unary minus.
var y = -0x80000000;
Expect.equals(1475739525896764129300, testLoop(10, 0x80000000000000000));
Expect.equals(
(0x7fffffffffffffff + 2) * 10, testLoop(10, 0x7fffffffffffffff));
// Second time no deoptimization can occur, since runtime feedback has been collected.
Expect.equals(1475739525896764129300, testLoop(10, 0x80000000000000000));
Expect.equals(
(0x7fffffffffffffff + 2) * 10, testLoop(10, 0x7fffffffffffffff));
}
testLoop(N, x) {
@ -81,7 +83,7 @@ testLoop(N, x) {
}
int sum = 0;
for (int i = 0; i < N; ++i) {
// Guess 'x' is Smi, but is actually Bigint: deoptimize.
// Guess 'x' is Smi, but is actually Mint: deoptimize.
sum += x + 2;
}
return sum;

View file

@ -7,10 +7,10 @@ import "package:expect/expect.dart";
var myIdentical = identical;
main() {
// Bigint (2^76).
// Mint (2^63).
// TODO(rnystrom): Figure out how to change this to work on the web.
Expect.isTrue(myIdentical(75557863725914323419136, 75557863725914323419136));
Expect.isFalse(myIdentical(75557863725914323419136, 75557863725914323419137));
Expect.isTrue(myIdentical(0x8000000000000000, 0x8000000000000000));
Expect.isFalse(myIdentical(0x8000000000000000, 0x8000000000000001));
// Different types.
Expect.isFalse(myIdentical(42, 42.0));

View file

@ -9,7 +9,7 @@ import "package:expect/expect.dart";
main() {
// dart2js knows that this list is int or null.
var b = [null, 10000000000000000000000000000000000000];
var b = [null, 9223372036854775806];
// Use b[1] twice to ensure dart2js realizes it's the same value
// after type propagation.

View file

@ -43,10 +43,8 @@ bad_named_parameters_test/05: MissingCompileTimeError
bad_override_test/01: MissingCompileTimeError
bad_override_test/02: MissingCompileTimeError
bad_override_test/06: MissingCompileTimeError
bit_operations_test/01: MissingCompileTimeError
bit_operations_test/02: MissingCompileTimeError
bit_operations_test/03: MissingCompileTimeError
bit_operations_test/04: MissingCompileTimeError
bit_operations_test/03: StaticWarning
bit_operations_test/04: StaticWarning
call_constructor_on_unresolvable_class_test/01: MissingCompileTimeError
call_constructor_on_unresolvable_class_test/02: MissingCompileTimeError
call_constructor_on_unresolvable_class_test/03: MissingCompileTimeError
@ -513,10 +511,8 @@ bad_named_parameters_test/05: MissingCompileTimeError
bad_override_test/01: MissingCompileTimeError
bad_override_test/02: MissingCompileTimeError
bad_override_test/06: MissingCompileTimeError
bit_operations_test/01: MissingCompileTimeError
bit_operations_test/02: MissingCompileTimeError
bit_operations_test/03: MissingCompileTimeError
bit_operations_test/04: MissingCompileTimeError
bit_operations_test/03: StaticWarning
bit_operations_test/04: StaticWarning
call_constructor_on_unresolvable_class_test/01: MissingCompileTimeError
call_constructor_on_unresolvable_class_test/02: MissingCompileTimeError
call_constructor_on_unresolvable_class_test/03: MissingCompileTimeError
@ -892,10 +888,6 @@ async_return_types_test/nestedFuture: MissingCompileTimeError
bad_initializer1_negative_test: CompileTimeError # Issue 14529
bad_initializer2_negative_test: Fail # Issue 14880
bad_named_constructor_negative_test: CompileTimeError # Issue 18693
bit_operations_test/01: MissingCompileTimeError
bit_operations_test/02: MissingCompileTimeError
bit_operations_test/03: MissingCompileTimeError
bit_operations_test/04: MissingCompileTimeError
black_listed_test/none: Fail # Issue 14228
body_less_constructor_wrong_arg_negative_test: CompileTimeError # Issue 18695
built_in_identifier_prefix_test: CompileTimeError
@ -1061,10 +1053,6 @@ accessor_conflict_import_prefixed_test: CompileTimeError # Issue 25626
accessor_conflict_import_test: CompileTimeError # Issue 25626
additional_interface_adds_optional_args_test: CompileTimeError # Issue #30568
async_return_types_test/nestedFuture: MissingCompileTimeError
bit_operations_test/01: MissingStaticWarning # Issue 28823
bit_operations_test/02: MissingStaticWarning # Issue 28823
bit_operations_test/03: MissingStaticWarning # Issue 28823
bit_operations_test/04: MissingStaticWarning # Issue 28823
config_import_corelib_test: CompileTimeError
const_types_test/07: MissingCompileTimeError # Incorrectly allows using type parameter in const expression.
const_types_test/08: MissingCompileTimeError # Incorrectly allows using type parameter in const expression.

View file

@ -61,10 +61,6 @@ bad_named_parameters_test/05: MissingCompileTimeError
bad_override_test/01: MissingCompileTimeError
bad_override_test/02: MissingCompileTimeError
bad_override_test/06: MissingCompileTimeError
bit_operations_test/01: MissingCompileTimeError
bit_operations_test/02: MissingCompileTimeError
bit_operations_test/03: MissingCompileTimeError
bit_operations_test/04: MissingCompileTimeError
built_in_identifier_prefix_test: CompileTimeError
call_constructor_on_unresolvable_class_test/01: MissingCompileTimeError
call_constructor_on_unresolvable_class_test/02: MissingCompileTimeError
@ -1222,7 +1218,7 @@ async_star_test/02: RuntimeError
bad_override_test/03: MissingCompileTimeError
bad_override_test/04: MissingCompileTimeError
bad_override_test/05: MissingCompileTimeError
bit_operations_test/none: RuntimeError
bit_operations_test: RuntimeError
bool_check_test: RuntimeError
bool_condition_check_test: RuntimeError
branch_canonicalization_test: RuntimeError
@ -1641,7 +1637,7 @@ async_star_test/02: RuntimeError
bad_override_test/03: MissingCompileTimeError
bad_override_test/04: MissingCompileTimeError
bad_override_test/05: MissingCompileTimeError
bit_operations_test/none: RuntimeError
bit_operations_test: RuntimeError
bool_check_test: RuntimeError
bool_condition_check_test: RuntimeError
branch_canonicalization_test: RuntimeError
@ -2065,7 +2061,7 @@ async_star_test/02: RuntimeError
bad_override_test/03: MissingCompileTimeError
bad_override_test/04: MissingCompileTimeError
bad_override_test/05: MissingCompileTimeError
bit_operations_test/none: RuntimeError
bit_operations_test: RuntimeError
bool_check_test: RuntimeError
bool_condition_check_test: RuntimeError
branch_canonicalization_test: RuntimeError

View file

@ -121,10 +121,7 @@ void_type_callbacks_test/01: MissingCompileTimeError # Issue 30514
[ $compiler == dartdevc && $runtime != none ]
await_future_test: Pass, Timeout # Issue 29920
bit_operations_test/01: RuntimeError # No bigints on web.
bit_operations_test/02: RuntimeError # No bigints on web.
bit_operations_test/03: RuntimeError # No bigints on web.
bit_operations_test/04: RuntimeError # No bigints on web.
bit_operations_test: RuntimeError # No bigints on web.
covariant_override/tear_off_type_test: RuntimeError # Issue 28395
deferred_load_library_wrong_args_test/01: MissingRuntimeError, RuntimeError # Issue 29920
emit_const_fields_test: CompileTimeError
@ -1247,10 +1244,6 @@ abstract_override_adds_optional_args_concrete_subclass_test: MissingCompileTimeE
abstract_override_adds_optional_args_concrete_test: MissingCompileTimeError # Issue #30568
abstract_override_adds_optional_args_supercall_test: MissingCompileTimeError # Issue #30568
async_return_types_test/nestedFuture: MissingCompileTimeError
bit_operations_test/01: MissingCompileTimeError
bit_operations_test/02: MissingCompileTimeError
bit_operations_test/03: MissingCompileTimeError
bit_operations_test/04: MissingCompileTimeError
built_in_identifier_prefix_test: CompileTimeError
config_import_corelib_test: CompileTimeError
field3_test/01: MissingCompileTimeError
@ -1358,7 +1351,7 @@ async_star_test/03: RuntimeError
async_star_test/04: RuntimeError
async_star_test/05: RuntimeError
async_star_test/none: RuntimeError
bit_operations_test/none: RuntimeError # No bigints on web.; Expect.equals(expected: <-25>, actual: <4294967271>) fails.
bit_operations_test: RuntimeError # No bigints on web.; Expect.equals(expected: <-25>, actual: <4294967271>) fails.
branch_canonicalization_test: RuntimeError # Issue 29920; Expect.equals(expected: <0>, actual: <1>) fails.
call_closurization_test: RuntimeError # Issue 29920; TypeError: Cannot read property '0' of undefined
call_test: RuntimeError # Expect.throws(NoSuchMethodError) fails: Did not throw

View file

@ -72,10 +72,6 @@ bad_named_parameters_test/05: MissingCompileTimeError
bad_override_test/01: MissingCompileTimeError
bad_override_test/02: MissingCompileTimeError
bad_override_test/06: MissingCompileTimeError
bit_operations_test/01: MissingCompileTimeError
bit_operations_test/02: MissingCompileTimeError
bit_operations_test/03: MissingCompileTimeError
bit_operations_test/04: MissingCompileTimeError
built_in_identifier_prefix_test: CompileTimeError
built_in_identifier_type_annotation_test/22: DartkCrash # Issue 28814
built_in_identifier_type_annotation_test/22: MissingCompileTimeError # Error only in strong mode
@ -1728,10 +1724,6 @@ bad_named_parameters_test/05: MissingCompileTimeError
bad_override_test/01: MissingCompileTimeError
bad_override_test/02: MissingCompileTimeError
bad_override_test/06: MissingCompileTimeError
bit_operations_test/01: MissingCompileTimeError
bit_operations_test/02: MissingCompileTimeError
bit_operations_test/03: MissingCompileTimeError
bit_operations_test/04: MissingCompileTimeError
bool_check_test: RuntimeError
bool_condition_check_test: RuntimeError
built_in_identifier_illegal_test/01: MissingCompileTimeError
@ -3549,3 +3541,10 @@ regress_20394_test/01: MissingCompileTimeError # Fasta bug: Illegal access to pr
tearoff_dynamic_test: RuntimeError
type_argument_in_super_type_test: RuntimeError
type_check_const_function_typedef2_test: MissingCompileTimeError
[ $compiler == dartkp ]
bit_operations_test: CompileTimeError # Issue 31339
vm/unaligned_integer_access_register_index_test: CompileTimeError # Issue 31339
vm/unaligned_integer_access_literal_index_test: CompileTimeError # Issue 31339
mint_arithmetic_test: CompileTimeError # Issue 31339
identical_closure2_test: CompileTimeError # Issue 31339

View file

@ -64,10 +64,6 @@ bad_named_parameters_test/05: MissingCompileTimeError
bad_override_test/01: MissingCompileTimeError
bad_override_test/02: MissingCompileTimeError
bad_override_test/06: MissingCompileTimeError
bit_operations_test/01: MissingCompileTimeError
bit_operations_test/02: MissingCompileTimeError
bit_operations_test/03: MissingCompileTimeError
bit_operations_test/04: MissingCompileTimeError
bool_check_test: RuntimeError
bool_condition_check_test: RuntimeError
built_in_identifier_prefix_test: CompileTimeError

View file

@ -58,10 +58,6 @@ bad_named_parameters_test/05: MissingCompileTimeError
bad_override_test/01: MissingCompileTimeError
bad_override_test/02: MissingCompileTimeError
bad_override_test/06: MissingCompileTimeError
bit_operations_test/01: MissingCompileTimeError
bit_operations_test/02: MissingCompileTimeError
bit_operations_test/03: MissingCompileTimeError
bit_operations_test/04: MissingCompileTimeError
built_in_identifier_prefix_test: CompileTimeError
call_constructor_on_unresolvable_class_test/01: MissingCompileTimeError
call_constructor_on_unresolvable_class_test/02: MissingCompileTimeError

View file

@ -48,10 +48,10 @@ compareTest() {
Expect.isFalse(-4294967296 >= -6);
Expect.isFalse(-4294967296 > -4294967295);
Expect.isTrue(4294967296 < 184467440737095516150);
Expect.isTrue(-4294967296 < 184467440737095516150);
Expect.isFalse(4294967296 < -184467440737095516150);
Expect.isFalse(-4294967296 < -184467440737095516150);
Expect.isTrue(4294967296 < 9223372036854775807);
Expect.isTrue(-4294967296 < 9223372036854775807);
Expect.isFalse(4294967296 < -9223372036854775808);
Expect.isFalse(-4294967296 < -9223372036854775808);
}
compareTest2(lt, lte, gt, gte) {

View file

@ -13,32 +13,21 @@ main() {
testNumberIdentity() {
const int smi = 8;
const int mint = 9223372036854775806;
const int bigint = 22107138293752210713829375;
const double dbl = 8.0;
var a = smi;
var b = a + 0;
Expect.isTrue(identical(a, b));
Expect.isFalse(identical(b, mint));
Expect.isFalse(identical(b, bigint));
a = mint;
b = a + 0;
Expect.isTrue(identical(a, b));
Expect.isFalse(identical(b, smi));
Expect.isFalse(identical(b, bigint));
Expect.isFalse(identical(b, dbl));
a = bigint;
b = a + 0;
Expect.isTrue(identical(a, b));
Expect.isFalse(identical(b, smi));
Expect.isFalse(identical(b, mint));
Expect.isFalse(identical(b, dbl));
var a2 = dbl;
var b2 = a2 + 0.0;
Expect.isTrue(identical(a2, b2));
Expect.isFalse(identical(b2, mint));
Expect.isFalse(identical(b2, bigint));
}

View file

@ -21,9 +21,9 @@ cmp(a, b, c) {
}
main() {
var big = 100000000000000000000000000000000000;
var before = cmp(big, big, 0);
var str = "abc";
var before = cmp(str, str, 0);
Expect.equals(16, before);
for (var i = 0; i < 20; i++) cmp(big, big + 1, 0);
Expect.equals(before, cmp(big, big, 0));
for (var i = 0; i < 20; i++) cmp(str, str, 0);
Expect.equals(before, cmp(str, str, 0));
}

View file

@ -16,6 +16,6 @@ main() {
Expect.equals(x, mintRightShift(x, 0));
Expect.equals(2 * x, mintLeftShift(x, 1));
Expect.equals(x ~/ 2, mintRightShift(x, 1));
Expect.equals(x, mintRightShift(mintLeftShift(x, i), i));
Expect.equals((i >= 16) ? 1 : x, mintRightShift(mintLeftShift(x, i), i));
}
}

View file

@ -11,5 +11,10 @@ void main() {
Expect.equals(r, x ~/ 5);
x *= 10;
r *= 10;
if (x < 0) {
// Overflow.
break;
}
}
}

View file

@ -273,7 +273,7 @@ void testErrors() {
badEncode(0x1000);
badEncode(0x10000);
badEncode(0x100000000); // //# 01: ok
badEncode(0x10000000000000000); // //# 01: continued
badEncode(0x7000000000000000); // //# 01: continued
}
void testIssue25577() {

View file

@ -84,7 +84,7 @@ void testNumbers() {
"9"
"1234.56789123456701418035663664340972900390625",
"1.2345678912345671e-14",
"99999999999999999999"
"9223372036854775807"
]) {
var expected = num.parse(number);
for (int i = 1; i < number.length - 1; i++) {

View file

@ -58,7 +58,6 @@ final TESTS = [
[-0xFF],
[-0x80000000],
[-0x40000000],
[-0x80000000000000000]
];
final TESTS2 = [

View file

@ -122,7 +122,7 @@ mirrors/reflected_type_special_types_test: RuntimeError # Issue 12607
mirrors/reflected_type_typedefs_test: RuntimeError # Issue 12607
mirrors/reflected_type_typevars_test: RuntimeError # Issue 12607
profiler/metrics_num_test: Skip # Because of an int / double type test.
typed_data/int32x4_bigint_test: RuntimeError # Issue 1533
typed_data/int32x4_arithmetic_test/int64: RuntimeError # Issue 1533
typed_data/int64_list_load_store_test: RuntimeError # Issue 10275
typed_data/typed_data_hierarchy_int64_test: RuntimeError # Issue 10275

View file

@ -96,7 +96,7 @@ mirrors/reflected_type_special_types_test: RuntimeError # Issue 29922
mirrors/reflected_type_typedefs_test: RuntimeError # Issue 29922
mirrors/reflected_type_typevars_test: RuntimeError # Issue 29922
mirrors/regress_14304_test: RuntimeError # Issue 29922
typed_data/int32x4_bigint_test: RuntimeError # Issue 29922
typed_data/int32x4_arithmetic_test/int64: RuntimeError # Issue 29922
typed_data/int64_list_load_store_test: RuntimeError # Issue 29922
typed_data/typed_data_hierarchy_int64_test: RuntimeError # Issue 29922

View file

@ -314,3 +314,6 @@ typed_data/int32x4_static_test/02: MissingCompileTimeError
[ $compiler == dartkp && $runtime == dart_precompiled && $strong && $mode == debug]
isolate/isolate_complex_messages_test: Crash
isolate/static_function_test: Skip # Flaky (https://github.com/dart-lang/sdk/issues/30063).
[ $compiler == dartkp ]
typed_data/int32x4_arithmetic_test/int64: CompileTimeError # Issue 31339

View file

@ -166,7 +166,7 @@ test() {
// The second argument is an odd integer as int, but not when converted
// to double.
Expect.identical(Infinity, pow(-0.0, -9223372036854775809));
Expect.identical(Infinity, pow(-0.0, -9223372036854775807));
}
main() {

View file

@ -12,7 +12,7 @@ import 'dart:math';
main() {
var results = [];
for (var i = 60; i < 80; i++) {
for (var i = 60; i < 64; i++) {
var rng = new Random(1 << i);
var val = rng.nextInt(100000);
print("$i: $val");

View file

@ -225,6 +225,10 @@ void checkSeed() {
50711
];
for (var i = 0, m = 1; i < 75; i++) {
if (rawSeed * m < 0) {
// Overflow.
break;
}
Expect.equals(expectations[i], new Random(rawSeed * m).nextInt(65536));
Expect.equals(
negative_seed_expectations[i], new Random(rawSeed * -m).nextInt(65536));

View file

@ -91,9 +91,16 @@ testSub() {
Expect.equals(1, o.w);
}
testTruncation() {
var n = 0xAABBCCDD00000001;
var x = new Int32x4(n, 0, 0, 0);
Expect.equals(x.x, 1);
}
main() {
for (int i = 0; i < 20; i++) {
testAdd();
testSub();
testTruncation(); // //# int64: ok
}
}

View file

@ -1,16 +0,0 @@
// Copyright (c) 2013, 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.
// VMOptions=--max_deoptimization_counter_threshold=1000 --optimization-counter-threshold=10 --no-background-compilation
// Library tag to be able to run in html test framework.
library int32x4_bigint_test;
import 'dart:typed_data';
import 'package:expect/expect.dart';
main() {
var n = 18446744073709551617;
var x = new Int32x4(n, 0, 0, 0);
Expect.equals(x.x, 1);
}

View file

@ -28,7 +28,6 @@ main() {
// Exceptions.
Expect.throws(() => shiftLeft0(-1));
return;
Expect.equals(1, shiftLeft1(0));
Expect.equals(128, shiftLeft1(7));
Expect.equals(536870912, shiftLeft1(29));
@ -51,7 +50,7 @@ main() {
Expect.equals(2377900603251621888, shiftLeft8448(48));
// Deoptimize on 64 bits.
Expect.equals(4755801206503243776, shiftLeft8448(49));
Expect.equals(9511602413006487552, shiftLeft8448(50));
Expect.equals(-8935141660703064064, shiftLeft8448(50));
Expect.equals(-1, shiftLeftNeg1(0));
Expect.equals(-128, shiftLeftNeg1(7));
@ -75,5 +74,5 @@ main() {
Expect.equals(-2377900603251621888, shiftLeftNeg8448(48));
// Deoptimize on 64 bits.
Expect.equals(-4755801206503243776, shiftLeftNeg8448(49));
Expect.equals(-9511602413006487552, shiftLeftNeg8448(50));
Expect.equals(8935141660703064064, shiftLeftNeg8448(50));
}

View file

@ -180,7 +180,7 @@ class DeoptimizationTest {
Expect.equals(0, ShiftRight(10, 64));
// Deoptimize ShiftRight because 'a' is a Mint.
var mint = 1 << 63;
Expect.equals(1 << 3, ShiftRight(mint, 60));
Expect.equals(-1 << 3, ShiftRight(mint, 60));
}
static doubleUnary() {

View file

@ -121,7 +121,7 @@ void testUint64ToSmi() {
var z = intArray[2];
var w = intArray[3];
Expect.equals(4611686018427387903, x);
Expect.equals(18446744073709551615, y);
Expect.equals(-1, y);
Expect.equals(4611686018427387904, z);
Expect.equals(9223372036854775808, w);
}

View file

@ -40,8 +40,7 @@ testChangeDirectory() {
testChangeDirectoryIllegalArguments() {
Expect.throwsArgumentError(() => Directory.current = 1);
Expect.throwsArgumentError(
() => Directory.current = 111111111111111111111111111111111111);
Expect.throwsArgumentError(() => Directory.current = 9223372036854775807);
Expect.throwsArgumentError(() => Directory.current = true);
Expect.throwsArgumentError(() => Directory.current = []);
Expect.throwsArgumentError(() => Directory.current = new File("xxx"));

View file

@ -552,14 +552,14 @@ class FileTest {
openedFile.writeFromSync([0], 0, 1);
openedFile.writeFromSync(const [1], 0, 1);
openedFile.writeFromSync(new MyListOfOneElement(2), 0, 1);
var x = 12345678901234567890123456789012345678901234567890;
var y = 12345678901234567890123456789012345678901234567893;
var x = -259;
var y = 0;
openedFile.writeFromSync([y - x], 0, 1);
openedFile.writeFromSync([260], 0, 1); // 260 = 256 + 4 = 0x104.
openedFile.writeFromSync(const [261], 0, 1);
openedFile.writeFromSync(new MyListOfOneElement(262), 0, 1);
x = 12345678901234567890123456789012345678901234567890;
y = 12345678901234567890123456789012345678901234568153;
x = 0;
y = 263;
openedFile.writeFrom([y - x], 0, 1).then((ignore) {
openedFile.close().then((ignore) {
// Check the written bytes.

View file

@ -11,7 +11,7 @@ import 'dart:io';
const typeMapping = const {
'null': null,
'int': 0,
'bigint': 18446744073709551617,
'int64': -9000000000000000000,
'String': 'a',
'FileMode': FileMode.READ,
'num': 0.50,

View file

@ -35,12 +35,7 @@ class MediumIntegerTest {
Expect.equals(200000000000000002, a + a);
a = 9223372036854775800;
b = 1000000000000000000;
Expect.equals(10223372036854775800, a + b);
// Mint and Bigint.
a = 100000000000000001;
b = 10000000000000000001;
Expect.equals(10100000000000000002, a + b);
Expect.equals(-8223372036854775816, a + b);
// Mint and double.
var da = 100000000000.0;
@ -55,7 +50,7 @@ class MediumIntegerTest {
var b = 2;
Expect.equals(1234567890123456787, a - b);
a = -9223372036854775808;
Expect.equals(-9223372036854775809, a - 1);
Expect.equals(9223372036854775807, a - 1);
// Mint and Mint.
a = 1234567890123456789;
@ -63,7 +58,7 @@ class MediumIntegerTest {
Expect.equals(234567890123456789, a - b);
a = -9223372036854775808;
b = 1000000000000000000;
Expect.equals(-10223372036854775808, a - b);
Expect.equals(8223372036854775808, a - b);
}
static testMintDiv() {
@ -77,9 +72,9 @@ class MediumIntegerTest {
// Mint and Smi.
var a = 4611686018427387904;
var b = 10;
Expect.equals(46116860184273879040, a * b);
Expect.equals(-9223372036854775808, a * b);
b = 1000000000000000000;
Expect.equals(4611686018427387904000000000000000000, a * b);
Expect.equals(0, a * b);
}
static testMintAnd(mint) {

View file

@ -14,7 +14,7 @@ main() {
testNumberIdentity() {
const int smi = 8;
const int bigint = 22107138293752210713829375;
const int mint = 9223372036854775807;
const double dbl = 8.0;
// No int/double differences in dart2js.
var a = smi + 0;
@ -22,7 +22,7 @@ testNumberIdentity() {
var c = dbl + 0.0;
Expect.isFalse(identical(c, smi));
a = bigint;
a = mint;
var b = a + 0;
Expect.isTrue(identical(a, b));
b = a + 1;

View file

@ -73,11 +73,6 @@ var expectedResults = [
1152921504606846976,
2305843009213693952,
4611686018427387904,
9223372036854775808,
18446744073709551616,
36893488147419103232,
73786976294838206464,
147573952589676412928
];
void main() {
@ -99,7 +94,4 @@ void main() {
Expect.equals(val.toDouble(), pow(2, exp.toDouble()));
exp++;
}
// Test Bigints.
Expect.equals(5559917313492231481, pow(11, 18));
Expect.equals(672749994932560009201, pow(11, 20));
}

View file

@ -16,8 +16,6 @@ void train() {
IsAnInt(42); // Smi - always goes first in the generated code.
IsAnInt(1 << 62); // Mint on 64 bit platforms.
IsAnInt(1 << 62);
IsAnInt(4200000000000000000000000000000000000); // BigInt
IsAnInt(4200000000000000000000000000000000000);
// This one that is not an int goes last in the IC because it is called
// less frequently.
IsAnInt(4.2);

View file

@ -111,3 +111,8 @@ io/socket_finalizer_test: Pass, Crash
io/socket_info_ipv4_test: Pass, Crash
io/socket_info_ipv6_test: Pass, Crash
io/socket_port_test: Pass, Crash
[ $compiler == dartkp ]
typed_array_int64_uint64_test: CompileTimeError, Crash # Issue 31339
bytedata_test: CompileTimeError # Issue 31339
typed_data_view_test: CompileTimeError # Issue 31339

View file

@ -407,13 +407,13 @@ testWhere() {
testCreationFromList() {
var intList = [
-10000000000000000000,
-1000000000000000000,
-255,
-127,
0,
128,
256,
1000000000000000000000
1000000000000000000
];
var intLists = [];
intLists.add(new Int8List.fromList(intList));

View file

@ -58,17 +58,17 @@ testSetters() {
Expect.equals(-1, blist.getInt32(0, Endian.little));
blist.setUint32(0, 0xffffffffffff, Endian.little);
Expect.equals(0xffffffff, blist.getUint32(0, Endian.little));
blist.setInt64(0, 0xffffffffffffffffff, Endian.little);
blist.setInt64(0, 0xffffffffffffffff, Endian.little);
Expect.equals(-1, blist.getInt64(0, Endian.little));
blist.setUint64(0, 0xffffffffffffffffff, Endian.little);
blist.setUint64(0, 0xffffffffffffffff, Endian.little);
Expect.equals(0xffffffffffffffff, blist.getUint64(0, Endian.little));
blist.setInt32(0, 18446744073709551614, Endian.little);
blist.setInt32(0, 0xaabbccddfffffffe, Endian.little);
Expect.equals(-2, blist.getInt32(0, Endian.little));
blist.setUint32(0, 18446744073709551614, Endian.little);
blist.setUint32(0, 0xaabbccddfffffffe, Endian.little);
Expect.equals(0xfffffffe, blist.getUint32(0, Endian.little));
blist.setInt64(0, 18446744073709551614, Endian.little);
blist.setInt64(0, 0xfffffffffffffffe, Endian.little);
Expect.equals(-2, blist.getInt64(0, Endian.little));
blist.setUint64(0, 18446744073709551614, Endian.little);
blist.setUint64(0, 0xfffffffffffffffe, Endian.little);
Expect.equals(0xfffffffffffffffe, blist.getUint64(0, Endian.little));
blist.setFloat32(0, 18446744073709551614.0, Endian.little);

View file

@ -837,8 +837,11 @@ class StandardTestSuite extends TestSuite {
// TODO(rnystrom): Hack. When running the 2.0 tests, always implicitly
// turn on reified generics in the VM.
// Note that VMOptions=--no-reify-generic-functions in test is ignored.
// Also, enable Dart 2.0 fixed-size integers with --limit-ints-to-64-bits.
if (suiteName.endsWith("_2")) {
allVmOptions = allVmOptions.toList()..add("--reify-generic-functions");
allVmOptions = allVmOptions.toList()
..add("--reify-generic-functions")
..add("--limit-ints-to-64-bits");
}
var commands =