88 lines
2.3 KiB
Python
88 lines
2.3 KiB
Python
import pytest
|
|
|
|
from phasm.exceptions import StaticError
|
|
|
|
from ..constants import COMPLETE_PRIMITIVE_TYPES, TYPE_MAP
|
|
from ..helpers import Suite
|
|
|
|
@pytest.mark.integration_test
|
|
@pytest.mark.parametrize('type_', COMPLETE_PRIMITIVE_TYPES)
|
|
def test_static_array_module_constant(type_):
|
|
code_py = f"""
|
|
CONSTANT: {type_}[3] = (24, 57, 80, )
|
|
|
|
@exported
|
|
def testEntry() -> {type_}:
|
|
return helper(CONSTANT)
|
|
|
|
def helper(array: {type_}[3]) -> {type_}:
|
|
return array[0] + array[1] + array[2]
|
|
"""
|
|
|
|
result = Suite(code_py).run_code()
|
|
|
|
assert 161 == result.returned_value
|
|
assert TYPE_MAP[type_] == type(result.returned_value)
|
|
|
|
@pytest.mark.integration_test
|
|
@pytest.mark.parametrize('type_', COMPLETE_PRIMITIVE_TYPES)
|
|
def test_static_array_indexed(type_):
|
|
code_py = f"""
|
|
CONSTANT: {type_}[3] = (24, 57, 80, )
|
|
|
|
@exported
|
|
def testEntry() -> {type_}:
|
|
return helper(CONSTANT, 0, 1, 2)
|
|
|
|
def helper(array: {type_}[3], i0: u32, i1: u32, i2: u32) -> {type_}:
|
|
return array[i0] + array[i1] + array[i2]
|
|
"""
|
|
|
|
result = Suite(code_py).run_code()
|
|
|
|
assert 161 == result.returned_value
|
|
assert TYPE_MAP[type_] == type(result.returned_value)
|
|
|
|
@pytest.mark.integration_test
|
|
def test_static_array_constant_too_few_values():
|
|
code_py = """
|
|
CONSTANT: u8[3] = (24, 57, )
|
|
"""
|
|
|
|
with pytest.raises(StaticError, match='Static error on line 2: Invalid number of static array values'):
|
|
phasm_parse(code_py)
|
|
|
|
@pytest.mark.integration_test
|
|
def test_static_array_constant_too_many_values():
|
|
code_py = """
|
|
CONSTANT: u8[3] = (24, 57, 1, 1, )
|
|
"""
|
|
|
|
with pytest.raises(StaticError, match='Static error on line 2: Invalid number of static array values'):
|
|
phasm_parse(code_py)
|
|
|
|
@pytest.mark.integration_test
|
|
def test_static_array_constant_type_mismatch():
|
|
code_py = """
|
|
CONSTANT: u8[3] = (24, 4000, 1, )
|
|
"""
|
|
|
|
with pytest.raises(StaticError, match='Static error on line 2: Integer value out of range; expected 0..255, actual 4000'):
|
|
phasm_parse(code_py)
|
|
|
|
@pytest.mark.integration_test
|
|
def test_static_array_index_out_of_bounds():
|
|
code_py = """
|
|
CONSTANT0: u32[3] = (24, 57, 80, )
|
|
|
|
CONSTANT1: u32[16] = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, )
|
|
|
|
@exported
|
|
def testEntry() -> u32:
|
|
return CONSTANT0[16]
|
|
"""
|
|
|
|
result = Suite(code_py).run_code()
|
|
|
|
assert 0 == result.returned_value
|