/*
 * 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 List<E> sublist(int start, [int end])
 * Returns a new list containing the objects from start inclusive to end
 * exclusive.
 * @description Checks that the returned list contains the objects from start
 * inclusive to end exclusive.
 * @author ngl@unipro.ru
 */

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

Int32x4 i32x4(n) => new Int32x4(n, n, n, n);

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

check(List<Int32x4> list, start, end) {
  var l = new Int32x4List.fromList(list);
  var res = l.sublist(start, end);

  for (int i = start; i < end; ++i) {
    Expect.isTrue(equal(l[i], res[i - start as int]));
  }
}

main() {
  check([], 0, 0);
  var list = [
    i32x4(0), i32x4(1), i32x4(2), i32x4(6), i32x4(4), i32x4(5), i32x4(6),
    i32x4(7), i32x4(8), i32x4(9)
  ];
  check(list, 0, 0);
  check(list, 0, 10);
  check(list, 2, 10);
  check(list, 3, 8);
  check(list, 10, 10);
  check(list, 9, 10);
}
