// 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.

// @dart = 2.9

// 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());
  Expect.isTrue(identical(incoming.current, const <List>[]));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <Map>[]));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <Null>[]));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <Object>[]));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <String>[]));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <bool>[]));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <double>[]));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <int>[]));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <num>[]));

  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <List, List>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <List, Map>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <List, Null>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <List, Object>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <List, String>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <List, bool>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <List, double>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <List, int>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <List, num>{}));

  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <Map, List>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <Map, Map>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <Map, Null>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <Map, Object>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <Map, String>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <Map, bool>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <Map, double>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <Map, int>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <Map, num>{}));

  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <Null, List>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <Null, Map>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <Null, Null>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <Null, Object>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <Null, String>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <Null, bool>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <Null, double>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <Null, int>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <Null, num>{}));

  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <Object, List>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <Object, Map>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <Object, Null>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <Object, Object>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <Object, String>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <Object, bool>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <Object, double>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <Object, int>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <Object, num>{}));

  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <String, List>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <String, Map>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <String, Null>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <String, Object>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <String, String>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <String, bool>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <String, double>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <String, int>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <String, num>{}));

  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <bool, List>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <bool, Map>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <bool, Null>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <bool, Object>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <bool, String>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <bool, bool>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <bool, double>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <bool, int>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <bool, num>{}));

  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <double, List>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <double, Map>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <double, Null>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <double, Object>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <double, String>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <double, bool>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <double, double>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <double, int>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <double, num>{}));

  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <int, List>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <int, Map>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <int, Null>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <int, Object>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <int, String>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <int, bool>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <int, double>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <int, int>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <int, num>{}));

  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <num, List>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <num, Map>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <num, Null>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <num, Object>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <num, String>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <num, bool>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <num, double>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <num, int>{}));
  Expect.isTrue(await incoming.moveNext());
  Expect.isTrue(identical(incoming.current, const <num, num>{}));

  port.close();
  print("Parent done");
}
