// 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.

// @dart = 2.9

/// @assertion  bool any(bool f(E element))
/// Checks whether any [element] of this iterable satisfies [test].
/// Checks every [element] in iteration order, and returns [true] if any of them
/// make [test] return [true], otherwise returns [false].
/// @description Checks the [Iterable] which contains all the elements with the
/// same value.
/// @author iarkh@unipro.ru

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

class TestIterator implements Iterator<int> {
  int limit = 0;
  int _current = 0;

  TestIterator(this.limit);

  bool moveNext() {
    if (_current < limit) {
      _current++;
      return true;
    } else {
      return false;
    }
  }

  get current => 15;
}

class MyIterable extends Object with IterableMixin {
  int _limit;
  MyIterable(this._limit);
  Iterator get iterator {
    return new TestIterator(_limit);
  }
}

main() {
  Expect.isTrue(new MyIterable(1).any((e) => e == 15));
  Expect.isTrue(new MyIterable(100).any((e) => e == 15));
  Expect.isFalse(new MyIterable(1).any((e) => e == 123));
}
