// 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
 * Int32x4List.view(
 *    ByteBuffer buffer, [
 *    int offsetInBytes = 0,
 *    int length
 * ])
 * ...
 * If the length is not specified, it defaults to null, which indicates that
 * the view extends to the end of the byte buffer.
 * @description Checks that if the length is not specified, it defaults to null,
 * which indicates that the view extends to the end of the byte buffer.
 * @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;

void check(list, offset) {
  var l = new Int32x4List.fromList(list);
  var buffer = l.buffer;
  var view = new Int32x4List.view(buffer, offset);
  Expect.isTrue(view is Int32x4List);
  Expect.equals(view.length, l.length - (offset >> 4));
  Expect.isTrue(equal(l[l.length - 1], view[view.length - 1]));
}

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