// 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 E lastWhere(bool test(E element), {E orElse()})
/// ...
/// An iterable that can access its elements directly may check its elements in
/// any order (for example a list starts by checking the last element and then
/// moves towards the start of the list). The default implementation iterates
/// elements in iteration order, checks test(element) for each, and finally
/// returns that last one that matched.
/// @description Checks that function test is invoked every time when an iterable
/// is iterated through elements to find last element that satisfies the given
/// predicate test.
/// @author ngl@unipro.ru


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

Int32x4 i32x4(n) => new Int32x4(n, n, n, n);

main() {
  var list = [i32x4(0), i32x4(1), i32x4(2), i32x4(1), i32x4(3), i32x4(4)];
  var l = new Int32x4List.fromList(list);
  var counter = 0;
  l.lastWhere((e) {counter++; return e.x > 2;});
  Expect.equals(1, counter);

  l.lastWhere((e) {counter++; return e.y == 1;});
  Expect.equals(4, counter);

  l.lastWhere((e) {counter++; return e.z < 3;});
  Expect.equals(7, counter);

  l.lastWhere((e) {counter++; return e.w > 3;});
  Expect.equals(8, counter);
}
