// 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.

/**
 * @assertion List<E> toList({bool growable: true})
 * Creates a List containing the elements of this Iterable.
 * The elements are in iteration order.
 * @description Checks that proper list with correct element order is created.
 * @author kaigorodov
 */
import "dart:collection";
import "../../../Utils/expect.dart";
import "LinkedList.lib.dart";

void checkSameContent(List a0) {
  LinkedList<MyLinkedListEntry> llist = toLinkedList(a0);
  Iterator eit = llist.iterator;
  Iterator ait = llist.toList().iterator;
  while (eit.moveNext()) {
    Expect.isTrue(ait.moveNext());
    Expect.identical(eit.current, ait.current);
  }
  Expect.isFalse(ait.moveNext());
}

main() {
  checkSameContent(["1", "2", "3", "4", "5"]);
  checkSameContent([null, [null], [], [1, 2, 3], [[null]]]);
}
