56 lines
1.7 KiB
Python
56 lines
1.7 KiB
Python
import pytest
|
|
|
|
from phasm.utils import our_process
|
|
from phasm.ourlang 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_}'):
|
|
our_process(code_py, 'test')
|
|
|
|
@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_}'):
|
|
our_process(code_py, 'test')
|
|
|
|
@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_}'):
|
|
our_process(code_py, 'test')
|
|
|
|
@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_}'):
|
|
our_process(code_py, 'test')
|