// Copyright (c) 2016, 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 Iterator<E> iterator
/// Returns a new Iterator that allows iterating the elements of this Iterable.
/// Iterable classes may specify the iteration order of their elements (for
/// example List always iterate in index order), or they may leave it unspecified
/// (for example a hash-based Set may iterate in any order).
///
/// Each time iterator is read, it returns a new iterator, which can be used to
/// iterate through all the elements again. The iterators of the same iterable
/// can be stepped through independently, but should return the same elements in
/// the same order, as long as the underlying collection isn't changed.
///
/// Modifying the collection may cause new iterators to produce different
/// elements, and may change the order of existing elements. A List specifies its
/// iteration order precisely, so modifying the list changes the iteration order
/// predictably. A hash-based Set may change its iteration order completely when
/// adding a new element to the set.
///
/// Modifying the underlying collection after creating the new iterator may cause
/// an error the next time Iterator.moveNext is called on that iterator. Any
/// modifiable iterable class should specify which operations will break
/// iteration.
/// @description Checks that iterator iterates all elements of this Iterable.
/// Test not empty collection
/// @author sgrekhov@unipro.ru

library iterator_A02_t02;

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

test(Iterable create([Iterable content])) {
  Iterable it = create([1, 2, 3, null, 10, 5]);
  List l = new List.empty(growable: true);
  Iterator i = it.iterator;
  while(i.moveNext()) {
    l.add(i.current);
  }
  Expect.equals(it.length, l.length);
  for (int i = 0; i < it.length; i++) {
    Expect.equals(it.elementAt(i), l[i]);
  }
}
