// 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 Iterable.generate(int count, [E generator(int index)])
 * Creates an Iterable that generates its elements dynamically.
 * An Iterator created by iterator will count from zero to count - 1, and call
 * generator with each index in turn to create the next value.
 * If generator is omitted, it defaults to an identity function on integers
 * (int x) => x, so it should only be omitted if the type parameter allows
 * integer values.
 * As an Iterable, new Iterable.generate(n, generator)) is equivalent to
 * const [0, ..., n - 1].map(generator).
 * @description Checks that Iterators created by the Iterable.generate() is
 * equivalent to const [0, ..., n - 1].map(generator)
 * @author sgrekhov@unipro.ru
 */
import "../../../Utils/expect.dart";

int generator(int index) => index * 2;

main() {
  const arr = const [0, 1, 2, 3, 4, 5];
  Iterable i1 = arr.map(generator);
  Iterable i2 = new Iterable.generate(arr.length, generator);

  Expect.equals(arr.length, i1.length);
  Expect.equals(arr.length, i2.length);
  for (var i = 0; i < arr.length; i++) {
    Expect.equals(i1.elementAt(i), i2.elementAt(i));
  }
}
