// 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 encounterd.
 * @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();
  });
}
