// 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 [remove] does not change given linked list if
 * [entry] is not in the list.
 * @author iarkh@unipro.ru
 */
import "../../../Utils/expect.dart";
import "dart:collection";
import "LinkedList.lib.dart";

check(LinkedList<MyLinkedListEntry> llist,
    MyLinkedListEntry<Object> entry) {
  List initial = llist.toList();

  llist.remove(entry);

  int i = 0;
  llist.forEach((MyLinkedListEntry entry) {
    Expect.equals(initial[i++], entry);
  });
}

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

  check(list, entry);

  list.add(entry);
  list.remove(entry);
  check(list, entry);

  list.add(entry);
  list.remove(entry);
  check(list, entry);

  list.add(new MyLinkedListEntry(28));
  list.add(new MyLinkedListEntry(2));
  list.add(new MyLinkedListEntry(2));
  check(list, entry);
  list.add(entry);
  list.add(new MyLinkedListEntry(-11));
  list.add(new MyLinkedListEntry(0));
  list.remove(entry);
  check(list, entry);

  list.add(entry);
  list.remove(entry);
  check(list, entry);

  list.clear();
  check(list, entry);
}
