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

// SharedObjects=ffi_test_functions

import 'dart:async';
import 'dart:isolate';
import 'dart:ffi';

import 'callback_tests_utils.dart';

typedef SimpleAdditionType = Int32 Function(Int32, Int32);
int simpleAddition(int x, int y) {
  print("simpleAddition($x, $y)");
  return x + y;
}

void main() async {
  // The main isolate is very special and cannot be suspended (due to having an
  // active api scope throughout it's lifetime), so we run this test in a helper
  // isolate.
  const int count = 50;
  final futures = <Future>[];
  for (int i = 0; i < count; ++i) {
    futures.add(Isolate.run(() async {
      // First make the callback pointer.
      final callbackFunctionPointer =
          Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 0);

      // Then cause suspenion of [Thread].
      await Future.delayed(const Duration(seconds: 1));

      // Then make use of callback.
      CallbackTest("SimpleAddition", callbackFunctionPointer).run();
    }));
  }
  await Future.wait(futures);
}
