| OLD | NEW | 
|---|
| 1 // Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file | 1 // Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file | 
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a | 
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. | 
| 4 | 4 | 
| 5 // Testing Bigints with and without intrinsics. | 5 // Testing Bigints with and without intrinsics. | 
| 6 // VMOptions= | 6 // VMOptions= | 
| 7 // VMOptions=--no_intrinsify | 7 // VMOptions=--no_intrinsify | 
| 8 // VMOptions=--optimization_counter_threshold=10 --no-background_compilation | 8 // VMOptions=--optimization_counter_threshold=10 --no-background_compilation | 
| 9 | 9 | 
| 10 library big_integer_test; | 10 library big_integer_test; | 
| (...skipping 16 matching lines...) Expand all  Loading... | 
| 27 testBigintAdd() { | 27 testBigintAdd() { | 
| 28   // Bigint and Smi. | 28   // Bigint and Smi. | 
| 29   var a = 12345678901234567890; | 29   var a = 12345678901234567890; | 
| 30   var b = 2; | 30   var b = 2; | 
| 31   Expect.equals(12345678901234567892, a + b); | 31   Expect.equals(12345678901234567892, a + b); | 
| 32   Expect.equals(12345678901234567892, b + a); | 32   Expect.equals(12345678901234567892, b + a); | 
| 33   // Bigint and Bigint. | 33   // Bigint and Bigint. | 
| 34   a = 10000000000000000001; | 34   a = 10000000000000000001; | 
| 35   Expect.equals(20000000000000000002, a + a); | 35   Expect.equals(20000000000000000002, a + a); | 
| 36   // Bigint and double. | 36   // Bigint and double. | 
| 37   a = 100000000000000000000.0; |  | 
| 38   b = 200000000000000000000; | 37   b = 200000000000000000000; | 
| 39   Expect.isTrue((a + b) is double); | 38   var c = 100000000000000000000.0; | 
| 40   Expect.equals(300000000000000000000.0, a + b); | 39   Expect.isTrue((c + b) is double); | 
| 41   Expect.isTrue((b + a) is double); | 40   Expect.equals(300000000000000000000.0, b + c); | 
| 42   Expect.equals(300000000000000000000.0, b + a); | 41   Expect.isTrue((b + c) is double); | 
|  | 42   Expect.equals(300000000000000000000.0, c + b); | 
| 43 } | 43 } | 
| 44 | 44 | 
| 45 testBigintSub() { | 45 testBigintSub() { | 
| 46   // Bigint and Smi. | 46   // Bigint and Smi. | 
| 47   var a = 12345678901234567890; | 47   var a = 12345678901234567890; | 
| 48   var b = 2; | 48   var b = 2; | 
| 49   Expect.equals(12345678901234567888, a - b); | 49   Expect.equals(12345678901234567888, a - b); | 
| 50   Expect.equals(-12345678901234567888, b - a); | 50   Expect.equals(-12345678901234567888, b - a); | 
| 51   // Bigint and Bigint. | 51   // Bigint and Bigint. | 
| 52   a = 10000000000000000001; | 52   a = 10000000000000000001; | 
| 53   Expect.equals(20000000000000000002, a + a); | 53   Expect.equals(20000000000000000002, a + a); | 
| 54   // Bigint and double. | 54   // Bigint and double. | 
| 55   a = 100000000000000000000.0; |  | 
| 56   b = 200000000000000000000; | 55   b = 200000000000000000000; | 
| 57   Expect.isTrue((a + b) is double); | 56   var c = 100000000000000000000.0; | 
| 58   Expect.equals(-100000000000000000000.0, a - b); | 57   Expect.isTrue((c + b) is double); | 
| 59   Expect.isTrue((b + a) is double); | 58   Expect.equals(-100000000000000000000.0, c - b); | 
| 60   Expect.equals(100000000000000000000.0, b - a); | 59   Expect.isTrue((b + c) is double); | 
|  | 60   Expect.equals(100000000000000000000.0, b - c); | 
| 61   Expect.equals(-1, 0xF00000000 - 0xF00000001); | 61   Expect.equals(-1, 0xF00000000 - 0xF00000001); | 
| 62 } | 62 } | 
| 63 | 63 | 
| 64 testBigintMul() { | 64 testBigintMul() { | 
| 65   // Bigint and Smi. | 65   // Bigint and Smi. | 
| 66   var a = 12345678901234567890; | 66   var a = 12345678901234567890; | 
| 67   var b = 10; | 67   var b = 10; | 
| 68   Expect.equals(123456789012345678900, a * b); | 68   Expect.equals(123456789012345678900, a * b); | 
| 69   Expect.equals(123456789012345678900, b * a); | 69   Expect.equals(123456789012345678900, b * a); | 
| 70   // Bigint and Bigint. | 70   // Bigint and Bigint. | 
| 71   a = 12345678901234567890; | 71   a = 12345678901234567890; | 
| 72   b = 10000000000000000; | 72   b = 10000000000000000; | 
| 73   Expect.equals(123456789012345678900000000000000000, a * b); | 73   Expect.equals(123456789012345678900000000000000000, a * b); | 
| 74   // Bigint and double. | 74   // Bigint and double. | 
| 75   a = 2.0; |  | 
| 76   b = 200000000000000000000; | 75   b = 200000000000000000000; | 
| 77   Expect.isTrue((a * b) is double); | 76   var c = 2.0; | 
| 78   Expect.equals(400000000000000000000.0, a * b); | 77   Expect.isTrue((c * b) is double); | 
| 79   Expect.isTrue((b * a) is double); | 78   Expect.equals(400000000000000000000.0, c * b); | 
| 80   Expect.equals(400000000000000000000.0, b * a); | 79   Expect.isTrue((b * c) is double); | 
|  | 80   Expect.equals(400000000000000000000.0, b * c); | 
| 81 } | 81 } | 
| 82 | 82 | 
| 83 testBigintTruncDiv() { | 83 testBigintTruncDiv() { | 
| 84   var a = 12345678901234567890; | 84   var a = 12345678901234567890; | 
| 85   var b = 10; | 85   var b = 10; | 
| 86   // Bigint and Smi. | 86   // Bigint and Smi. | 
| 87   Expect.equals(1234567890123456789, a ~/ b); | 87   Expect.equals(1234567890123456789, a ~/ b); | 
| 88   Expect.equals(0, b ~/ a); | 88   Expect.equals(0, b ~/ a); | 
| 89   Expect.equals(123456789, 123456789012345678 ~/ 1000000000); | 89   Expect.equals(123456789, 123456789012345678 ~/ 1000000000); | 
| 90   // Bigint and Bigint. | 90   // Bigint and Bigint. | 
| 91   a = 12345678901234567890; | 91   a = 12345678901234567890; | 
| 92   b = 10000000000000000; | 92   b = 10000000000000000; | 
| 93   Expect.equals(1234, a ~/ b); | 93   Expect.equals(1234, a ~/ b); | 
| 94   // Bigint and double. | 94   // Bigint and double. | 
| 95   a = 100000000000000000000.0; |  | 
| 96   b = 200000000000000000000; | 95   b = 200000000000000000000; | 
| 97   Expect.equals(0, a ~/ b); | 96   var c = 100000000000000000000.0; | 
| 98   Expect.equals(2, b ~/ a); | 97   Expect.equals(0, c ~/ b); | 
|  | 98   Expect.equals(2, b ~/ c); | 
| 99 } | 99 } | 
| 100 | 100 | 
| 101 testBigintDiv() { | 101 testBigintDiv() { | 
| 102   // Bigint and Smi. | 102   // Bigint and Smi. | 
| 103   Expect.equals(1234567890123456789.1, 12345678901234567891 / 10); | 103   Expect.equals(1234567890123456789.1, 12345678901234567891 / 10); | 
| 104   Expect.equals(0.000000001234, 1234 / 1000000000000); | 104   Expect.equals(0.000000001234, 1234 / 1000000000000); | 
| 105   Expect.equals(12345678901234000000.0, 123456789012340000000 / 10); | 105   Expect.equals(12345678901234000000.0, 123456789012340000000 / 10); | 
| 106   // Bigint and Bigint. | 106   // Bigint and Bigint. | 
| 107   var a = 12345670000000000000; | 107   var a = 12345670000000000000; | 
| 108   var b = 10000000000000000; | 108   var b = 10000000000000000; | 
| 109   Expect.equals(1234.567, a / b); | 109   Expect.equals(1234.567, a / b); | 
| 110   // Bigint and double. | 110   // Bigint and double. | 
| 111   a = 400000000000000000000.0; |  | 
| 112   b = 200000000000000000000; | 111   b = 200000000000000000000; | 
| 113   Expect.equals(2.0, a / b); | 112   var c = 400000000000000000000.0; | 
| 114   Expect.equals(0.5, b / a); | 113   Expect.equals(2.0, c / b); | 
|  | 114   Expect.equals(0.5, b / c); | 
| 115 } | 115 } | 
| 116 | 116 | 
| 117 testBigintModulo() { | 117 testBigintModulo() { | 
| 118   // Bigint and Smi. | 118   // Bigint and Smi. | 
| 119   var a = 1000000000005; | 119   var a = 1000000000005; | 
| 120   var b = 10; | 120   var b = 10; | 
| 121   Expect.equals(5, a % b); | 121   Expect.equals(5, a % b); | 
| 122   Expect.equals(10, b % a); | 122   Expect.equals(10, b % a); | 
| 123   // Bigint & Bigint | 123   // Bigint & Bigint | 
| 124   a = 10000000000000000001; | 124   a = 10000000000000000001; | 
| 125   b = 10000000000000000000; | 125   b = 10000000000000000000; | 
| 126   Expect.equals(1, a % b); | 126   Expect.equals(1, a % b); | 
| 127   Expect.equals(10000000000000000000, b % a); | 127   Expect.equals(10000000000000000000, b % a); | 
| 128   // Bigint & double. | 128   // Bigint & double. | 
| 129   a = 10000000100000000.0; |  | 
| 130   b = 10000000000000000; | 129   b = 10000000000000000; | 
| 131   Expect.equals(100000000.0, a % b); | 130   var c = 10000000100000000.0; | 
| 132   Expect.equals(10000000000000000.0, b % a); | 131   Expect.equals(100000000.0, c % b); | 
|  | 132   Expect.equals(10000000000000000.0, b % c); | 
| 133   // Transitioning from Mint to Bigint. | 133   // Transitioning from Mint to Bigint. | 
| 134   var iStart = 4611686018427387900; | 134   var iStart = 4611686018427387900; | 
| 135   var prevX = -23 % iStart; | 135   var prevX = -23 % iStart; | 
| 136   for (int i = iStart + 1; i < iStart + 10; i++) { | 136   for (int i = iStart + 1; i < iStart + 10; i++) { | 
| 137     var x = -23 % i; | 137     var x = -23 % i; | 
| 138     Expect.equals(1, x - prevX); | 138     Expect.equals(1, x - prevX); | 
| 139     Expect.isTrue(x > 0); | 139     Expect.isTrue(x > 0); | 
| 140     prevX = x; | 140     prevX = x; | 
| 141   } | 141   } | 
| 142 } | 142 } | 
| (...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 435     testBigintNegate(); // //# negate: ok | 435     testBigintNegate(); // //# negate: ok | 
| 436     testShiftAmount(); // //# shift: ok | 436     testShiftAmount(); // //# shift: ok | 
| 437     Expect.equals(12345678901234567890, (12345678901234567890).abs()); | 437     Expect.equals(12345678901234567890, (12345678901234567890).abs()); | 
| 438     Expect.equals(12345678901234567890, (-12345678901234567890).abs()); | 438     Expect.equals(12345678901234567890, (-12345678901234567890).abs()); | 
| 439     var a = 10000000000000000000; | 439     var a = 10000000000000000000; | 
| 440     var b = 10000000000000000001; | 440     var b = 10000000000000000001; | 
| 441     Expect.equals(false, a.hashCode == b.hashCode); | 441     Expect.equals(false, a.hashCode == b.hashCode); | 
| 442     Expect.equals(true, a.hashCode == (b - 1).hashCode); | 442     Expect.equals(true, a.hashCode == (b - 1).hashCode); | 
| 443   } | 443   } | 
| 444 } | 444 } | 
| OLD | NEW | 
|---|