Various updates to bring the project uptodate. - Updated required packages - Removed runtimes that are not being updated - wasmtime is for now the only supported runtime - Implements imports for wasmtime runtime - Fixes a memory access bug for wasmtime runtime - compile_wasm is now optional - runtimes have to implement and call this themselves - Typing fixes - Linting fixes
96 lines
2.1 KiB
Python
96 lines
2.1 KiB
Python
import pytest
|
|
import wasmtime
|
|
|
|
from phasm.type3.entry import Type3Exception
|
|
|
|
from ..helpers import Suite
|
|
|
|
|
|
@pytest.mark.integration_test
|
|
def test_static_array_index_ok():
|
|
code_py = """
|
|
@exported
|
|
def testEntry(f: u64[3]) -> u64:
|
|
return f[2]
|
|
"""
|
|
|
|
result = Suite(code_py).run_code((1, 2, 3, ))
|
|
|
|
assert 3 == result.returned_value
|
|
|
|
@pytest.mark.integration_test
|
|
def test_static_array_index_invalid_type():
|
|
code_py = """
|
|
@exported
|
|
def testEntry(f: f32[3]) -> u64:
|
|
return f[0]
|
|
"""
|
|
|
|
with pytest.raises(Type3Exception, match=r'u64 must be f32 instead'):
|
|
Suite(code_py).run_code((0.0, 1.5, 2.25, ))
|
|
|
|
@pytest.mark.integration_test
|
|
def test_module_constant_type_mismatch_not_subscriptable():
|
|
code_py = """
|
|
CONSTANT: u8 = 24
|
|
|
|
@exported
|
|
def testEntry() -> u8:
|
|
return CONSTANT[0]
|
|
"""
|
|
|
|
with pytest.raises(Type3Exception, match='u8 cannot be subscripted'):
|
|
Suite(code_py).run_code()
|
|
|
|
@pytest.mark.integration_test
|
|
def test_module_constant_type_mismatch_index_out_of_range_constant():
|
|
code_py = """
|
|
CONSTANT: u8[3] = (24, 57, 80, )
|
|
|
|
@exported
|
|
def testEntry() -> u8:
|
|
return CONSTANT[3]
|
|
"""
|
|
|
|
with pytest.raises(Type3Exception, match='3 must be less or equal than 2'):
|
|
Suite(code_py).run_code()
|
|
|
|
@pytest.mark.integration_test
|
|
def test_module_constant_type_mismatch_index_out_of_range_variable():
|
|
code_py = """
|
|
CONSTANT: u8[3] = (24, 57, 80, )
|
|
|
|
@exported
|
|
def testEntry(x: u32) -> u8:
|
|
return CONSTANT[x]
|
|
"""
|
|
|
|
with pytest.raises(wasmtime.Trap):
|
|
Suite(code_py).run_code(3)
|
|
|
|
@pytest.mark.integration_test
|
|
def test_static_array_constant_too_few_values():
|
|
code_py = """
|
|
CONSTANT: u8[4] = (24, 57, )
|
|
|
|
@exported
|
|
def testEntry() -> i32:
|
|
return 0
|
|
"""
|
|
|
|
with pytest.raises(Type3Exception, match='Member count mismatch'):
|
|
Suite(code_py).run_code()
|
|
|
|
@pytest.mark.integration_test
|
|
def test_static_array_constant_too_many_values():
|
|
code_py = """
|
|
CONSTANT: u8[3] = (24, 57, 1, 1, )
|
|
|
|
@exported
|
|
def testEntry() -> i32:
|
|
return 0
|
|
"""
|
|
|
|
with pytest.raises(Type3Exception, match='Member count mismatch'):
|
|
Suite(code_py).run_code()
|