// 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.

// @dart = 2.9

/// @assertion void removeWhere(bool test(E element))
/// Removes all elements matched by [test] from the queue.
/// @description Checks that all elements that satisfy test are removed, and
/// elements that does not are left.
/// @author kaigorodov


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

void check(List a0, bool test(var element)) {
  DoubleLinkedQueue queue = new DoubleLinkedQueue.from(a0);
  queue.removeWhere(test);
  int k = 0;
  for (int k0 = 0; k0 < a0.length; k0++) {
    if (!test(a0[k0])) {
      Expect.identical(a0[k0], queue.elementAt(k), "k0=$k0, k=$k");
      k++;
    }
  }
  Expect.equals(queue.length, k, "queue.length=${queue.length} k=$k");
}

main() {
  List a0 = [1, 3, 3, 4, 5, 6];
  check(a0, (var element) => true);
  check(a0, (var element) => false);
  check(a0, (var element) => element > 4);
  check(a0, (var element) => element < 4);
  check(a0, (var element) => element == 4);
}
