// 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
/// ...
/// The iterators of the same iterable can be stepped through independently, but
/// should return the same elements in the same order, as long as the underlying
/// collection isn't changed.
/// @description Checks that the iterators of the same iterable return the same
/// elements in the same order, as long as the underlying collection isn't
/// changed.
/// @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 it2 = l.iterator;
  var i = 0;
  while (it1.moveNext()) {
    it2.moveNext();
    i++;
    Expect.isTrue(equal(it1.current, it2.current));
  }
  Expect.equals(l.length, i);
}

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