Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_from_state_expr(self):
state = State.from_expr("m=0,x=1")
self.assertEqual(state, State(m=0, x=1))
state = State.from_expr("x=0,m=1")
self.assertEqual(state, State(x=0, m=1))
def test_sizes(self):
state = State(0b0011_0000)
self.assertEqual(state.a_size, 1)
self.assertEqual(state.x_size, 1)
state = State(m=1, x=0)
self.assertEqual(state.a_size, 1)
self.assertEqual(state.x_size, 2)
state = State(m=0, x=1)
self.assertEqual(state.a_size, 2)
self.assertEqual(state.x_size, 1)
def test_register(self):
state = State(m=1, x=1)
a = Register(state, True)
x = Register(state, False)
a.set(0xFF)
self.assertEqual(a.lo, 0xFF)
self.assertEqual(a.hi, None)
self.assertEqual(a.get(), 0xFF)
state.m = 0
self.assertEqual(a.get(), None)
x.set(0xFF)
self.assertEqual(x.lo, 0xFF)
self.assertEqual(x.hi, None)
self.assertEqual(x.get(), 0xFF)
state.x = 0
def test_reset(self):
state = State(m=1, x=1)
state.reset(0b0011_0000)
self.assertEqual(state.m, 0)
self.assertEqual(state.x, 0)
def test_repr(self):
state = State(m=1, x=1)
self.assertEqual(repr(state), "")
def test_sizes(self):
state = State(0b0011_0000)
self.assertEqual(state.a_size, 1)
self.assertEqual(state.x_size, 1)
state = State(m=1, x=0)
self.assertEqual(state.a_size, 1)
self.assertEqual(state.x_size, 2)
state = State(m=0, x=1)
self.assertEqual(state.a_size, 2)
self.assertEqual(state.x_size, 1)
def test_simplify(self):
state = State(m=0, x=1)
change = StateChange()
self.assertEqual(change.simplify(state), StateChange())
change = StateChange(m=0)
self.assertEqual(change.simplify(state), StateChange())
change = StateChange(m=0, x=1)
self.assertEqual(change.simplify(state), StateChange())
change = StateChange(m=0, x=0)
self.assertEqual(change.simplify(state), StateChange(x=0))
change = StateChange(unknown=True)
self.assertEqual(change.simplify(state), StateChange(unknown=True))
def __init__(
self,
log,
pc: int,
p: int,
subroutine_pc: int,
opcode: int,
argument: int,
registers: Dict[str, Optional[int]],
state_change_before: StateChange,
):
super().__init__()
self.log = log
self.pc = pc
self.state = State(p)
self.registers = registers
self.subroutine_pc = subroutine_pc
self.opcode = opcode
self._argument = argument
self.state_change_before = state_change_before
self.state_change_after = StateChange(unknown_reason=UnknownReason.UNKNOWN)
self.stack_manipulation = StackManipulation.NONE
self.ret_indirect_type = RetIndirectType.NONE
def set(self, p_change: int) -> None:
change = State(p_change)
self.m = 1 if change.m else self.m
self.x = 1 if change.x else self.x