// 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 class LinkedList<E extends LinkedListEntry>
/// A specialized double-linked list of elements that extends [LinkedListEntry]
/// This is not a generic data structure. It only accepts elements that extend
/// the [LinkedListEntry] class.
/// @description Checks that [LinkedList] accepts [LinkedListEntry] elements and
/// does not accept any other classes.
/// @author iarkh@unipro.ru

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

main() {
  LinkedList<MyLinkedListEntry> list = new LinkedList<MyLinkedListEntry>();
  list.add(new MyLinkedListEntry(1));
  Expect.throws(() { list.add(1 as dynamic); });
  Expect.throws(() { list.add(new Object() as dynamic); });
  Expect.throws(() { list.add("test" as dynamic); });
}
