blob: 480cda5f5a5b48225664a8a26e60acc7c2dad92f [file] [log] [blame]
// 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
// https://github.com/dart-lang/sdk/issues/35778
import "dart:async";
import "dart:isolate";
import "dart:typed_data";
import "package:expect/expect.dart";
void child(replyPort) {
print("Child start");
replyPort.send(const <List>[]);
replyPort.send(const <Map>[]);
replyPort.send(const <Null>[]);
replyPort.send(const <Object>[]);
replyPort.send(const <String>[]);
replyPort.send(const <bool>[]);
replyPort.send(const <double>[]);
replyPort.send(const <int>[]);
replyPort.send(const <num>[]);
replyPort.send(const <List, List>{});
replyPort.send(const <List, Map>{});
replyPort.send(const <List, Null>{});
replyPort.send(const <List, Object>{});
replyPort.send(const <List, String>{});
replyPort.send(const <List, bool>{});
replyPort.send(const <List, double>{});
replyPort.send(const <List, int>{});
replyPort.send(const <List, num>{});
replyPort.send(const <Map, List>{});
replyPort.send(const <Map, Map>{});
replyPort.send(const <Map, Null>{});
replyPort.send(const <Map, Object>{});
replyPort.send(const <Map, String>{});
replyPort.send(const <Map, bool>{});
replyPort.send(const <Map, double>{});
replyPort.send(const <Map, int>{});
replyPort.send(const <Map, num>{});
replyPort.send(const <Null, List>{});
replyPort.send(const <Null, Map>{});
replyPort.send(const <Null, Null>{});
replyPort.send(const <Null, Object>{});
replyPort.send(const <Null, String>{});
replyPort.send(const <Null, bool>{});
replyPort.send(const <Null, double>{});
replyPort.send(const <Null, int>{});
replyPort.send(const <Null, num>{});
replyPort.send(const <Object, List>{});
replyPort.send(const <Object, Map>{});
replyPort.send(const <Object, Null>{});
replyPort.send(const <Object, Object>{});
replyPort.send(const <Object, String>{});
replyPort.send(const <Object, bool>{});
replyPort.send(const <Object, double>{});
replyPort.send(const <Object, int>{});
replyPort.send(const <Object, num>{});
replyPort.send(const <String, List>{});
replyPort.send(const <String, Map>{});
replyPort.send(const <String, Null>{});
replyPort.send(const <String, Object>{});
replyPort.send(const <String, String>{});
replyPort.send(const <String, bool>{});
replyPort.send(const <String, double>{});
replyPort.send(const <String, int>{});
replyPort.send(const <String, num>{});
replyPort.send(const <bool, List>{});
replyPort.send(const <bool, Map>{});
replyPort.send(const <bool, Null>{});
replyPort.send(const <bool, Object>{});
replyPort.send(const <bool, String>{});
replyPort.send(const <bool, bool>{});
replyPort.send(const <bool, double>{});
replyPort.send(const <bool, int>{});
replyPort.send(const <bool, num>{});
replyPort.send(const <double, List>{});
replyPort.send(const <double, Map>{});
replyPort.send(const <double, Null>{});
replyPort.send(const <double, Object>{});
replyPort.send(const <double, String>{});
replyPort.send(const <double, bool>{});
replyPort.send(const <double, double>{});
replyPort.send(const <double, int>{});
replyPort.send(const <double, num>{});
replyPort.send(const <int, List>{});
replyPort.send(const <int, Map>{});
replyPort.send(const <int, Null>{});
replyPort.send(const <int, Object>{});
replyPort.send(const <int, String>{});
replyPort.send(const <int, bool>{});
replyPort.send(const <int, double>{});
replyPort.send(const <int, int>{});
replyPort.send(const <int, num>{});
replyPort.send(const <num, List>{});
replyPort.send(const <num, Map>{});
replyPort.send(const <num, Null>{});
replyPort.send(const <num, Object>{});
replyPort.send(const <num, String>{});
replyPort.send(const <num, bool>{});
replyPort.send(const <num, double>{});
replyPort.send(const <num, int>{});
replyPort.send(const <num, num>{});
print("Child done");
}
Future<void> main(List<String> args) async {
print("Parent start");
ReceivePort port = new ReceivePort();
Isolate.spawn(child, port.sendPort);
StreamIterator<dynamic> incoming = new StreamIterator<dynamic>(port);
Expect.isTrue(await incoming.moveNext());
dynamic x = incoming.current;
Expect.isTrue(x is List<List>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is List<Map>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is List<Null>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is List<Object>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is List<String>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is List<bool>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is List<double>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is List<int>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is List<num>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<List, List>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<List, Map>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<List, Null>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<List, Object>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<List, String>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<List, bool>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<List, double>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<List, int>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<List, num>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<Map, List>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<Map, Map>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<Map, Null>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<Map, Object>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<Map, String>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<Map, bool>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<Map, double>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<Map, int>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<Map, num>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<Null, List>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<Null, Map>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<Null, Null>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<Null, Object>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<Null, String>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<Null, bool>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<Null, double>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<Null, int>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<Null, num>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<Object, List>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<Object, Map>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<Object, Null>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<Object, Object>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<Object, String>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<Object, bool>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<Object, double>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<Object, int>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<Object, num>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<String, List>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<String, Map>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<String, Null>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<String, Object>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<String, String>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<String, bool>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<String, double>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<String, int>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<String, num>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<bool, List>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<bool, Map>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<bool, Null>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<bool, Object>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<bool, String>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<bool, bool>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<bool, double>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<bool, int>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<bool, num>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<double, List>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<double, Map>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<double, Null>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<double, Object>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<double, String>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<double, bool>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<double, double>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<double, int>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<double, num>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<int, List>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<int, Map>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<int, Null>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<int, Object>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<int, String>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<int, bool>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<int, double>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<int, int>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<int, num>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<num, List>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<num, Map>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<num, Null>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<num, Object>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<num, String>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<num, bool>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<num, double>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<num, int>);
Expect.isTrue(await incoming.moveNext());
x = incoming.current;
Expect.isTrue(x is Map<num, num>);
port.close();
print("Parent done");
}