/*
 * 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), {Object orElse()})
 * Returns the last element that satisfies the given predicate [test].
 * @description Checks that the last element that satisfies the given predicate
 * is returned.
 * @author msyabro
 */
import "dart:typed_data";
import "../../../Utils/expect.dart";


main() {
  var l = new Float32List.fromList([1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 9.0]);
  var res = l.lastWhere((element) => element == 1.0);
  Expect.equals(1.0, res);

  res = l.lastWhere((element) => element > 6.0);
  Expect.equals(9.0, res);

  res = l.lastWhere((element) => element > 1.0);
  Expect.equals(9.0, res);

  res = l.lastWhere((element) => element < 5.0);
  Expect.equals(4.0, res);
}
