// 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 Iterable<E> where(bool f(E element))
/// Returns a new lazy [Iterable] with all elements that satisfy the predicate
/// [test].
/// The matching elements have the same order in the returned iterable as they
/// have in [iterator].
/// This method returns a view of the mapped elements.
/// @description Checks that all elements that satisfy [test] are retained, and
/// elements that do not, are skipped.
/// @author kaigorodov

import "dart:collection";
import "../../../Utils/expect.dart";

void check(DoubleLinkedQueue queue, bool test(var element)) {
  Iterator it0 = queue.iterator;
  Iterator it = queue.where(test).iterator;

  while (it0.moveNext()) {
    if (test(it0.current)) {
      Expect.isTrue(it.moveNext());
      Expect.equals(it0.current, it.current);
    }
  }
  Expect.isFalse(it.moveNext());
}

main() {
  DoubleLinkedQueue queue = new DoubleLinkedQueue.from([1, 3, 7, 4, 5, 6]);
  check(queue, (var element) => element == 1);
  check(queue, (var element) => true);
  check(queue, (var element) => false);
  check(queue, (var element) => element > 4);
  check(queue, (var element) => element < 4);
  check(queue, (var element) => element == 4);
}
