diff --git a/test/test_core/test_breakpoint.py b/test/test_core/test_breakpoint.py new file mode 100644 index 0000000000000000000000000000000000000000..f361e62f7a1b80df928852616e83db9ba1bdca9d --- /dev/null +++ b/test/test_core/test_breakpoint.py @@ -0,0 +1,74 @@ +from simudator.core.breakpoint_state import StateBreakpoint +from simudator.core.breakpoint_memory import MemoryBreakpoint +from simudator.core.breakpoint_lambda import LambdaBreakpoint +from simudator.core.module import Module +from simudator.core.modules.memory import Memory +from simudator.core.processor import Processor +from simudator.core.signal import Signal + +class DummyModule(Module): + def __init__(self, name: str = "") -> None: + super().__init__(name) + self.value = 0 + + def get_state(self) -> dict: + state = super().get_state() + state["value"] = self.value + return state + +def test_state_breakpoint(): + m = DummyModule() + bp = StateBreakpoint(m, "value", 10) + + assert bp.is_break() == False + + m.value = 10 + assert bp.is_break() == True + + m.value = "-" + assert bp.is_break() == False + +def test_memory_breakpoint(): + cpu = Processor() + in_s = Signal(cpu) + out_s = Signal(cpu) + ctrl_s = Signal(cpu) + adr_s = Signal(cpu) + mem = Memory(in_s, out_s, ctrl_s, adr_s, 8) + cpu.add_module(mem) + + # Default memory value is not -2 => should not break + bp = MemoryBreakpoint(mem, 3, -2) + assert bp.is_break() == False + + # Write the relevant memory address to some other value + # => should not break + in_s.update_value("a") + adr_s.update_value(3) + ctrl_s.update_value(True) + cpu.do_tick() # Address the memory + cpu.do_tick() # Write to the memory + assert bp.is_break() == False + + # Write the breakpoint value to the relevant address => should break + in_s.update_value(-2) + cpu.do_tick() + assert bp.is_break() == True + + # Writing to some other address should not affect + in_s.update_value(-2) + adr_s.update_value(7) + cpu.do_tick() # Address the memory + cpu.do_tick() # Write to the memory + assert bp.is_break() == True + + # Writing some other value to the relevant address => should no longer break + adr_s.update_value(3) + in_s.update_value(4.6) + cpu.do_tick() # Address the memory + cpu.do_tick() # Write to the memory + assert bp.is_break() == False + +def test_lambda_breakpoint(): + pass +