// Copyright (c) 2011, 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 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 are either
/// tested and satisfy the [test], or returned by the iterator.
/// @author kaigorodov

import "dart:collection";
import "LinkedList.lib.dart";

void check(LinkedList<MyLinkedListEntry<int>> a0, bool test0(int element)) {
  List<MyLinkedListEntry<int>> all;
  bool test(MyLinkedListEntry<int> entry) {
    bool res = test0(entry.value);
    if (res) {
      all.add(entry);
    };
    return res;
  }

  Iterable<MyLinkedListEntry<int>> itbl = a0.skipWhile(test);
  
  for (int k = 0; k < 5; k++) {
    all = [];
    Iterator<MyLinkedListEntry<int>> it = itbl.iterator;
    while (it.moveNext()) {
      all.add(it.current);
    }
    entriesEquals(all, a0);
  }
}

main() {
  LinkedList<MyLinkedListEntry<int>> a0 = toLinkedList([1, 3, 7, 4, 5, 6, 1]);
  check(a0, (int element) => element == 1);
  check(a0, (int element) => true);
  check(a0, (int element) => false);
  check(a0, (int element) => element > 4);
  check(a0, (int element) => element < 4);
  check(a0, (int element) => element == 4);
}
