def test_afw_to_nfa_conversion_language_bis(self): """ Test a correct afw conversion to nfa comparing the language read by the two automaton. Here we take a nfa, we covert it to afw and back to nfa, then the original and final nfa are compared trough the language read. """ original_nfa_to_afw = AFW.nfa_to_afw_conversion( self.nfa_afw_to_nfa_test_01) nfa_01 = AFW.afw_to_nfa_conversion(original_nfa_to_afw) i = 0 last = 7 while i <= last: base = list(itertools.repeat('a', i)) base += list(itertools.repeat('b', i)) # build all permutation of 'a' and 'b' till length i word_set = set(itertools.permutations(base, i)) for word in word_set: word = list(word) # print(word) original_nfa_acceptance = NFA.nfa_word_acceptance( self.nfa_afw_to_nfa_test_01, word) nfa_acceptance = NFA.nfa_word_acceptance(nfa_01, word) self.assertEqual(original_nfa_acceptance, nfa_acceptance) i += 1
def test_afw_to_nfa_conversion_empty_transitions(self): """ Tests a AFW to NFA conversion with a AFW without transitions """ self.afw_afw_to_nfa_test_01['transitions'] = {} nfa_01 = AFW.afw_to_nfa_conversion(self.afw_afw_to_nfa_test_01) result = { 'initial_states': {('s',)}, 'accepting_states': {('s',)}, 'transitions': {}, 'states': {('s',)}, 'alphabet': {'b', 'a'} } self.assertSetEqual(nfa_01['initial_states'], result['initial_states']) self.assertDictEqual(nfa_01['transitions'], result['transitions']) self.assertSetEqual(nfa_01['alphabet'], result['alphabet']) self.assertEqual(len(nfa_01['accepting_states']), len(result['accepting_states'])) self.assertEqual(len(nfa_01['states']), len(result['states']))
def test_afw_to_nfa_conversion_language_bis_bis(self): """ Test a correct afw conversion to nfa comparing the language read by the two automaton """ nfa_01 = AFW.afw_to_nfa_conversion(self.afw_nonemptiness_check_test_2) # automata_IO.nfa_to_dot(nfa_01, 'afw_to_nfa_strange') i = 0 last = 7 while i <= last: base = list(itertools.repeat('a', i)) base += list(itertools.repeat('b', i)) # build all permutation of 'a' and 'b' till length i word_set = set(itertools.permutations(base, i)) for word in word_set: word = list(word) # print(word) afw_acceptance = AFW.afw_word_acceptance( self.afw_nonemptiness_check_test_2, word) nfa_acceptance = NFA.nfa_word_acceptance(nfa_01, word) self.assertEqual(afw_acceptance, nfa_acceptance) i += 1
def test_afw_to_nfa_conversion_side_effects(self): """ Tests the function doesn't make any side effect on the input """ before = copy.deepcopy(self.afw_afw_to_nfa_test_01) AFW.afw_to_nfa_conversion(self.afw_afw_to_nfa_test_01) self.assertDictEqual(before, self.afw_afw_to_nfa_test_01)
def test_afw_to_nfa_conversion_wrong_dict(self): """ Tests the function using an input different from a well formatted dict representing a afw. [EXPECTED FAILURE] """ AFW.afw_to_nfa_conversion({'goofy': 'donald'})
def test_afw_to_nfa_conversion_wrong_input(self): """ Tests the function using an input different from a dict object. [EXPECTED FAILURE] """ AFW.afw_to_nfa_conversion(0)
def test_afw_to_nfa_conversion_empty_states(self): """ Tests a AFW to NFA conversion with an empty AFW """ nfa_01 = AFW.afw_to_nfa_conversion(self.afw_afw_to_nfa_test_empty) self.nfa_empty['initial_states'] = {(None,)} self.nfa_empty['states'] = self.nfa_empty['initial_states'] self.assertDictEqual(nfa_01, self.nfa_empty)