// 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.

// @dart = 2.9

/// @assertion
/// Float64x2List.view(
///     ByteBuffer buffer, [
///     int offsetInBytes = 0,
///     int length
/// ])
/// Throws RangeError if offsetInBytes or length are negative, or if
/// offsetInBytes + (length * elementSizeInBytes) is greater than the length of
/// buffer.
/// @description Checks that an error is thrown if offsetInBytes is negative.
/// @author ngl@unipro.ru
/// @issue 43230

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

Float64x2 f64x2V(v) => new Float64x2.splat(v);

void check(List<Float64x2> list, int offsetInEl) {
  var el_size = Float64x2List.bytesPerElement;
  Float64x2List tmp = new Float64x2List.fromList(list);
  var byteBuffer = tmp.buffer;
  Expect.throws(() {new Float64x2List.view(byteBuffer, offsetInEl * el_size);});
}

main() {

  check([
    f64x2V(5.0), f64x2V(6.0), f64x2V(7.0), f64x2V(8.0), f64x2V(9.0),
    f64x2V(10.0), f64x2V(11.0), f64x2V(12.0), f64x2V(13.0), f64x2V(14.0),
    f64x2V(15.0), f64x2V(16.0), f64x2V(17.0)
  ], -4);
  check([f64x2V(0.0), f64x2V(1.0), f64x2V(2.0)], -2);
  check([f64x2V(10.0), f64x2V(11.0)], -1);
}
