// 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 bool remove(E entry)
/// Returns [false] and does nothing if [entry] is not in this linked list.
/// @description Checks that [false] is returned if [entry] is not in the list.
/// @author iarkh@unipro.ru

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

main() {
  LinkedList<MyLinkedListEntry<int>> list = new LinkedList<MyLinkedListEntry<int>>();
  MyLinkedListEntry<int> entry = new MyLinkedListEntry<int>(2);

  Expect.isFalse(list.remove(entry));

  list.add(entry);
  list.remove(entry);
  Expect.isFalse(list.remove(entry));

  list.add(entry);
  list.remove(entry);
  Expect.isFalse(list.remove(entry));

  list.add(new MyLinkedListEntry(28));
  list.add(new MyLinkedListEntry(2));
  list.add(new MyLinkedListEntry(2));
  Expect.isFalse(list.remove(entry));
  list.add(entry);
  list.add(new MyLinkedListEntry(-11));
  list.add(new MyLinkedListEntry(0));
  list.remove(entry);
  Expect.isFalse(list.remove(entry));

  list.add(entry);
  list.remove(entry);
  Expect.isFalse(list.remove(entry));

  list.clear();
  Expect.isFalse(list.remove(entry));
}
