// 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 Mints. Note that the tests may not work on 64-bit machines, // as Smi's would be used to represent many of the numbers. // @dart = 2.9 library MediumIntegerTest; import "package:expect/expect.dart"; class MediumIntegerTest { static int getMint() { return 1234567890123456789; } static testSmiOverflow() { int a = 1073741823; int b = 1073741822; Expect.equals(2147483645, a + b); Expect.equals(1152921501385621506, a * b); Expect.equals(-2147483645, -a - b); } static testMintAdd() { // Mint and Smi. var a = 1234567890123456789; var b = 2; Expect.equals(1234567890123456791, a + b); Expect.equals(1234567890123456791, b + a); a = 9223372036854775807; Expect.equals(-9223372036854775808, a + 1); // Mint and Mint. a = 100000000000000001; Expect.equals(200000000000000002, a + a); a = 9223372036854775800; b = 1000000000000000000; Expect.equals(-8223372036854775816, a + b); // Mint and double. var da = 100000000000.0; b = 100000000000; Expect.equals(200000000000.0, da + b); Expect.equals(200000000000.0, b + da); } static testMintSub() { // Mint and Smi. var a = 1234567890123456789; var b = 2; Expect.equals(1234567890123456787, a - b); a = -9223372036854775808; Expect.equals(9223372036854775807, a - 1); // Mint and Mint. a = 1234567890123456789; b = 1000000000000000000; Expect.equals(234567890123456789, a - b); a = -9223372036854775808; b = 1000000000000000000; Expect.equals(8223372036854775808, a - b); } static testMintDiv() { // Mint and Smi. var a = 1234567890123456788; var b = 2; Expect.equals(617283945061728394.0, a / b); } static testMintMul() { // Mint and Smi. var a = 4611686018427387904; var b = 10; Expect.equals(-9223372036854775808, a * b); b = 1000000000000000000; Expect.equals(0, a * b); } static testMintAnd(mint) { // Issue 1845. final int t = 0; var res = mint & (t - 1); Expect.equals(mint, res); } static void testMain() { Expect.equals(1234567890123456789, getMint()); testSmiOverflow(); testMintAdd(); testMintSub(); testMintMul(); testMintDiv(); testMintAnd(-1925149952); testMintAnd(1925149952); testMintAnd(0x100000001); var a = 100000000000; var b = 100000000001; Expect.equals(false, a.hashCode == b.hashCode); Expect.equals(true, a.hashCode == (b - 1).hashCode); } } main() { for (int i = 0; i < 4000; i++) { MediumIntegerTest.testMain(); } }