// Copyright (c) 2019, 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=--enable-isolate-groups --experimental-enable-isolate-groups-jit // VMOptions=--no-enable-isolate-groups import "dart:async"; import "dart:isolate"; import "dart:typed_data"; import "package:expect/expect.dart"; const large = 1 << 30; void child(replyPort) { print("Child start"); print("Child Uint8List"); dynamic x = new Uint8List(large); for (int i = 0; i < 4; i++) { x[i] = i; } for (int i = x.length - 4; i < x.length; i++) { x[i] = x.length - i; } replyPort.send(x); x = null; // Too slow. // print("Child Array"); // x = new List(large); // for (int i = 0; i < 4; i++) { // x[i] = i; // } // replyPort.send(x); // x = null; print("Child OneByteString"); x = null; x = "Z"; while (x.length < large) { x = x * 2; } replyPort.send(x); x = null; print("Child done"); } Future main(List args) async { print("Parent start"); ReceivePort port = new ReceivePort(); Isolate.spawn(child, port.sendPort); StreamIterator incoming = new StreamIterator(port); print("Parent Uint8"); Expect.isTrue(await incoming.moveNext()); dynamic x = incoming.current; Expect.isTrue(x is Uint8List); Expect.equals(large, x.length); for (int i = 0; i < 4; i++) { Expect.equals(i, x[i]); } for (int i = x.length - 4; i < x.length; i++) { Expect.equals(x.length - i, x[i]); } x = null; // Too slow. // print("Parent Array"); // Expect.isTrue(await incoming.moveNext()); // x = incoming.current; // Expect.isTrue(x is List); // Expect.equals(large, x.length); // for (int i = 0; i < 4; i++) { // Expect.equals(i, x[i]); // } // x = null; print("Parent OneByteString"); Expect.isTrue(await incoming.moveNext()); x = incoming.current; Expect.isTrue(x is String); Expect.equals(large, x.length); for (int i = 0; i < 4; i++) { Expect.equals("Z", x[i]); } for (int i = x.length - 4; i < x.length; i++) { Expect.equals("Z", x[i]); } x = null; port.close(); print("Parent done"); }