/*
 * 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> contains(Object needle)
 * Checks whether needle occurs in the elements provided by this stream.
 * @description Checks that the method correctly checks whether match
 * occurs in the elements provided by this stream.
 * @author kaigorodov
 */
import "dart:async";
import "../../../Utils/expect.dart";
import "IsolateStream.dart" as IsolateStream;

check(List l, var match, bool expected) {
  Stream s = IsolateStream.fromIterable(l);
  Future<bool> fu = s.contains(match);
  asyncStart();
  fu.then((actual) {
    Expect.equals(expected, actual);
    asyncEnd();
  });
}

main() {
  check([], null, false);
  check([1, 2, []], null, false);
  check([1, 2, null, []], null, true);
  check([1, 2, []], 4, false);
  check([1, 2, null, []], 2, true);
}
