| // Copyright (c) 2018, 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. |
| |
| // @dart = 2.9 |
| |
| // VMOptions=--no-enable-fast-object-copy |
| // VMOptions=--enable-fast-object-copy |
| |
| // Verifies that large BigInt can be passed through a message port and |
| // simple arithmetic operations still work after that. |
| // This is a regression test for https://github.com/dart-lang/sdk/issues/34752. |
| |
| import 'dart:io'; |
| import 'dart:isolate'; |
| |
| import "package:expect/expect.dart"; |
| |
| const int kValue = 12345678; |
| const int kShift = 8192 * 8; |
| |
| void verify(BigInt x) { |
| BigInt y = x >> kShift; |
| Expect.equals("$kValue", "$y"); |
| } |
| |
| void main() { |
| BigInt big = BigInt.from(kValue) << kShift; |
| verify(big); |
| |
| final rp = new ReceivePort(); |
| rp.listen((dynamic data) { |
| BigInt received = data as BigInt; |
| verify(received); |
| BigInt x = received + BigInt.one - BigInt.one; |
| verify(x); |
| print("ok"); |
| exit(0); |
| }); |
| rp.sendPort.send(big); |
| } |