Ejemplo n.º 1
0
 def test_next_closure(self):
     nfa = build_test_nfa()
     self.assertEqual(epsilon_closure(nfa, next_set(nfa, {1, 2, 3, 4, 6, 9}, nfa.classifier.classify('a'))), set())
     self.assertEqual(epsilon_closure(nfa, next_set(nfa, {1, 2, 3, 4, 6, 9}, nfa.classifier.classify('b'))),
                      {5, 8, 9, 3, 4, 6})
     self.assertEqual(epsilon_closure(nfa, next_set(nfa, {1, 2, 3, 4, 6, 9}, nfa.classifier.classify('c'))),
                      {7, 8, 9, 3, 4, 6})
Ejemplo n.º 2
0
 def test_copy(self):
     nfa = build_test_nfa()
     copy_nfa = nfa.copy()
     self.assertEqual(copy_nfa.trans_matrix, nfa.trans_matrix)
     self.assertEqual(copy_nfa.starting_state, nfa.starting_state)
     self.assertEqual(copy_nfa.accepting_states, nfa.accepting_states)
     self.assertEqual(copy_nfa.alphabet, nfa.alphabet)
     copy_nfa.add_state(42)
     copy_nfa.add_state(1337)
     copy_nfa.add_transition(1, 1337, 'leet')
     copy_nfa.mark_starting(42)
     copy_nfa.mark_accepting(1337, 404)
     self.assertEqual(nfa.trans_matrix[1]['leet'], set())
     self.assertFalse(42 in nfa.trans_matrix)
     self.assertEqual(nfa.starting_state, 0)
     self.assertFalse(1337 in nfa.accepting_states)
     self.assertFalse('leet' in nfa.alphabet)
Ejemplo n.º 3
0
 def test_subset_cons(self):
     nfa = build_test_nfa()
     trans_matrix, starting_state, accepting_states = subset_cons(nfa, {1: CategoryInfo('dummy', 0)})
     d0 = frozenset({0})
     d1 = frozenset({1, 2, 3, 4, 6, 9})
     d2 = frozenset({5, 8, 9, 3, 4, 6})
     d3 = frozenset({7, 8, 9, 3, 4, 6})
     self.assertEqual(trans_matrix,
                      {d0: {1: d1},
                       d1: {2: d2,
                            3: d3},
                       d2: {2: d2,
                            3: d3},
                       d3: {2: d2,
                            3: d3}})
     self.assertEqual(starting_state, d0)
     self.assertEqual(accepting_states, {d1: 1,
                                         d2: 1,
                                         d3: 1})
Ejemplo n.º 4
0
 def test_next_set(self):
     nfa = build_test_nfa()
     self.assertEqual(set(), next_set(nfa, {1, 2, 3, 4, 6, 9}, nfa.classifier.classify('a')))
     self.assertEqual({5}, next_set(nfa, {1, 2, 3, 4, 6, 9}, nfa.classifier.classify('b')))
     self.assertEqual({7}, next_set(nfa, {1, 2, 3, 4, 6, 9}, nfa.classifier.classify('c')))
Ejemplo n.º 5
0
 def test_nfa_to_dfa(self):
     nfa = build_test_nfa()
     dfa = nfa_to_dfa(nfa, {1: CategoryInfo('dummy', 0)})
     draw_dfa(dfa, 'nfa_to_dfa')
Ejemplo n.º 6
0
 def test_eps_closure(self):
     nfa = build_test_nfa()
     self.assertEqual(epsilon_closure(nfa, {0}), {0})
     self.assertEqual({1, 2, 3, 4, 6, 9}, epsilon_closure(nfa, nfa.trans_matrix[0][nfa.classifier.classify('a')]))
     self.assertEqual(set(), epsilon_closure(nfa, nfa.trans_matrix[0][nfa.classifier.classify('b')]))
     self.assertEqual(set(), epsilon_closure(nfa, nfa.trans_matrix[0]['c']))
Ejemplo n.º 7
0
 def test_alt(self):
     nfa1 = build_nfa1()
     nfa2 = build_test_nfa()
     alt_nfa = alt([nfa1, nfa2])
     draw_nfa(alt_nfa, 'alt_nfa')
Ejemplo n.º 8
0
 def test_cat(self):
     nfa1 = build_nfa1()
     nfa2 = build_test_nfa()
     cat_nfa = cat([nfa1, nfa2])
     draw_nfa(cat_nfa, 'cat_nfa')