Ejemplo n.º 1
0
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'))
Ejemplo n.º 2
0
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"