diff options
Diffstat (limited to 'tests/structs.cu')
| -rw-r--r-- | tests/structs.cu | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/tests/structs.cu b/tests/structs.cu new file mode 100644 index 0000000..24e520e --- /dev/null +++ b/tests/structs.cu @@ -0,0 +1,48 @@ +type any {} + +struct basic_struct { + a i64; + b i64; + c i64; +} + +struct complex_struct (A any, B any, C any) { + a A; + b B; + c C; +} + +main() +{ + /* infer types */ + simple_named const = {.a = 1, .b = 2, .c = 3} as basic_struct; + simple_ordinal const = {1, 2, 3} as basic_struct; + simple_mixed const = {1, .b = 2, 3} as basic_struct; + + complex_named const = {.a = 1, .b = 2, .c = 3} as complex_struct; + /* should parentheses be required around typeof? */ + complex_ordinal const = {1, 2, 3} as complex_named; + complex_mixed const = {1, .b = 2, 3} as complex_struct; + + /* force types */ + force_named complex_struct(u32, u32, u32) = {.a = 1, .b = 2, .c = 3}; + force_ordinal typeof force_named = {1, 2, 3}; + force_mixed typeof force_ordinal = {1, .b = 2, 3}; + + force_inferred_named mut = {.a = 1, .b = 2, .c = 3} as + complex_struct(u32, u32, u32); + + force_inferred_ordinal mut = {1, 2, 3} as + complex_struct(u32, u32, u32); + + force_inferred_mixed mut = {1, .b = 2, 3} as + complex_struct(u32, u32, u32); + + /* shouldn't be compileable due to not enough type info */ + // error_named const = {.a = 1, .b = 2, .c = 3}; + + /* types should be inferred */ + force_inferred_named = {.a = 2, .b = 3, .c = 4}; + force_inferred_ordinal = {2, 3, 4}; + force_inferred_mixed = {2, .b = 3, 4}; +} |
