def test_minimization(self): """ Tests the minimization algorithm """ enfa = get_enfa_example0_bis() symb_a = Symbol("a") symb_b = Symbol("b") enfa = enfa.minimize() self.assertTrue(enfa.is_deterministic()) self.assertEqual(len(enfa.states), 2) self.assertTrue(enfa.accepts([symb_a, symb_b])) self.assertTrue(enfa.accepts([symb_a, symb_a, symb_b])) self.assertTrue(enfa.accepts([symb_b])) self.assertFalse(enfa.accepts([symb_a])) enfa = get_example_non_minimal() enfa = enfa.minimize() self.assertTrue(enfa.is_deterministic()) self.assertEqual(len(enfa.states), 3) self.assertTrue(enfa.accepts([symb_a, symb_b])) self.assertTrue(enfa.accepts([symb_a, symb_a, symb_b])) self.assertFalse(enfa.accepts([symb_b])) self.assertFalse(enfa.accepts([symb_a])) enfa = EpsilonNFA() enfa = enfa.minimize() self.assertTrue(enfa.is_deterministic()) self.assertEqual(len(enfa.states), 0) self.assertFalse(enfa.accepts([]))
def test_eclose(self): """ Test of the epsilon closure """ states = [State(x) for x in range(8)] epsilon = Epsilon() symb_a = Symbol("a") symb_b = Symbol("b") enfa = EpsilonNFA() enfa.add_transition(states[1], epsilon, states[2]) enfa.add_transition(states[1], epsilon, states[4]) enfa.add_transition(states[2], epsilon, states[3]) enfa.add_transition(states[3], epsilon, states[6]) enfa.add_transition(states[5], epsilon, states[7]) enfa.add_transition(states[4], symb_a, states[5]) enfa.add_transition(states[5], symb_b, states[6]) self.assertEqual(len(enfa.eclose(states[1])), 5) self.assertEqual(len(enfa.eclose(states[2])), 3) self.assertEqual(len(enfa.eclose(states[5])), 2) self.assertEqual(len(enfa.eclose(states[6])), 1) self.assertEqual(len(list(enfa._transition_function.get_edges())), 7) self.assertEqual(enfa.remove_transition(states[1], epsilon, states[4]), 1) self.assertFalse(enfa.is_deterministic())