From f2f45ffddd584377b36e1da628b79d05d538a2a4 Mon Sep 17 00:00:00 2001 From: reddevilmidzy Date: Fri, 9 Jan 2026 14:13:41 +0900 Subject: [PATCH] Add mGCA array expression tests --- .../const-generics/mgca/array-expr-complex.rs | 16 ++++++++++++ .../mgca/array-expr-complex.stderr | 20 +++++++++++++++ .../const-generics/mgca/array-expr-empty.rs | 9 +++++++ .../mgca/array-expr-empty.stderr | 8 ++++++ .../const-generics/mgca/array-expr-simple.rs | 25 +++++++++++++++++++ .../mgca/array-expr-with-assoc-const.rs | 18 +++++++++++++ .../mgca/array-expr-with-macro.rs | 18 +++++++++++++ .../mgca/array-expr-with-struct.rs | 20 +++++++++++++++ .../mgca/array-expr-with-tuple.rs | 13 ++++++++++ tests/ui/const-generics/mgca/array-expr.rs | 24 ------------------ .../ui/const-generics/mgca/array-expr.stderr | 14 ----------- 11 files changed, 147 insertions(+), 38 deletions(-) create mode 100644 tests/ui/const-generics/mgca/array-expr-complex.rs create mode 100644 tests/ui/const-generics/mgca/array-expr-complex.stderr create mode 100644 tests/ui/const-generics/mgca/array-expr-empty.rs create mode 100644 tests/ui/const-generics/mgca/array-expr-empty.stderr create mode 100644 tests/ui/const-generics/mgca/array-expr-simple.rs create mode 100644 tests/ui/const-generics/mgca/array-expr-with-assoc-const.rs create mode 100644 tests/ui/const-generics/mgca/array-expr-with-macro.rs create mode 100644 tests/ui/const-generics/mgca/array-expr-with-struct.rs create mode 100644 tests/ui/const-generics/mgca/array-expr-with-tuple.rs delete mode 100644 tests/ui/const-generics/mgca/array-expr.rs delete mode 100644 tests/ui/const-generics/mgca/array-expr.stderr diff --git a/tests/ui/const-generics/mgca/array-expr-complex.rs b/tests/ui/const-generics/mgca/array-expr-complex.rs new file mode 100644 index 000000000000..3e8320bc94de --- /dev/null +++ b/tests/ui/const-generics/mgca/array-expr-complex.rs @@ -0,0 +1,16 @@ +#![expect(incomplete_features)] +#![feature(min_generic_const_args, adt_const_params)] + +fn takes_array() {} + +fn generic_caller() { + // not supported yet + takes_array::<{ [1, 2, 1 + 2] }>(); + //~^ ERROR: complex const arguments must be placed inside of a `const` block + takes_array::<{ [X; 3] }>(); + //~^ ERROR: complex const arguments must be placed inside of a `const` block + takes_array::<{ [0; Y] }>(); + //~^ ERROR: complex const arguments must be placed inside of a `const` block +} + +fn main() {} diff --git a/tests/ui/const-generics/mgca/array-expr-complex.stderr b/tests/ui/const-generics/mgca/array-expr-complex.stderr new file mode 100644 index 000000000000..beac1aa232f2 --- /dev/null +++ b/tests/ui/const-generics/mgca/array-expr-complex.stderr @@ -0,0 +1,20 @@ +error: complex const arguments must be placed inside of a `const` block + --> $DIR/array-expr-complex.rs:8:28 + | +LL | takes_array::<{ [1, 2, 1 + 2] }>(); + | ^^^^^ + +error: complex const arguments must be placed inside of a `const` block + --> $DIR/array-expr-complex.rs:10:19 + | +LL | takes_array::<{ [X; 3] }>(); + | ^^^^^^^^^^ + +error: complex const arguments must be placed inside of a `const` block + --> $DIR/array-expr-complex.rs:12:19 + | +LL | takes_array::<{ [0; Y] }>(); + | ^^^^^^^^^^ + +error: aborting due to 3 previous errors + diff --git a/tests/ui/const-generics/mgca/array-expr-empty.rs b/tests/ui/const-generics/mgca/array-expr-empty.rs new file mode 100644 index 000000000000..d37c6f2fcfe3 --- /dev/null +++ b/tests/ui/const-generics/mgca/array-expr-empty.rs @@ -0,0 +1,9 @@ +#![expect(incomplete_features)] +#![feature(min_generic_const_args)] + +fn takes_empty_array() {} +//~^ ERROR: expected type, found `]` + +fn main() { + takes_empty_array::<{ [] }>(); +} diff --git a/tests/ui/const-generics/mgca/array-expr-empty.stderr b/tests/ui/const-generics/mgca/array-expr-empty.stderr new file mode 100644 index 000000000000..91340e621acb --- /dev/null +++ b/tests/ui/const-generics/mgca/array-expr-empty.stderr @@ -0,0 +1,8 @@ +error: expected type, found `]` + --> $DIR/array-expr-empty.rs:4:32 + | +LL | fn takes_empty_array() {} + | ^ expected type + +error: aborting due to 1 previous error + diff --git a/tests/ui/const-generics/mgca/array-expr-simple.rs b/tests/ui/const-generics/mgca/array-expr-simple.rs new file mode 100644 index 000000000000..44feeccb4f9f --- /dev/null +++ b/tests/ui/const-generics/mgca/array-expr-simple.rs @@ -0,0 +1,25 @@ +//@ run-pass +#![expect(incomplete_features)] +#![feature(min_generic_const_args, adt_const_params)] +#![allow(dead_code)] + +fn takes_array_u32() {} +fn takes_array_bool() {} +fn takes_nested_array() {} +fn takes_empty_array() {} + +fn generic_caller() { + takes_array_u32::<{ [X, Y, X] }>(); + takes_array_u32::<{ [X, Y, const { 1 }] }>(); + takes_array_u32::<{ [X, Y, const { 1 + 1 }] }>(); + takes_array_u32::<{ [2_002, 2u32, 1_u32] }>(); + + takes_array_bool::<{ [true, false] }>(); + + takes_nested_array::<{ [[X, Y], [3, 4]] }>(); + takes_nested_array::<{ [[1u32, 2_u32], [const { 3 }, 4]] }>(); + + takes_empty_array::<{ [] }>(); +} + +fn main() {} diff --git a/tests/ui/const-generics/mgca/array-expr-with-assoc-const.rs b/tests/ui/const-generics/mgca/array-expr-with-assoc-const.rs new file mode 100644 index 000000000000..47ecbfa6b7e1 --- /dev/null +++ b/tests/ui/const-generics/mgca/array-expr-with-assoc-const.rs @@ -0,0 +1,18 @@ +//@ run-pass +#![expect(incomplete_features)] +#![feature(min_generic_const_args, adt_const_params)] +#![allow(dead_code)] + +fn takes_array() {} + +trait Trait { + #[type_const] + const ASSOC: u32; +} + +fn generic_caller() { + takes_array::<{ [T::ASSOC, N, T::ASSOC] }>(); + takes_array::<{ [1_u32, T::ASSOC, 2] }>(); +} + +fn main() {} diff --git a/tests/ui/const-generics/mgca/array-expr-with-macro.rs b/tests/ui/const-generics/mgca/array-expr-with-macro.rs new file mode 100644 index 000000000000..aef5acc1c803 --- /dev/null +++ b/tests/ui/const-generics/mgca/array-expr-with-macro.rs @@ -0,0 +1,18 @@ +//@ run-pass +#![expect(incomplete_features)] +#![feature(min_generic_const_args, adt_const_params)] +#![allow(dead_code)] + +macro_rules! make_array { + ($n:expr, $m:expr, $p:expr) => { + [N, $m, $p] + }; +} + +fn takes_array() {} + +fn generic_caller() { + takes_array::<{ make_array!(N, 2, 3) }>(); +} + +fn main() {} diff --git a/tests/ui/const-generics/mgca/array-expr-with-struct.rs b/tests/ui/const-generics/mgca/array-expr-with-struct.rs new file mode 100644 index 000000000000..883af57e918e --- /dev/null +++ b/tests/ui/const-generics/mgca/array-expr-with-struct.rs @@ -0,0 +1,20 @@ +//@ run-pass +#![feature(min_generic_const_args, adt_const_params)] +#![expect(incomplete_features)] +#![allow(dead_code)] + +use std::marker::ConstParamTy; + +#[derive(PartialEq, Eq, ConstParamTy)] +struct Container { + values: [u32; 3], +} + +fn takes_container() {} + +fn generic_caller() { + takes_container::<{ Container { values: [N, M, 1] } }>(); + takes_container::<{ Container { values: [1, 2, 3] } }>(); +} + +fn main() {} diff --git a/tests/ui/const-generics/mgca/array-expr-with-tuple.rs b/tests/ui/const-generics/mgca/array-expr-with-tuple.rs new file mode 100644 index 000000000000..004663dcefab --- /dev/null +++ b/tests/ui/const-generics/mgca/array-expr-with-tuple.rs @@ -0,0 +1,13 @@ +//@ run-pass +#![feature(min_generic_const_args, adt_const_params, unsized_const_params)] +#![expect(incomplete_features)] +#![allow(dead_code)] + +fn takes_tuple() {} + +fn generic_caller() { + takes_tuple::<{ ([N, M], 5, [M, N]) }>(); + takes_tuple::<{ ([1, 2], 3, [4, 5]) }>(); +} + +fn main() {} diff --git a/tests/ui/const-generics/mgca/array-expr.rs b/tests/ui/const-generics/mgca/array-expr.rs deleted file mode 100644 index 099fee7ecd03..000000000000 --- a/tests/ui/const-generics/mgca/array-expr.rs +++ /dev/null @@ -1,24 +0,0 @@ -#![expect(incomplete_features)] -#![feature(min_generic_const_args, adt_const_params)] - -fn takes_array() {} - -fn generic_caller() { - takes_array::<{ [N, N2, N] }>(); // ok - - takes_array::<{ [N, N2, const { 1 }] }>(); // ok - - takes_array::<{ [N, N2, const { 1 + 1 }] }>(); // ok - - takes_array::<{ [N, N2, 1] }>(); // ok - - takes_array::<{ [1, 1u32, 1_u32] }>(); // ok - - takes_array::<{ [N, N2, 1 + 1] }>(); // not implemented - //~^ ERROR complex const arguments must be placed inside of a `const` block - - takes_array::<{ [N; 3] }>(); // not implemented - //~^ ERROR complex const arguments must be placed inside of a `const` block -} - -fn main() {} diff --git a/tests/ui/const-generics/mgca/array-expr.stderr b/tests/ui/const-generics/mgca/array-expr.stderr deleted file mode 100644 index 0dda791c2e10..000000000000 --- a/tests/ui/const-generics/mgca/array-expr.stderr +++ /dev/null @@ -1,14 +0,0 @@ -error: complex const arguments must be placed inside of a `const` block - --> $DIR/array-expr.rs:17:29 - | -LL | takes_array::<{ [N, N2, 1 + 1] }>(); // not implemented - | ^^^^^ - -error: complex const arguments must be placed inside of a `const` block - --> $DIR/array-expr.rs:20:19 - | -LL | takes_array::<{ [N; 3] }>(); // not implemented - | ^^^^^^^^^^ - -error: aborting due to 2 previous errors -