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

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;
}
