Exemplo n.º 1
0
 def test_accepts_both_optional_paths(self):
     machine = StateMachine(states=[
         State(START_STATE, [Edge('a', 'b'), Edge('a', 'c')]),
         State('b', Edge('b', FINAL_STATE)),
         State('c', Edge('c', FINAL_STATE)),
         State(FINAL_STATE)
     ])
     self.assertTrue(machine.accepts('ab')[0])
     machine.reset()
     self.assertTrue(machine.accepts('ac')[0])
Exemplo n.º 2
0
 def test_accepts_repeated_symbols(self):
     machine = StateMachine(states=[
         State(START_STATE, Edge('a', FINAL_STATE)),
         State(FINAL_STATE, Edge('', START_STATE))
     ])
     self.assertTrue(machine.accepts('a')[0])
     machine.reset()
     self.assertTrue(machine.accepts('aa')[0])
     machine.reset()
     self.assertTrue(machine.accepts('aaa')[0])
Exemplo n.º 3
0
 def test_accepts_optional_symbols(self):
     machine = StateMachine(states=[
         State(START_STATE, [Edge('a', FINAL_STATE),
                             Edge('a', 'b')]),
         State('b', Edge('b', FINAL_STATE)),
         State(FINAL_STATE)
     ])
     self.assertTrue(machine.accepts('a')[0])
     machine.reset()
     self.assertTrue(machine.accepts('ab')[0])
     machine.reset()
     self.assertFalse(machine.accepts('b')[0])
Exemplo n.º 4
0
 def test_accepts_repeated_alpha(self):
     machine = StateMachine(states=[
         State(START_STATE, Edge('ALPHA', FINAL_STATE, True)),
         State(FINAL_STATE, Edge('', START_STATE))
     ])
     self.assertTrue(machine.accepts('a')[0])
     machine.reset()
     self.assertTrue(machine.accepts('ab')[0])
     machine.reset()
     self.assertTrue(machine.accepts('abc')[0])
     machine.reset()
     self.assertFalse(machine.accepts('a2c')[0])
Exemplo n.º 5
0
 def test_accepts_repeated_digit(self):
     machine = StateMachine(states=[
         State(START_STATE, Edge('DIGIT', FINAL_STATE, True)),
         State(FINAL_STATE, Edge('', START_STATE))
     ])
     self.assertTrue(machine.accepts('1')[0])
     machine.reset()
     self.assertTrue(machine.accepts('12')[0])
     machine.reset()
     self.assertTrue(machine.accepts('123')[0])
     machine.reset()
     self.assertFalse(machine.accepts('1a3')[0])
Exemplo n.º 6
0
 def test_accepts_single_alpha(self):
     machine = StateMachine(states=[
         State(START_STATE, Edge('ALPHA', FINAL_STATE, True)),
         State(FINAL_STATE)
     ])
     self.assertTrue(machine.accepts('a')[0])
     machine.reset()
     self.assertTrue(machine.accepts('A')[0])
     machine.reset()
     self.assertTrue(machine.accepts('z')[0])
     machine.reset()
     self.assertTrue(machine.accepts('Z')[0])
     machine.reset()
     self.assertFalse(machine.accepts('0')[0])
Exemplo n.º 7
0
 def test_accepts_single_digit(self):
     machine = StateMachine(states=[
         State(START_STATE, Edge('DIGIT', FINAL_STATE, True)),
         State(FINAL_STATE)
     ])
     self.assertTrue(machine.accepts('1')[0])
     machine.reset()
     self.assertTrue(machine.accepts('2')[0])
     machine.reset()
     self.assertTrue(machine.accepts('3')[0])
     machine.reset()
     self.assertFalse(machine.accepts('A')[0])
     machine.reset()
     self.assertFalse(machine.accepts('a')[0])
Exemplo n.º 8
0
 def test_accepts_N_star_repeated_symbols(self):
     machine = StateMachine(states=[
         State(START_STATE, Edge('a', 'a1')),
         State('a1', Edge('a', 'a2')),
         State('a2', [Edge('a', FINAL_STATE),
                      Edge('a', 'a2')]),
         State(FINAL_STATE),
     ])
     self.assertFalse(machine.accepts('a')[0])
     machine.reset()
     self.assertFalse(machine.accepts('aa')[0])
     machine.reset()
     self.assertTrue(machine.accepts('aaa')[0])
     machine.reset()
     self.assertTrue(machine.accepts('aaaa')[0])
Exemplo n.º 9
0
 def test_accepts_repeated_char(self):
     machine = StateMachine(states=[
         State(START_STATE, Edge('CHAR', FINAL_STATE, True)),
         State(FINAL_STATE, Edge('', START_STATE))
     ])
     self.assertTrue(machine.accepts('a')[0])
     machine.reset()
     self.assertTrue(machine.accepts('ab')[0])
     machine.reset()
     self.assertTrue(machine.accepts('abc')[0])
     machine.reset()
     self.assertTrue(machine.accepts('1')[0])
     machine.reset()
     self.assertTrue(machine.accepts('12')[0])
     machine.reset()
     self.assertTrue(machine.accepts('123')[0])
     machine.reset()
     self.assertTrue(machine.accepts('1a3')[0])
     machine.reset()
     self.assertTrue(machine.accepts('a2c')[0])
Exemplo n.º 10
0
 def test_accepts_mixed_character_classes(self):
     machine = StateMachine(states=[
         State(START_STATE, Edge('ALPHA', '1', True)),
         State('1', Edge('DIGIT', '2', True)),
         State('2', Edge('CHAR', FINAL_STATE, True)),
         State(FINAL_STATE, Edge('', START_STATE))
     ])
     self.assertTrue(machine.accepts('a1a')[0])
     machine.reset()
     self.assertTrue(machine.accepts('b22')[0])
     machine.reset()
     self.assertTrue(machine.accepts('Z0&')[0])
     machine.reset()
     self.assertTrue(machine.accepts('p0)m3<')[0])
     machine.reset()
     self.assertTrue(machine.accepts('a1!b2@c3#d4$e5%')[0])
     machine.reset()
     self.assertFalse(machine.accepts('1a&')[0])
     machine.reset()
     self.assertFalse(machine.accepts('aaa')[0])
     machine.reset()
     self.assertFalse(machine.accepts('111')[0])
     machine.reset()
     self.assertFalse(machine.accepts('a1')[0])
Exemplo n.º 11
0
 def test_accepts_single_char(self):
     machine = StateMachine(states=[
         State(START_STATE, Edge('CHAR', FINAL_STATE, True)),
         State(FINAL_STATE)
     ])
     self.assertTrue(machine.accepts('a')[0])
     machine.reset()
     self.assertTrue(machine.accepts('A')[0])
     machine.reset()
     self.assertTrue(machine.accepts('1')[0])
     machine.reset()
     self.assertTrue(machine.accepts('.')[0])
     machine.reset()
     self.assertTrue(machine.accepts('*')[0])
     machine.reset()
     self.assertTrue(machine.accepts('[')[0])
     machine.reset()
     self.assertFalse(machine.accepts('aa')[0])
Exemplo n.º 12
0
class AorBCorDEFFiveTimesStateMachineTestCase(unittest.TestCase):
    def setUp(self):
        # Build a machine for 5("a" / "bc" / "def")
        gen_edges = lambda i: [
            Edge('a', f'a{i}'),
            Edge('bc', f'bc{i}'),
            Edge('def', f'def{i}')
        ]
        states = [State(START_STATE, gen_edges(0))]
        for i in range(4):
            states += [
                State(f'a{i}', gen_edges(i + 1)),
                State(f'bc{i}', gen_edges(i + 1)),
                State(f'def{i}', gen_edges(i + 1)),
            ]
        states += [
            State(f'a4', Edge('', FINAL_STATE)),
            State(f'bc4', Edge('', FINAL_STATE)),
            State(f'def4', Edge('', FINAL_STATE)),
            State(f'FINAL')
        ]
        self.machine = StateMachine(states=states)

    def test_does_not_accept_empty_string(self):
        self.assertFalse(self.machine.accepts("")[0])

    def test_does_not_accept_a(self):
        self.assertFalse(self.machine.accepts("a")[0])

    def test_does_not_accept_b(self):
        self.assertFalse(self.machine.accepts("b")[0])

    def test_does_not_accept_bc(self):
        self.assertFalse(self.machine.accepts("bc")[0])

    def test_does_not_accept_c(self):
        self.assertFalse(self.machine.accepts("c")[0])

    def test_does_not_accept_cd(self):
        self.assertFalse(self.machine.accepts("cd")[0])

    def test_does_not_accept_cde(self):
        self.assertFalse(self.machine.accepts("cde")[0])

    def test_accepts_abcdefabc(self):
        self.assertTrue(self.machine.accepts("abcdefabc")[0])

    def test_does_not_accept_aaaa(self):
        self.assertFalse(self.machine.accepts("aaaa")[0])

    def test_accepts_aaaaa(self):
        self.assertTrue(self.machine.accepts("aaaaa")[0])

    def test_does_not_accept_aaaaaa(self):
        self.assertFalse(self.machine.accepts("aaaaaa")[0])

    def test_does_not_accept_cdecdecdecde(self):
        self.assertFalse(self.machine.accepts("cdecdecdecde")[0])

    def test_accepts_cdecdecdecdecde(self):
        self.assertFalse(self.machine.accepts("cdecdecdecdecde")[0])

    def test_does_not_accept_cdecdecdecde(self):
        self.assertFalse(self.machine.accepts("cdecdecdecdecdecde")[0])

    def test_accepts_defabcaa(self):
        self.assertTrue(self.machine.accepts("defabcaa")[0])
Exemplo n.º 13
0
class AStarBRepeatedStateMachineTestCase(unittest.TestCase):
    def setUp(self):
        # Build a machine for (a+b)*
        state_0 = State(START_STATE, [Edge('a', "a*"), Edge('', FINAL_STATE)])
        state_1 = State("a*", [Edge("a", "a*"), Edge("b", FINAL_STATE)])
        state_2 = State(FINAL_STATE, [Edge('', START_STATE)])
        self.machine = StateMachine(states=[state_0, state_1, state_2])

    def test_accepts_empty_string(self):
        self.assertTrue(self.machine.accepts("")[0])

    def test_does_not_accept_a(self):
        self.assertFalse(self.machine.accepts("a")[0])

    def test_does_not_accept_b(self):
        self.assertFalse(self.machine.accepts("b")[0])

    def test_does_not_accept_c(self):
        self.assertFalse(self.machine.accepts("c")[0])

    def test_accepts_ab(self):
        self.assertTrue(self.machine.accepts("ab")[0])

    def test_does_not_accept_ba(self):
        self.assertFalse(self.machine.accepts("ba")[0])

    def test_does_not_accept_abc(self):
        self.assertFalse(self.machine.accepts("abc")[0])

    def test_does_not_accept_aaa(self):
        self.assertFalse(self.machine.accepts("aaa")[0])

    def test_does_not_accept_bbb(self):
        self.assertFalse(self.machine.accepts("bbb")[0])

    def test_accepts_aaabaaab(self):
        self.assertTrue(self.machine.accepts("aaaaaaab")[0])

    def test_accepts_aaabaaab(self):
        self.assertTrue(self.machine.accepts("aaabaaab")[0])

    def test_does_not_accept_aaabbaaab(self):
        self.assertFalse(self.machine.accepts("aaabbaaab")[0])
Exemplo n.º 14
0
 def test_accepts_single_symbol(self):
     machine = StateMachine(states=[
         State(START_STATE, Edge('abc', FINAL_STATE)),
         State(FINAL_STATE)
     ])
     self.assertTrue(machine.accepts('abc')[0])