// Copyright (c) 2021, 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 Uint16Array extension Null safety
/// Bounds checking indexing methods on Arrays of Uint16.
///
/// @description Checks that this extension contains bounds checking indexing
/// methods on Arrays of Uint16
/// @author sgrekhov@unipro.ru

import "dart:ffi";
import "package:ffi/ffi.dart";
import "../../../Utils/expect.dart";

class MyStruct extends Struct {
  @Array(2)
  external Array<Uint16> a0;
  @Array.multi([2, 3])
  external Array<Array<Uint16>> a1;
}

void main() {
  final pointer = calloc<MyStruct>();
  try {
    final array1 = pointer.ref.a0;
    Expect.throws(() {array1[3];});
    Expect.throws(() {array1[3] = 42;});

    final array2 = pointer.ref.a1;
    Expect.throws(() {array2[3][0];});
    Expect.throws(() {array2[3][0] = 42;});
    Expect.throws(() {array2[0][3];});
    Expect.throws(() {array2[0][3] = 42;});
  } finally {
    calloc.free(pointer);
  }
}
