// Copyright (c) 2020, 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=--old_gen_heap_size=20

import "dart:io";
import "dart:isolate";

import "package:expect/expect.dart";

handleRequest(request) {
  if (request % 2 == 0) {
    var leak = [];
    while (true) {
      leak = [leak];
    }
  }
  return "Okay";
}

handleMessage(message) {
  print(">> $message");
  var responsePort = message[0];
  var request = message[1];
  try {
    responsePort.send(<dynamic>[request, handleRequest(request)]);
  } catch (e, st) {
    responsePort.send(<dynamic>[request, "Failed: $e\n$st"]);
  }
}

main(args) async {
  var child = new RawReceivePort(handleMessage);

  var parent;
  parent = new RawReceivePort((message) {
    print("<< $message");
    var request = message[0];
    var response = message[1];
    if (request % 2 == 0) {
      Expect.isTrue(response.contains("Out of Memory"));
    } else {
      Expect.equals("Okay", response);
    }
    if (request == 5) {
      child.close();
      parent.close();
    } else {
      child.sendPort.send(<dynamic>[parent.sendPort, request + 1]);
    }
  });

  child.sendPort.send(<dynamic>[parent.sendPort, 1]);
}
