100% test coverage
This commit is contained in:
+4
-10
@@ -29,9 +29,6 @@ class State:
|
|||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
return f"[State {self.__name}]"
|
return f"[State {self.__name}]"
|
||||||
|
|
||||||
def __hash__(self) -> int:
|
|
||||||
return hash(self.__name)
|
|
||||||
|
|
||||||
|
|
||||||
class Transition(Generic[TransitionInput]):
|
class Transition(Generic[TransitionInput]):
|
||||||
def __init__(self, transition_input: TransitionInput, origin_name: str, destination_name: str,
|
def __init__(self, transition_input: TransitionInput, origin_name: str, destination_name: str,
|
||||||
@@ -51,10 +48,6 @@ class Transition(Generic[TransitionInput]):
|
|||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
return f"[Transition ({self.__origin_name}, {self.__destination_name}, {self.__transition_input})]"
|
return f"[Transition ({self.__origin_name}, {self.__destination_name}, {self.__transition_input})]"
|
||||||
|
|
||||||
def __hash__(self) -> int:
|
|
||||||
# A tuple is only hashable if all its elements are hashable
|
|
||||||
return hash((self.__origin_name, self.__destination_name, self.__transition_input))
|
|
||||||
|
|
||||||
|
|
||||||
class Machine(Generic[Input]):
|
class Machine(Generic[Input]):
|
||||||
def __init__(self, initial_context=None) -> None:
|
def __init__(self, initial_context=None) -> None:
|
||||||
@@ -151,8 +144,9 @@ class Machine(Generic[Input]):
|
|||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
r = [f"=MACHINE=", "\tSTATES"]
|
r = [f"=MACHINE=", "\tSTATES"]
|
||||||
for state in self.__states.values():
|
for state in self.__states.values():
|
||||||
r.append(f"\t\t{state}")
|
r.append(f"\t\t{str(state)}")
|
||||||
r.append("\tTRANSITIONS")
|
r.append("\tTRANSITIONS")
|
||||||
for transition in self.__transitions.values():
|
for transition_origin in self.__transitions.keys():
|
||||||
r.append(f"\t\t{transition}")
|
for transition_input in self.__transitions[transition_origin]:
|
||||||
|
r.append(f"\t\t{str(self.__transitions[transition_origin][transition_input])}")
|
||||||
return "\n".join(r)
|
return "\n".join(r)
|
||||||
|
|||||||
@@ -233,4 +233,16 @@ class TestMachine(unittest.TestCase):
|
|||||||
t = Transition("TEST_1", "A", "B", lambda context: print("A -> B"))
|
t = Transition("TEST_1", "A", "B", lambda context: print("A -> B"))
|
||||||
self.assertEqual(str(t), "[Transition (A, B, TEST_1)]")
|
self.assertEqual(str(t), "[Transition (A, B, TEST_1)]")
|
||||||
|
|
||||||
|
# MACHINE
|
||||||
|
|
||||||
|
def test_machine_str(self):
|
||||||
|
m = Machine()
|
||||||
|
m.add_state("A", True, False)
|
||||||
|
m.add_state("B", False, False)
|
||||||
|
m.add_state("C", False, True)
|
||||||
|
m.add_transition("TEST_1", "A", "B", lambda context: print("A -> B"))
|
||||||
|
m.add_transition("TEST_2", "B", "C", lambda context: print("B -> C"))
|
||||||
|
result = "=MACHINE=\n\tSTATES\n\t\t[State A]\n\t\t[State B]\n\t\t[State C]\n\tTRANSITIONS\n\t\t[Transition (A, B, TEST_1)]\n\t\t[Transition (B, C, TEST_2)]"
|
||||||
|
self.assertEqual(str(m), result)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user