// Copyright (c) 2017, 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<E> skipWhile(bool test(E value))
/// Every new [Iterator] of the returned [Iterable[ iterates over all elements of
/// this.
/// @description Checks that for every new iterator, all elements either are
/// tested and satisfy the test, or are returned by the iterator.
/// @author iarkh@unipro.ru

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

class MyIterable<int> extends Object with IterableMixin {
  List _content;
  MyIterable(List list): _content = list;

  Iterator get iterator {
    return _content.iterator;
  }
}

void check(List list, bool test(var element)) {
  IterableMixin iterable = new MyIterable(list);
  List all = [];
  bool test1(var element) {
    bool res = test(element);
    if (res) {
      all.add(element);
    }
    return res;
  }
  Iterable res = iterable.skipWhile(test1);

  for (int k = 0; k < 5; k++) {
    all = [];
    Iterator it = res.iterator;
    while (it.moveNext()) {
      all.add(it.current);
    }
    Expect.listEquals(list, all);
  }
}

main() {
  List list = [1, 3, 7, 4, 5, 6];
  check(list, (var element) => element == 1);
  check(list, (var element) => true);
  check(list, (var element) => false);
  check(list, (var element) => element > 4);
  check(list, (var element) => element < 4);
  check(list, (var element) => element == 4);
}
