// 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 factory ListQueue.from(Iterable elements)
/// Create a [ListQueue] containing all [elements].
/// The elements are added to the queue, as by [addLast], in the order given by
/// [elements.iterator].
/// @description Checks that created list contains all [elements] in correct
/// order.
/// @author kaigorodov

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

void check(ListQueue l, Iterable c) {
  Expect.isTrue(l.length == c.length);
  c.forEach((var element) {
    Expect.isTrue(l.removeFirst() == element);
  });
}

main() {
  ListQueue list = new ListQueue.from([1, 2, 3, 4, 5]);
  check(list, [1, 2, 3, 4, 5]);
  
  Set set = new Set.from([1, 2, 3, 4, 5]);
  list = new ListQueue.from(set);
  check(list, set);
  
  ListQueue tmp = new ListQueue();
  tmp.addLast(1);
  tmp.addLast(2);
  list = new ListQueue.from(tmp);
  check(list, tmp);

  list = new ListQueue.from(new ListQueue());
  check(list, []);

  list = new ListQueue.from([tmp, tmp, set]);
  check(list, [tmp, tmp, set]);
  
  list = new ListQueue.from(new Set());
  check(list, []);
}
