/*
 * 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 Iterator<E> iterator
 * ...
 * Each time iterator is read, it returns a new iterator, which can be used to
 * iterate through all the elements again.
 * @description Checks that each new iterator can be used to iterate this list
 * through all the elements again.
 * @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 it1 = l.iterator;
  var i = 0;
  while (it1.moveNext()) {
    Expect.isTrue(equal(l[i++], it1.current));
  }
  Expect.equals(l.length, i);
  var it2 = l.iterator;
  Expect.notEquals(it1, it2);
  var j = 0;
  while (it2.moveNext()) {
    Expect.isTrue(equal(l[j++], it2.current));
  }
  Expect.equals(l.length, j);
}

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)
  ]);
}
