gigatron/rom/Contrib/psr/multiply/test/test_half_square.py
2025-01-28 19:17:01 +03:00

48 lines
1.2 KiB
Python

import os.path
import pathlib
from importlib import reload
from types import SimpleNamespace
from hypothesis import given
from hypothesis import strategies as st
import asm
from gtemu import RAM, Emulator
SRC_DIR = (pathlib.Path(__file__).parent / ".." / "src").resolve()
SCRIPT = SRC_DIR / "half-square.asm.py"
def setup_module():
global vars
"""Load the Emulator from the multiplication script"""
reload(asm)
name, _ = os.path.splitext(os.path.basename(SCRIPT))
script_globals = {"__file__": str(SCRIPT.absolute()), "__name__": name}
with SCRIPT.open("rb") as file:
exec(compile(file.read(), SCRIPT, "exec"), script_globals)
Emulator.load_rom_from_asm_module()
vars = SimpleNamespace(**script_globals)
_bytes = st.integers(min_value=0, max_value=255)
@given(a=_bytes, b=_bytes)
def test_multiplication_8(a, b):
"""Multiplication of two eight-bit integers should work"""
Emulator.reset()
RAM[asm.symbol("A")] = a
RAM[asm.symbol("B")] = b
Emulator.next_instruction = "start"
cycles = Emulator.run_to("end")
result = int.from_bytes(
RAM[asm.symbol("result") : asm.symbol("result") + 2],
"little",
signed=False,
)
assert a * b == result
assert 119 == cycles