// Copyright (c) 2022, 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_fast_object_copy=true
// VMOptions=--enable_fast_object_copy=false

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

import "package:expect/expect.dart";

main() async {
  final port = ReceivePort();
  await Isolate.spawn(runHelper, port.sendPort);
  final message = await port.first;

  final weakRef1copy = message[0] as WeakReference<Uint8List>;
  final weakRef2copy = message[1] as WeakReference<Uint8List>;
  final weakRef3copy = message[3] as WeakReference<Uint8List>;
  final weakRef4copy = message[5] as WeakReference<Uint8List>;
  Expect.isNull(weakRef1copy.target);
  Expect.equals(2, weakRef2copy.target?.length);
  Expect.isNull(weakRef3copy.target);
  Expect.equals(4, weakRef4copy.target?.length);

  port.close();
}

Future<void> runHelper(SendPort port) async {
  final object1 = Uint8List(1);
  final weakRef1 = WeakReference(object1);
  final object2 = Uint8List(2);
  final weakRef2 = WeakReference(object2);
  final object3 = Uint8List(3);
  final weakRef3 = WeakReference(object3);
  final object4 = Uint8List(4);
  final weakRef4 = WeakReference(object4);

  final key3 = Object();
  final expando3 = Expando();
  expando3[key3] = object3;
  final key4 = Object();
  final expando4 = Expando();
  expando4[key4] = object4;

  final message = <dynamic>[
    weakRef1, // Does not have its target included.
    weakRef2, // Has its target included later than itself.
    object2,
    weakRef3, // Does not have its target included.
    expando3,
    weakRef4, // Has its target included due to expando.
    expando4,
    key4,
  ];
  port.send(message);
}

class Nonce {
  final int value;

  Nonce(this.value);

  String toString() => 'Nonce($value)';
}
