@compute @workgroup_size(1)
fn main() {
  let x : i32 = 42;

  // Test basic usage.
  let empty : array<i32, 4> = array<i32, 4>();
  let nonempty : array<i32, 4> = array<i32, 4>(1, 2, 3, 4);
  let nonempty_with_expr : array<i32, 4> =
    array<i32, 4>(1, x, x + 1, nonempty[3]);

  // Test nested arrays.
  let nested_empty : array<array<array<i32, 4>, 3>, 2> =
    array<array<array<i32, 4>, 3>, 2>();
  let nested_nonempty : array<array<array<i32, 4>, 3>, 2> =
    array<array<array<i32, 4>, 3>, 2>(
      array<array<i32, 4>, 3>(
        array<i32, 4>(1, 2, 3, 4),
        array<i32, 4>(5, 6, 7, 8),
        array<i32, 4>(9, 10, 11, 12)),
      array<array<i32, 4>, 3>(
        array<i32, 4>(13, 14, 15, 16),
        array<i32, 4>(17, 18, 19, 20),
        array<i32, 4>(21, 22, 23, 24)));
  let nested_nonempty_with_expr : array<array<array<i32, 4>, 3>, 2> =
    array<array<array<i32, 4>, 3>, 2>(
      array<array<i32, 4>, 3>(
        array<i32, 4>(1, 2, x, x + 1),
        array<i32, 4>(5, 6, nonempty[2], nonempty[3] + 1),
        nonempty),
      nested_nonempty[1]);

  // Test use of constructors as sub-expressions.
  let subexpr_empty : i32 = array<i32, 4>()[1];
  let subexpr_nonempty : i32 = array<i32, 4>(1, 2, 3, 4)[2];
  let subexpr_nonempty_with_expr : i32 =
    array<i32, 4>(1, x, x + 1, nonempty[3])[2];
  let subexpr_nested_empty : array<i32, 4> = array<array<i32, 4>, 2>()[1];
  let subexpr_nested_nonempty : array<i32, 4> =
    array<array<i32, 4>, 2>(
      array<i32, 4>(1, 2, 3, 4),
      array<i32, 4>(5, 6, 7, 8)
    )[1];
  let subexpr_nested_nonempty_with_expr : array<i32, 4> =
    array<array<i32, 4>, 2>(
      array<i32, 4>(1, x, x + 1, nonempty[3]),
      nested_nonempty[1][2],
    )[1];
}
