// 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 E firstWhere(bool test(E element), {E orElse()})
/// Returns the first element that satisfies the given predicate test.
/// Iterates through elements and returns the first to satsify test.
/// If no element satisfies test, the result of invoking the orElse function
/// is returned. If orElse is omitted, it defaults to throwing a StateError.
/// @description Checks that the first element that satisfies the given predicate
/// test is returned
/// @author sgrekhov@unipro.ru

library firstWhere_A04_t01;

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

class C {
  int val;
  C(this.val);
}

test(Iterable create([Iterable content]), {bool isSet = false}) {
  C c1 = new C(42);
  C c2 = new C(42);

  Iterable a = create([c1, c2]);
  C found = a.firstWhere((var value) {
    if (value is C) {
      return value.val == 42;
    }
    return false;
  }, orElse: () => null);
  if (isSet) {
    // Set may be unordered so the first element that satisfies the test is
    // unpredictable. Just test that something is returned
    Expect.isNotNull(found);
  } else {
    if (found != null) {
      Expect.identical(c1, found);
      Expect.notEquals(c2, found);
    }
  }
}
