diff --git a/src/protocol/tests/parser_inference.rs b/src/protocol/tests/parser_inference.rs index fdcaa200f22ea77044e4313d91c8e660f131b2ac..44dcd85a51a0797fed6e79151940b2c57e4bd322 100644 --- a/src/protocol/tests/parser_inference.rs +++ b/src/protocol/tests/parser_inference.rs @@ -122,7 +122,45 @@ fn test_binary_expr_inference() { }); } +#[test] +fn test_tuple_inference() { + Tester::new_single_source_expect_ok( + "from tuple to variable", + " + func test() -> u32 { + (u8,u16,u32,u64) tuple = (1, 2, 3, 4); + auto a = tuple.0; + auto b = tuple.1; + auto c = tuple.2; + auto d = tuple.3; + return cast(a) + cast(b) + c + cast(d); + } + " + ).for_function("test", |f| { f + .for_variable("a", |v| { v.assert_concrete_type("u8"); }) + .for_variable("b", |v| { v.assert_concrete_type("u16"); }) + .for_variable("c", |v| { v.assert_concrete_type("u32"); }) + .for_variable("d", |v| { v.assert_concrete_type("u64"); }) + .call_ok(Some(Value::UInt32(10))); + }); + Tester::new_single_source_expect_ok( + "from variable to tuple", + " + func test() -> u32 { + auto tuple = (1, 2, 3, 4); + u8 a = tuple.0; + u16 b = tuple.1; + u32 c = tuple.2; + u64 d = tuple.3; + return cast(a) + cast(b) + c + cast(d); + } + " + ).for_function("test", |f| { f + .for_variable("tuple", |v| { v.assert_concrete_type("(u8,u16,u32,u64)"); }) + .call_ok(Some(Value::UInt32(10))); + }); +} #[test] fn test_struct_inference() {