// Copyright (c) 2018, 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

// Verifies that large typed data can be passed in a field through message port.
// This is a regression test for
// https://github.com/flutter/flutter/issues/22796.

import 'dart:io';
import 'dart:isolate';
import 'dart:typed_data';

import "package:expect/expect.dart";

class A {
  // TFA thinks this field has type _Int32List but sending an object across
  // a message port creates an instance that has _ExternalInt32List inside.
  final _int32Array = new Int32List(5 * 1024);
  A() {
    _int32Array.setRange(
        0, _int32Array.length, Iterable.generate(_int32Array.length));
    verify();
  }

  void verify() {
    for (var i = 0; i < _int32Array.length; i++) {
      if (_int32Array[i] != i) {
        print('_int32Array[$i]: ${_int32Array[i]} != ${i}');
      }
      Expect.equals(i, _int32Array[i]);
    }
  }
}

void main() {
  final rp = new ReceivePort();
  rp.listen((dynamic data) {
    (data as A).verify();
    print("ok");
    exit(0);
  });
  rp.sendPort.send(A());
}
