Beispiel #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'))