class TestAutomata(unittest.TestCase): test_unit = None state_name = "testState" transition_letter = "s" from_state_id = 42 to_state_id = 91 def setUp(self): unittest.TestCase.setUp(self) self.test_unit = Automata() def test_add_and_get_state(self): self.assertIsNone(self.test_unit.get_state(self.state_name)) self.test_unit.add_state(self.state_name) state = self.test_unit.get_state(self.state_name) self.assertIsNotNone(state) self.assertIs(state.name, self.state_name) def test_add_initial_state(self): self.test_unit.add_initial_state(self.state_name) self.assertTrue(self.test_unit.get_state(self.state_name).initial) def test_add_accepting_state(self): self.test_unit.add_accepting_state(self.state_name) self.assertTrue(self.test_unit.get_state(self.state_name).accepting) def test_add_transition(self): self.assertIsNone(self.test_unit.get_transition_by_from_state_id(self.from_state_id)) self.test_unit.add_transition(self.transition_letter, self.from_state_id, self.to_state_id) transition = self.test_unit.get_transition_by_from_state_id(self.from_state_id) self.assertIsNotNone(transition) self.assertIs(transition.from_state_id, self.from_state_id) self.assertIs(transition.to_state_id, self.to_state_id) self.assertIs(transition.letter, self.transition_letter) def test_accepts_rejects_single_char(self): # q0 - a -> (q1) self.test_unit.add_initial_state('q0') self.test_unit.add_accepting_state('q1') self.test_unit.add_transition('a', 'q0', 'q1') self.assertTrue(self.test_unit.accepts('a')) self.assertFalse(self.test_unit.accepts('b')) def test_accepts_rejects_three_chars(self): # q0 - a -> (q1) # (q1) - b -> q0 self.test_unit.add_initial_state('q0') self.test_unit.add_accepting_state('q1') self.test_unit.add_transition('a', 'q0', 'q1') self.test_unit.add_transition('b', 'q1', 'q0') self.assertTrue(self.test_unit.accepts('aba')) self.assertFalse(self.test_unit.accepts('ab'))
from Automata import Automata myAutomata = Automata() myAutomata.add_initial_state('q0') myAutomata.add_state('q1') myAutomata.add_accepting_state('q2') # q0 - a -> q1 myAutomata.add_transition('a', 'q0', 'q1') # q1 - b -> (q2) myAutomata.add_transition('b', 'q1', 'q2') words = {'ab', 'ba', 'aa', 'bb'} for word in words: if myAutomata.accepts(word): print word + " is accepted.\n" else: print word + " is not accepted.\n"