// 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 Stream<T> where(bool test(T event))
/// Creates a new stream from this stream that discards some data events.
/// The new stream sends the same error and done events as this stream, but it
/// only sends the data events that satisfy the test.
/// @description Checks that all stream events are checked by the test.
/// Checks that the stream sends only the data events that satisfy the test.
/// @author kaigorodov

library where_A01_t01;
import "../../../Utils/expect.dart";

void test(CreateStreamFunction create) {
  AsyncExpect.data([], create([]).where((e) => true));
  AsyncExpect.data([], create([]).where((e) => false));

  AsyncExpect.data([null], create([1, 2, 3, null]).where((int? e) => e == null));
  AsyncExpect.data([3], create([1, 2, 3]).where((int e) => e > 2));
  AsyncExpect.data(
      [30],
      create(new Iterable.generate(10, (int i) => i * 5)).where((int e) => e == 30)
  );
  AsyncExpect.data([1,3,5], create([1, 2, 3, 4, 5]).where((int e) => e.isOdd));
  AsyncExpect.data([2,4], create([1, 2, 3, 4, 5]).where((int e) => e.isEven));
}
