import pytest from phasm.parser import phasm_parse from phasm.exceptions import StaticError @pytest.mark.integration_test @pytest.mark.parametrize('type_', ['i32', 'i64', 'f32', 'f64']) def test_type_mismatch_function_argument(type_): code_py = f""" def helper(a: {type_}) -> (i32, i32, ): return a """ with pytest.raises(StaticError, match=f'Static error on line 3: Expected \\(i32, i32, \\), a is actually {type_}'): phasm_parse(code_py) @pytest.mark.integration_test @pytest.mark.parametrize('type_', ['i32', 'i64', 'f32', 'f64']) def test_type_mismatch_struct_member(type_): code_py = f""" class Struct: param: {type_} def testEntry(arg: Struct) -> (i32, i32, ): return arg.param """ with pytest.raises(StaticError, match=f'Static error on line 6: Expected \\(i32, i32, \\), arg.param is actually {type_}'): phasm_parse(code_py) @pytest.mark.integration_test @pytest.mark.parametrize('type_', ['i32', 'i64', 'f32', 'f64']) def test_type_mismatch_tuple_member(type_): code_py = f""" def testEntry(arg: ({type_}, )) -> (i32, i32, ): return arg[0] """ with pytest.raises(StaticError, match=f'Static error on line 3: Expected \\(i32, i32, \\), arg\\[0\\] is actually {type_}'): phasm_parse(code_py) @pytest.mark.integration_test @pytest.mark.parametrize('type_', ['i32', 'i64', 'f32', 'f64']) def test_type_mismatch_function_result(type_): code_py = f""" def helper() -> {type_}: return 1 @exported def testEntry() -> (i32, i32, ): return helper() """ with pytest.raises(StaticError, match=f'Static error on line 7: Expected \\(i32, i32, \\), helper actually returns {type_}'): phasm_parse(code_py)