They look a lot like placeholders, but they exist before the typing system takes place. And there's a (much smaller) context to deal with. For now, removes Placeholders in user function definitions as they were not implemented. Adds signature to function to try to get them closer to type class methods. Already seeing some benefit in the constraint generator. Stricter zipping for safety.
62 lines
1.3 KiB
Python
62 lines
1.3 KiB
Python
import pytest
|
|
|
|
from ..helpers import Suite
|
|
|
|
|
|
@pytest.mark.integration_test
|
|
def test_foldl_1():
|
|
code_py = """
|
|
def u8_or(l: u8, r: u8) -> u8:
|
|
return l | r
|
|
|
|
@exported
|
|
def testEntry(b: bytes) -> u8:
|
|
return foldl(u8_or, 128, b)
|
|
"""
|
|
suite = Suite(code_py)
|
|
|
|
result = suite.run_code(b'')
|
|
assert 128 == result.returned_value
|
|
|
|
result = suite.run_code(b'\x80')
|
|
assert 128 == result.returned_value
|
|
|
|
result = suite.run_code(b'\x80\x40')
|
|
assert 192 == result.returned_value
|
|
|
|
result = suite.run_code(b'\x80\x40\x20\x10')
|
|
assert 240 == result.returned_value
|
|
|
|
result = suite.run_code(b'\x80\x40\x20\x10\x08\x04\x02\x01')
|
|
assert 255 == result.returned_value
|
|
|
|
@pytest.mark.integration_test
|
|
def test_foldl_2():
|
|
code_py = """
|
|
def xor(l: u8, r: u8) -> u8:
|
|
return l ^ r
|
|
|
|
@exported
|
|
def testEntry(a: bytes, b: bytes) -> u8:
|
|
return foldl(xor, 0, a) ^ foldl(xor, 0, b)
|
|
"""
|
|
suite = Suite(code_py)
|
|
|
|
result = suite.run_code(b'\x55\x0F', b'\x33\x80')
|
|
assert 233 == result.returned_value
|
|
|
|
@pytest.mark.integration_test
|
|
def test_foldl_3():
|
|
code_py = """
|
|
def xor(l: u32, r: u8) -> u32:
|
|
return l ^ u32(r)
|
|
|
|
@exported
|
|
def testEntry(a: bytes) -> u32:
|
|
return foldl(xor, 0, a)
|
|
"""
|
|
suite = Suite(code_py)
|
|
|
|
result = suite.run_code(b'\x55\x0F\x33\x80')
|
|
assert 233 == result.returned_value
|