struct S1 {
  a : i32;
  b : i32;
  c : i32;
  d : i32;
};

struct S2 {
  e : i32;
  f : S1;
};

struct S3 {
  g : i32;
  h : S1;
  i : S2;
};

struct T {
  a : array<i32, 2>;
};

[[stage(compute), workgroup_size(1)]]
fn main() {
  let x : i32 = 42;

  // Test basic usage.
  let empty : S1 = S1();
  let nonempty : S1 = S1(1, 2, 3, 4);
  let nonempty_with_expr : S1 = S1(1, x, x + 1, nonempty.d);

  // Test nested structs.
  let nested_empty : S3 = S3();
  let nested_nonempty : S3 = S3(1, S1(2, 3, 4, 5), S2(6, S1(7, 8, 9, 10)));
  let nested_nonempty_with_expr : S3 =
    S3(1, S1(2, x, x + 1, nested_nonempty.i.f.d), S2(6, nonempty));

  // Test use of constructors as sub-expressions.
  let subexpr_empty : i32 = S1().a;
  let subexpr_nonempty : i32 = S1(1, 2, 3, 4).b;
  let subexpr_nonempty_with_expr : i32 = S1(1, x, x + 1, nonempty.d).c;
  let subexpr_nested_empty : S1 = S2().f;
  let subexpr_nested_nonempty : S1 = S2(1, S1(2, 3, 4, 5)).f;
  let subexpr_nested_nonempty_with_expr : S1 =
    S2(1, S1(2, x, x + 1, nested_nonempty.i.f.d)).f;

  // Test arrays of structs containing arrays.
  let aosoa_empty : array<T, 2> = array<T, 2>();
  let aosoa_nonempty : array<T, 2> =
    array<T, 2>(
      T(array<i32, 2>(1, 2)),
      T(array<i32, 2>(3, 4)),
    );
  let aosoa_nonempty_with_expr : array<T, 2> =
    array<T, 2>(
      T(array<i32, 2>(1, aosoa_nonempty[0].a[0] + 1)),
      aosoa_nonempty[1],
    );
}
