From 82cdf010329c4ac6827698689e7e39644fad07b6 Mon Sep 17 00:00:00 2001 From: Kimplul Date: Sat, 6 May 2023 22:06:25 +0300 Subject: rename *.cu to *.ek + Name changes can be sort of difficult --- tests/structs.ek | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 tests/structs.ek (limited to 'tests/structs.ek') diff --git a/tests/structs.ek b/tests/structs.ek new file mode 100644 index 0000000..8a3a1bb --- /dev/null +++ b/tests/structs.ek @@ -0,0 +1,48 @@ +typedef 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 typeof 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}; +} -- cgit v1.3