// 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 E previous
/// Return the predecessor of this element in its linked list.
/// Returns [null] if there is no predecessor in the linked list, or if this
/// entry is not currently in any list.
/// @description Checks that [null] is returned if there is no predecessor in the
/// linked list and the previous entry otherwise
/// @issue 26522
/// @author sgrekhov@unipro.ru

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

main() {
  LinkedList<MyLinkedListEntry> list = new LinkedList<MyLinkedListEntry<int>>();
  MyLinkedListEntry<int> entry1 = new MyLinkedListEntry<int>(1);
  list.add(entry1);
  Expect.isNull(entry1.previous);

  MyLinkedListEntry<int> entry2 = new MyLinkedListEntry<int>(2);
  list.add(entry2);
  Expect.isNull(entry1.previous);
  Expect.identical(entry1, entry2.previous);

  MyLinkedListEntry<int> entry3 = new MyLinkedListEntry<int>(3);
  list.add(entry3);
  Expect.isNull(entry1.previous);
  Expect.identical(entry1, entry2.previous);
  Expect.identical(entry2, entry3.previous);

  list.remove(entry2);
  Expect.isNull(entry1.previous);
  Expect.isNull(entry2.previous);
  Expect.identical(entry1, entry3.previous);
}
