// 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());
  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");
}
