// 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 list
// BSD-style license that can be found in the LICENSE file.

/**
 * @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 that [true] is returned if one or more elements satisfies
 * the predicate [f], [false] otherwise.
 * @author kaigorodov
 */
import "../../../Utils/expect.dart";
import "dart:collection";
import "LinkedList.lib.dart";

bool isOne (MyLinkedListEntry element) => element.value == 1;

main() {
  LinkedList<MyLinkedListEntry> list = new LinkedList<MyLinkedListEntry>();
  Expect.isFalse(list.any(isOne));
  list.add(new MyLinkedListEntry(2));
  Expect.isFalse(list.any(isOne));
  list.add(new MyLinkedListEntry(1));
  Expect.isTrue(list.any(isOne));
  list.add(new MyLinkedListEntry(1));
  Expect.isTrue(list.any(isOne));
}
