// 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 Iterator<E> abstract class 
/// The for-in construct transparently uses Iterator to test for the end of the
/// iteration, and to get each item (or element).
/// @description Checks that the returned [Iterator] iterates all elements of the
/// list.
/// @author vasya

library iterator_A01_t01;

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

test(Iterator create([Iterable? content]), {bool isSet: false}) {
  void checkIterator(Iterator it, Iterable a) {
    List l = new List.from(a);
    while (it.moveNext()) {
      Expect.isTrue(l.contains(it.current));
      l.remove(it.current);
    }
    Expect.isTrue(l.isEmpty);
  }

  checkIterator(create(<int>[]), []);
  if (!isSet) {
    List<int> l = new List.filled(300, 0);
    checkIterator(create(l), l);
  }

  List<int> a = new List.filled(365, 0);
  for (var i = 0; i < a.length; i++) {
    a[i] = i;
  }
  checkIterator(create(a), a);
  checkIterator(create(<int>[0, 1, 2, 3, 4, 5]), [0, 1, 2, 3, 4, 5]);
}
