// 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 if generator is omitted, it defaults to an identity
/// function on integers (int x) => x
/// @author sgrekhov@unipro.ru

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

void check(int count) {
 Iterable itbl = new Iterable.generate(count);
 for (var i = 0; i < count; i++) {
   Expect.equals(i, itbl.elementAt(i));
 }
 Expect.equals(count, itbl.length);
}

main() {
  check(0);
  check(1);
  check(10);
  check(1000);
}
