// 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
/// ])
/// If the offsetInBytes index of the region is not specified, it defaults to
/// zero (the first byte in the byte buffer).
/// @description Checks that if offsetInBytes index of the region is not
/// specified, it defaults to zero.
/// @author ngl@unipro.ru


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

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

void check(List<Float64x2> list) {
  Float64x2List tmp = new Float64x2List.fromList(list);
  var byteBuffer = tmp.buffer;
  Float64x2List l = new Float64x2List.view(byteBuffer);
  Expect.equals(list.length, l.length);
  Expect.equals(tmp[0].x, l[0].x);
  Expect.equals(tmp[0].y, l[0].y);
  Expect.equals(tmp[tmp.length - 1].x, l[l.length - 1].x);
  Expect.equals(tmp[tmp.length - 1].y, l[l.length - 1].y);
}

main() {
  check([
    f64x2V(5.0), f64x2V(6.0), f64x2V(7.0), f64x2V(8.0), f64x2V(9.0),
    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)
  ]);
  check([f64x2V(0.0), f64x2V(1.0), f64x2V(2.0)]);
  check([f64x2V(10.0), f64x2V(11.0)]);
}
