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

/// @assertion Future<bool> any(bool test(T element))
/// Checks whether test accepts any element provided by this stream.
/// Completes the Future when the answer is known.
/// @description Checks that Future completes when the first matching element
/// is encountered.
/// @author ilya

import "dart:async";
import "dart:isolate";
import "../../../Utils/expect.dart";
import "IsolateStream.dart" as IsolateStream;

main() {
  int count = 0;
  int first = 0;
  bool encountered = false;
  bool test(var element) {
    bool res = element % 10 == 0;
    if (res && !encountered) {
      encountered = true;
      first = element;
    }
    return res;
  }

  asyncStart();
  ReceivePort stream =
      IsolateStream.fromIterable(new Iterable.generate(100, (_) => ++count));
  Future<bool> f = stream.any(test);
  f.then((x) {
    Expect.isTrue(x);
    Expect.isTrue(encountered);
    Expect.equals(10, first);
    asyncEnd();
  });
}
