|  | // 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. | 
|  |  | 
|  | 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(); | 
|  | } | 
|  | } |