From 000495e055ef1cade75441a103d55ece233a6188 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Gil=20de=20G=C3=B3mez=20P=C3=A9rez?= Date: Wed, 15 Jul 2026 17:13:07 +0300 Subject: [PATCH] 100% test coverage --- src/snanosm/mealy.py | 14 ++++---------- tests/test_mealy.py | 12 ++++++++++++ 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/snanosm/mealy.py b/src/snanosm/mealy.py index 5aae261..a282871 100644 --- a/src/snanosm/mealy.py +++ b/src/snanosm/mealy.py @@ -29,9 +29,6 @@ class State: def __str__(self) -> str: return f"[State {self.__name}]" - def __hash__(self) -> int: - return hash(self.__name) - class Transition(Generic[TransitionInput]): def __init__(self, transition_input: TransitionInput, origin_name: str, destination_name: str, @@ -51,10 +48,6 @@ class Transition(Generic[TransitionInput]): def __str__(self) -> str: 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]): def __init__(self, initial_context=None) -> None: @@ -151,8 +144,9 @@ class Machine(Generic[Input]): def __str__(self) -> str: r = [f"=MACHINE=", "\tSTATES"] for state in self.__states.values(): - r.append(f"\t\t{state}") + r.append(f"\t\t{str(state)}") r.append("\tTRANSITIONS") - for transition in self.__transitions.values(): - r.append(f"\t\t{transition}") + for transition_origin in self.__transitions.keys(): + for transition_input in self.__transitions[transition_origin]: + r.append(f"\t\t{str(self.__transitions[transition_origin][transition_input])}") return "\n".join(r) diff --git a/tests/test_mealy.py b/tests/test_mealy.py index c9fe810..ac2cfb6 100644 --- a/tests/test_mealy.py +++ b/tests/test_mealy.py @@ -233,4 +233,16 @@ class TestMachine(unittest.TestCase): t = Transition("TEST_1", "A", "B", lambda context: print("A -> B")) 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) +