// 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 void removeWhere(bool test(E element))
 * The [test] function must not throw or modify the queue.
 *
 * @description Checks case when test function clears the queue
 *
 * @note See https://github.com/dart-lang/sdk/issues/27920. While spec reads
 * that [test] function must not modify the queue it is expensive to check it
 * every time. So, let's test the current implementation. When element is
 * removed by [removeWhere] it must still be in the queue
 * @author iarkh@unipro.ru
 * @issue 27920
 */
import "dart:collection";
import "../../../Utils/expect.dart";

List list = [1, 3, 3, 4, 5, 6];
DoubleLinkedQueue? queue;

bool testClear1(var element) {
  queue?.clear();
  return element == 1;
}

bool testClear2(var element) {
  queue?.clear();
  return false;
}

bool testClear3(var element) {
  queue?.clear();
  return true;
}

check(bool test(var element), List list) {
  queue = new DoubleLinkedQueue.from(list);
  Expect.throws(() {queue?.removeWhere(test);});
}

main() {
  check(testClear1, list);
  check(testClear2, list);
  check(testClear3, list);
}
