def test_build_basic(self): nfa = NfaRegex('a') sm = nfa._build_basic_sm('a') self.assertEqual(sm.states, [0, 1]) self.assertEqual(sm.init_state, 0) self.assertEqual(sm.finish_states, [1]) self.assertEqual(sm.catch_state, 1) self.assertEqual(sm.language, ['a']) self.assertEqual(sm.transitions, [[0, 1, 'a']])
def test_build_and(self): nfa = NfaRegex('a&b') sm1 = nfa._build_basic_sm('a') sm2 = nfa._build_basic_sm('b') sm = nfa._build_and_sm(sm1, sm2) self.assertEqual(sm.states, [0, 1, 2]) self.assertEqual(sm.init_state, 0) self.assertEqual(sm.finish_states, [2]) self.assertEqual(sm.catch_state, 2) self.assertEqual(sm.language, ['a', 'b']) self.assertEqual(sm.transitions, [[0, 1, 'a'], [1, 2, 'b']])
def test_build_one_or_more(self): nfa = NfaRegex('a?') sm1 = nfa._build_basic_sm('a') sm = nfa._build_one_or_more_sm(sm1) self.assertEqual(sm.states, [0, 1, 2, 4, 3]) self.assertEqual(sm.init_state, 0) self.assertEqual(sm.finish_states, [4]) self.assertEqual(sm.catch_state, 4) self.assertEqual(sm.language, ['a']) self.assertEqual(sm.transitions, [[0, 1, 'a'], [1, 2, 'ε'], [1, 4, 'ε'], [2, 3, 'a'], [3, 2, 'ε'], [3, 4, 'ε']])
def test_build_or(self): nfa = NfaRegex('a|b') sm1 = nfa._build_basic_sm('a') sm2 = nfa._build_basic_sm('b') sm = nfa._build_or_sm(sm1, sm2) self.assertEqual(sm.states, [0, 1, 2, 3, 4, 5]) self.assertEqual(sm.init_state, 0) self.assertEqual(sm.finish_states, [5]) self.assertEqual(sm.catch_state, 5) self.assertEqual(sm.language, ['a', 'b']) self.assertEqual(sm.transitions, [[0, 1, 'ε'], [0, 3, 'ε'], [1, 2, 'a'], [3, 4, 'b'], [2, 5, 'ε'], [4, 5, 'ε']])