// 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 The iterable implementation must comply with the contract of
 * Iterable and should not take any steps identiﬁed as exceptionally efficient
 * in that contract.
 *    The contract explicitly mentions a number of situations where certain
 *  iterables could be more efficient than normal. For example, by precomputing
 *  their length. Normal iterables must iterate over their elements to
 *  determine their length. This is certainly true in the case of a synchronous
 *  generator, where each element is computed by a function. It would not be
 *  acceptable to pre-compute the results of the generator and cache them,
 *  for example.
 *
 * @description Check that method Iterable.contains() called on Iterable
 * instance, returned by synchronous generator, iterates through all elements.
 *
 * @author a.semenov@unipro.ru
 */

import '../../../Utils/expect.dart';

int yielded = 0;

Iterable test() sync* {
  for (int i = 0; i < 16; i++) {
    var x = 1 << i;
    yielded += x;
    yield x;
  }
}

main() {
  yielded = 0;
  var iterable = test();
  Expect.isFalse(iterable.contains(-1));
  Expect.equals(0xffff, yielded);

  yielded = 0;
  Expect.isTrue(iterable.contains(128));
  Expect.equals(0xff, yielded);
}
