def test_run_invalid_std(self):
     nfa = NfaRegex('(a|b)*abb')
     nfa.build()
     dfa = DfaNfa(nfa.nfa)
     dfa.build()
     dfa.minimize()
     result = dfa.run('ababaab')
     self.assertEqual(result, False)
def check_chain(regex, chain):
    nfa = NfaRegex(regex)
    nfa.build()
    nfa.nfa.draw()
    dfa = DfaNfa(nfa.nfa)
    dfa.build()
    dfa.dfa.draw()
    dfa.minimize()
    dfa.run(chain)
 def test_build_correct_std(self):
     nfa = NfaRegex('(a|b)*abb')
     nfa.build()
     dfa = DfaNfa(nfa.nfa)
     dfa.build()
     self.assertEqual(dfa.dfa.states, [0, 1, 2, 4, 5])
     self.assertEqual(dfa.dfa.init_state, 0)
     self.assertEqual(dfa.dfa.finish_states, [5])
     self.assertEqual(dfa.dfa.language, ['a', 'b'])
     self.assertEqual(
         dfa.dfa.transitions,
         [[0, 1, 'a'], [0, 2, 'b'], [2, 1, 'a'], [2, 2, 'b'], [1, 1, 'a'],
          [1, 4, 'b'], [4, 1, 'a'], [4, 5, 'b'], [5, 1, 'a'], [5, 2, 'b']])
 def test_minimize_correct(self):
     nfa = NfaRegex('a?b?(abc)*')
     nfa.build()
     dfa = DfaNfa(nfa.nfa)
     dfa.build()
     dfa.minimize()
     self.assertEqual(dfa.dfa.states, [0, 1, 2, 3, 4, 5])
     self.assertEqual(dfa.dfa.init_state, 0)
     self.assertEqual(dfa.dfa.finish_states, [2, 5])
     self.assertEqual(dfa.dfa.language, ['a', 'b', 'c'])
     self.assertEqual(dfa.dfa.transitions,
                      [[0, 1, 'a'], [1, 1, 'a'], [1, 2, 'b'], [2, 2, 'b'],
                       [2, 3, 'a'], [3, 4, 'b'], [4, 5, 'c'], [5, 3, 'a']])
 def test_minimize_correct_std(self):
     nfa = NfaRegex('(a|b)*abb')
     nfa.build()
     dfa = DfaNfa(nfa.nfa)
     dfa.build()
     dfa.minimize()
     self.assertEqual(dfa.dfa.states, [0, 1, 2, 3])
     self.assertEqual(dfa.dfa.init_state, 0)
     self.assertEqual(dfa.dfa.finish_states, [3])
     self.assertEqual(dfa.dfa.language, ['a', 'b'])
     self.assertEqual(dfa.dfa.transitions,
                      [[0, 0, 'b'], [0, 1, 'a'], [1, 1, 'a'], [1, 2, 'b'],
                       [2, 1, 'a'], [2, 3, 'b'], [3, 0, 'b'], [3, 1, 'a']])