// 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.

// @dart = 2.9

/// @assertion Iterable<E> where(bool test(E element))
/// Returns a new lazy Iterable with all elements that satisfy the predicate
/// test.
/// The matching elements have the same order in the returned iterable as they
/// have in iterator.
/// @description Checks that the returned Iterable is correct.
/// @author ngl@unipro.ru


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

Float64x2 f64x2(v) => new Float64x2.splat(v);

check(List<Float64x2> list, bool test(Float64x2 e)) {
  var l = new Float64x2List.fromList(list);
  var res = l.where(test);
  var counter = 0;

  for (int i = 0; i < l.length; ++i) {
    if (test(l[i])) {
      Expect.equals(l[i].x, res.elementAt(counter).x);
      Expect.equals(l[i].y, res.elementAt(counter).y);
      counter++;
    }
  }
  Expect.equals(counter, res.length);
}

main() {
  check([], (e) => true);
  check(
      [f64x2(6.0), f64x2(1.0), f64x2(4.0), f64x2(2.0), f64x2(5.0), f64x2(3.0)],
      (e) => e.x < 4.0);
  check(
      [f64x2(1.0), f64x2(2.0), f64x2(2.0), f64x2(4.0), f64x2(5.0), f64x2(5.0)],
      (e) => e.x > 3.0);
}
