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()