// Copyright (c) 2011, 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.

// @dart = 2.9

/// @assertion  void clear()
/// Remove all elements from this linked list.
/// @description Checks that the length of the list becomes zero.
/// @author kaigorodov

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

main() {
  LinkedList<MyLinkedListEntry> a = new LinkedList<MyLinkedListEntry>();
  Expect.isTrue(a.length == 0);
  a.clear();
  Expect.isTrue(a.length == 0);
  a.add(new MyLinkedListEntry(null));
  Expect.isTrue(a.length == 1);
  a.clear();
  Expect.isTrue(a.length == 0);

  a=toLinkedList([1, 2, 3]);
  Expect.isTrue(a.length == 3);
  a.clear();
  Expect.isTrue(a.length == 0);

  a=toLinkedList(["one", "two", "three", "four"]);
  Expect.isTrue(a.length == 4);
  a.clear();
  Expect.isTrue(a.length == 0);
  a.clear();
  Expect.isTrue(a.length == 0);
}
