// Copyright (c) 2017, 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  abstract bool remove(Object value)
/// Remove a single instance of [value] from the queue.
/// @description Checks that value is removed and queue is still in correct
/// iteration order.
/// @author iarkh@unipro.ru

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

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

  check(List a, Object? value, List expected) {
    Queue queue = create(a);
    queue.remove(value);

    Expect.listEquals(expected, queue.toList());
  }

  check([], 1, []);
  check([1], 1, []);
  check([], true, []);
  check([null], 2, [null]);
  check([null, null, null], null, [null, null]);
  check([1, 2, 3, 4, 5, null, 2], 2, [1, 3, 4, 5, null, 2]);
  check([1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5], 3,
      [1, 2, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]);
}
