// 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 lastWhere(bool test(E element), {E orElse()})
/// Returns the last element that satisfies the given predicate test
/// @description Checks that the last element that satisfies the given predicate
/// test is returned
/// @author sgrekhov@unipro.ru

library lastWhere_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.lastWhere((var value) {
    if (value is C) {
      return value.val == 42;
    }
    return false;
  }, orElse: () => null);
  if (!isSet) {
    if (found != null) {
      Expect.identical(c2, found);
      Expect.notEquals(c1, found);
    }
  } else {
    // Set may be unordered so the last element that satisfies the test is
    // unpredictable. Just test that something is returned
    Expect.isNotNull(found);
  }
}
