From 8e8471a7abb0a1cb04e185afb506c2b7c7a44d4d Mon Sep 17 00:00:00 2001 From: David Date: Thu, 16 Jul 2026 06:40:55 +0300 Subject: [PATCH] feat: added is_in_final_state method --- src/snanosm/mealy.py | 6 ++++++ tests/test_mealy.py | 16 ++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/snanosm/mealy.py b/src/snanosm/mealy.py index c39d4bb..35cb985 100644 --- a/src/snanosm/mealy.py +++ b/src/snanosm/mealy.py @@ -136,6 +136,12 @@ class Machine(Generic[Input]): return None # The machine has not started yet return self.__states[self.__current_state_hash] + def is_in_final_state(self) -> bool: + if self.__current_state_hash is None: + return False + assert self.__current_state_hash is not None + return self.__current_state_hash in self.__end_states + def __str__(self) -> str: r = [f"=MACHINE=", "\tSTATES"] for state in self.__states.values(): diff --git a/tests/test_mealy.py b/tests/test_mealy.py index 351f14c..8a2388e 100644 --- a/tests/test_mealy.py +++ b/tests/test_mealy.py @@ -210,6 +210,22 @@ class TestMachine(unittest.TestCase): with self.assertRaises(ValueError): m.reset() + # IS_IN_FINAL_STATE + + def test_is_in_final_state(self): + m = Machine() + m.add_state("A", True, False) + m.add_state("B", False, True) + m.add_transition("X", "A", "B", lambda context: print("A -> B")) + m.process_input("X") + self.assertTrue(m.is_in_final_state()) + m.reset() + self.assertFalse(m.is_in_final_state()) + + def test_is_in_final_state_not_started(self): + m = Machine() + self.assertFalse(m.is_in_final_state()) + # STATE def test_state_str(self):