// 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
/// const Array<T extends NativeType>(
/// int dimension1,
///  [int dimension2,
///  int dimension3,
///  int dimension4,
///  int dimension5]
///  )
///  Const constructor to specify Array dimensions in Structs.
///
///  class MyStruct extends Struct {
///  @Array(8)
///  external Array<Uint8> inlineArray;
///
///  @Array(2, 2, 2)
///  external Array<Array<Array<Uint8>>> threeDimensionalInlineArray;
///  }
///  Do not invoke in normal code.
///
/// @description Checks multidimentional array
/// @author sgrekhov@unipro.ru

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

class MyStruct extends Struct {
  @Array(1, 2, 3, 4, 5)
  external Array<Array<Array<Array<Array<Uint8>>>>> a0;
}

void main() {
  final pointer = calloc<MyStruct>();
  try {
    final array = pointer.ref.a0;

    for (int i1 = 0; i1 < 1; i1++) {
      for (int i2 = 0; i2 < 2; i2++) {
        for (int i3 = 0; i3 < 3; i3++) {
          for (int i4 = 0; i4 < 4; i4++) {
            for (int i5 = 0; i5 < 5; i5++) {
              Expect.equals(0, array[i1][i2][i3][i4][i5]);
              array[i1][i2][i3][i4][i5] = i1 + i2 + i3 + i4 + i5;
              Expect.equals(i1 + i2 + i3 + i4 + i5, array[i1][i2][i3][i4][i5]);
            }
          }
        }
      }
    }
    Expect.throws(() {
      array[-1];
    });
    Expect.throws(() {
      array[1];
    });
    Expect.throws(() {
      array[0][-1];
    });
    Expect.throws(() {
      array[0][2];
    });
    Expect.throws(() {
      array[0][1][-1];
    });
    Expect.throws(() {
      array[0][1][3];
    });
    Expect.throws(() {
      array[0][0][0][-1];
    });
    Expect.throws(() {
      array[0][1][2][4];
    });
    Expect.throws(() {
      array[0][0][0][0][-1];
    });
    Expect.throws(() {
      array[0][1][2][3][5];
    });
  } finally {
    calloc.free(pointer);
  }
}
