// 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

import 'dart:async';

import 'package:async_helper/async_minitest.dart';

const ms = const Duration(milliseconds: 1);

/// Allows two asynchronous executions to synchronize.
///
/// Calling [wait] and waiting for the returned future to complete will wait for
/// the other executions to call [wait] again. At that point, the waiting
/// execution is allowed to continue (the returned future completes), and the
/// more resent call to [wait] is now the waiting execution.
class Sync {
  Completer _completer = null;
  // Release whoever is currently waiting and start waiting yourself.
  Future wait([v]) {
    if (_completer != null) _completer.complete(v);
    _completer = Completer();
    return _completer.future;
  }

  // Release whoever is currently waiting.
  void release([v]) {
    if (_completer != null) {
      _completer.complete(v);
      _completer = null;
    }
  }
}

expectList(stream, list) {
  return stream.toList().then((v) {
    expect(v, equals(list));
  });
}

mkStream(int n) async* {
  for (int i = 0; i < n; i++) yield i;
}
