102 lines
2.0 KiB
Python
102 lines
2.0 KiB
Python
import pytest
|
|
|
|
from phasm.type5.solver import Type5SolverException
|
|
|
|
from ..helpers import Suite
|
|
|
|
|
|
@pytest.mark.integration_test
|
|
@pytest.mark.parametrize('inp', [9, 10, 11, 12])
|
|
def test_if_simple(inp):
|
|
code_py = """
|
|
@exported
|
|
def testEntry(a: i32) -> i32:
|
|
if a > 10:
|
|
return 15
|
|
|
|
return 3
|
|
"""
|
|
exp_result = 15 if inp > 10 else 3
|
|
|
|
suite = Suite(code_py)
|
|
|
|
result = suite.run_code(inp)
|
|
assert exp_result == result.returned_value
|
|
|
|
@pytest.mark.integration_test
|
|
@pytest.mark.skip('Such a return is not how things should be')
|
|
def test_if_complex():
|
|
code_py = """
|
|
@exported
|
|
def testEntry(a: i32) -> i32:
|
|
if a > 10:
|
|
return 10
|
|
elif a > 0:
|
|
return a
|
|
else:
|
|
return 0
|
|
|
|
return -1 # Required due to function type
|
|
"""
|
|
|
|
suite = Suite(code_py)
|
|
|
|
assert 10 == suite.run_code(20).returned_value
|
|
assert 10 == suite.run_code(10).returned_value
|
|
|
|
assert 8 == suite.run_code(8).returned_value
|
|
|
|
assert 0 == suite.run_code(0).returned_value
|
|
assert 0 == suite.run_code(-1).returned_value
|
|
|
|
@pytest.mark.integration_test
|
|
def test_if_nested():
|
|
code_py = """
|
|
@exported
|
|
def testEntry(a: i32, b: i32) -> i32:
|
|
if a > 11:
|
|
if b > 11:
|
|
return 3
|
|
|
|
return 2
|
|
|
|
if b > 11:
|
|
return 1
|
|
|
|
return 0
|
|
"""
|
|
|
|
suite = Suite(code_py)
|
|
|
|
assert 3 == suite.run_code(20, 20).returned_value
|
|
assert 2 == suite.run_code(20, 10).returned_value
|
|
assert 1 == suite.run_code(10, 20).returned_value
|
|
assert 0 == suite.run_code(10, 10).returned_value
|
|
|
|
@pytest.mark.integration_test
|
|
def test_if_type_invalid():
|
|
code_py = """
|
|
@exported
|
|
def testEntry(a: i32) -> i32:
|
|
if a:
|
|
return 1
|
|
|
|
return 0
|
|
"""
|
|
|
|
with pytest.raises(Type5SolverException, match='i32 ~ bool'):
|
|
Suite(code_py).run_code(1)
|
|
|
|
@pytest.mark.integration_test
|
|
def test_if_type_ok():
|
|
code_py = """
|
|
@exported
|
|
def testEntry(a: bool) -> i32:
|
|
if a:
|
|
return 1
|
|
|
|
return 0
|
|
"""
|
|
|
|
assert 1 == Suite(code_py).run_code(1).returned_value
|