// Copyright (c) 2016, 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 Iterable<E> where(bool f(E element))
/// ...
/// The matching elements have the same order in the returned iterable as they
/// have in iterator.
/// @description Checks that all elements of the returned have the same order as
/// they have in iterator
/// @author sgrekhov@unipro.ru

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

test(Iterable create([Iterable content])) {

  void check(Iterable source, bool f(element), Iterable expected) {
    Iterable ret = create(source).where(f);
    Iterator it = ret.iterator;
    while(it.moveNext()) {
      Expect.isTrue(f(it.current));
    }
    Expect.iterableEquals(create(expected), ret);
  }

  bool f(var e) { return (e >= 0); }
  check([-1, 0, 1, 2, 3, 4], f, [0, 1, 2, 3, 4]);
  check([-1, 0, 1, -2, 3, 4], f, [0, 1, 3, 4]);
  check([1, 0, -1, 2, -3, 4], f, [1, 0, 2, 4]);
}
