// 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 String toString()
 * Returns a string representation of this object.
 * If there are less than a hundred elements in the [iterable], it also contains
 * the last two elements.
 * @description Checks that string representation of this queue contains
 * representation of its last two elements if total element number is less than
 * hundred.
 * @author iarkh@unipro.ru
 */
import "dart:collection";
import "../../../Utils/expect.dart";
import "LinkedList.lib.dart";

void check(List elements) {
  LinkedList<MyLinkedListEntry> llist = toLinkedList(elements);
  String rep = llist.toString();

  Expect.isTrue(rep.contains(elements[elements.length - 1].toString()));
  Expect.isTrue(rep.contains(elements[elements.length - 2].toString()));
}

main() {
  check([1, "2", "345", "rfq"]);
  check([null, [null], [], [1, 2, 3], [[null]]]);
  check([1, "2", "345", "rfq"]);
  check([1, new Error(), 25, 4, null, "adc", null, 28, new Error(), 17, 8,
      new List.empty()]);

  List aList = new List.empty(growable: true);
  for(int i = 0; i < 99; i++) aList.add(i);
  check(aList);
}
