// 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 Iterable<T> expand<T>(Iterable<T> f(E element))
 * ...
 * The returned Iterable is lazy, and calls f for each element of this every
 * time it's iterated.
 * @description Checks that the returned iterator is lazy, and calls f for each
 * element of this every time it's iterated
 * @author ngl@unipro.ru
 */

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

Int32x4 i32x4p(n) => new Int32x4(n, n + 1, n + 2, n + 3);

equal(o1, o2) => o1.x == o2.x && o1.y == o2.y && o1.z == o2.z && o1.w == o2.w;

void check(list) {
  var l = new Int32x4List.fromList(list);
  var counter = 0;

  var res = l.expand((e) {counter++; return [e + i32x4p(2)];});
  Expect.equals(0, counter);
  Expect.equals(l.length, res.length);
  Expect.equals(l.length, counter);
  for (int i = 0; i < l.length; ++i) {
    counter = 0;
    Expect.isTrue(equal(l[i] + i32x4p(2), res.elementAt(i)));
    Expect.equals(i + 1, counter);
  }
}

main() {
  check([i32x4p(1)]);
  check([i32x4p(1), i32x4p(5), i32x4p(9), i32x4p(13)]);
  check([
    i32x4p(0), i32x4p(1), i32x4p(2), i32x4p(3), i32x4p(4), i32x4p(5), i32x4p(6),
    i32x4p(7), i32x4p(8), i32x4p(9)]
  );
}
