def testNaUniaoSeAmbosAFTemEstadoInicialFinalOEstadoInicialNovoTbEhFinal(self): afd1 = construirAFDComABOndeAsEhPar() afd2 = construirAFDComABOndeAsEhPar() self.assertTrue(afd1.obterEstadoInicial().ehFinal()) self.assertTrue(afd2.obterEstadoInicial().ehFinal()) afd1Uafd2 = util.unir_af(afd1, afd2) self.assertTrue(afd1Uafd2.obterEstadoInicial().ehFinal())
def testDadaUmaGramaticaRegularSabeQualEhOSeuAFDMinimoCorrespondente(self): afd1 = construirAFDComABOndeAsEhPar() afd2 = util.obter_afd(construirGRComABOndeAsEhPar()) self.assertTrue(util.sao_equivalentes_af(afd1, afd2)) self.assertTrue(afd2.ehDeterministico()) self.assertTrue(afd2.ehMinimo())
def testDadoUmAFDSabeQualSeuComplemento(self): afd1 = construirAFDComABOndeAsEhPar() afd2 = construirComplementoDoAFDComABOndeAsEhPar() complemento = util.obter_complemento_af(afd1) self.assertEqual(afd2.obterEstados(), complemento.obterEstados()) self.assertEqual(afd2.obterEstadosFinais(), complemento.obterEstadosFinais()) self.assertEqual(afd2.obterEstadoInicial(), complemento.obterEstadoInicial())
def testDadoAConcatenacaoDeDoisAFSeOInicialDoSegundoNaoEhFinalOsFinaisDoPrimeiroDeixamDeSerFinais(self): afd1 = construirAFDComABOndeAsEhPar() afd2 = construirAFDComABOndeBsEhImpar() self.assertFalse(afd2.obterEstadoInicial().ehFinal()) afd1afd2 = util.concatenar_af(afd1, afd2) finais_antigos_len = len(afd1.obterEstadosFinais()) + len(afd2.obterEstadosFinais()) self.assertTrue(finais_antigos_len > len(afd1afd2.obterEstadosFinais()))
def testSabeSeNaoReconheceUmaPalavra(self): afd = construirAFDComABOndeAsEhPar() self.assertFalse(afd.reconhecePalavra('babb')) self.assertFalse(afd.reconhecePalavra('abbabba')) self.assertFalse(afd.reconhecePalavra('abaaaa')) self.assertFalse(afd.reconhecePalavra('bbba')) self.assertFalse(afd.reconhecePalavra('abbb'))
def testRobustezDaTransformacaoDaEREmAFD(self): automato = construirAFDComABOndeAsEhPar() exp_reg = ExpressaoRegular("(b*ab*a)*b*") afd_exp = exp_reg.obterAFD() self.assertTrue(util.sao_equivalentes_af(automato, afd_exp)) automato = construirAFDComABOndeBsEhImpar() exp_reg = ExpressaoRegular("a*ba* (a*ba*ba*)*") afd_exp = exp_reg.obterAFD() self.assertTrue(util.sao_equivalentes_af(automato, afd_exp))
def testDadoUmAFAposAplicarFechamentoPositivoNoMesmoOEstadoInicialSohEhFinalSeJaEraFinalAntes(self): afd1 = construirAFDComABOndeBsEhImpar() afd2 = construirAFDComABOndeAsEhPar() self.assertFalse(afd1.obterEstadoInicial().ehFinal()) self.assertTrue(afd2.obterEstadoInicial().ehFinal()) afd_pos1 = util.obter_fechamento_positivo_af(afd1) afd_pos2 = util.obter_fechamento_positivo_af(afd2) self.assertFalse(afd_pos1.obterEstadoInicial().ehFinal()) self.assertTrue(afd_pos2.obterEstadoInicial().ehFinal())
def testDadoUmAFDSabeQualEhASuaGramaticaRegularCorrespondenteQuandoAFDProduzEpsilon(self): gr1 = util.obter_gramatica_regular(construirAFDComABOndeAsEhPar()) afd1 = util.obter_afd(gr1) afd2 = construirAFDComABOndeAsEhPar() self.assertTrue(util.sao_equivalentes_af(afd1, afd2))
def testDadosDoisAFSabeSeElesNaoSaoEquivalentes(self): afd1 = construirAFDComABOndeAsEhPar() afd2 = construirAFDComABOndeBsEhImpar() self.assertFalse(util.sao_equivalentes_af(afd1, afd2))
def testDadosDoisAFSabeSeElesSaoEquivalentes(self): afd1 = construirAFDComABOndeAsEhPar() afd2 = construirEquivalenteDoAFDComABOndeAsEhPar() self.assertTrue(util.sao_equivalentes_af(afd1, afd2))
def testDadosDoisAFSabeSeAF1NaoEstaContidoEmAF2(self): afd1 = construirAFDComABOndeAsEhPar() afd2 = construirAFDComABOndeBsEhImpar() self.assertFalse(util.esta_contido_af(afd1, afd2))
def testDadosDoisAFSabeSeAF1EstaContidoEmAF2(self): afd1 = construirAFDComABOndeAsEhPar() afd2 = construirEquivalenteDoAFDComABOndeAsEhPar() self.assertTrue(util.esta_contido_af(afd1, afd2))
def testDadoUmAFPodeAplicarFechamentoReflexivoNoMesmo(self): afd1 = construirAFDComABOndeAsEhPar() afd_reflex = util.obter_fechamento_reflexivo_af(afd1) self.assertEqual(len(afd_reflex.obterEstados()), len(afd1.obterEstados()) + 1)
def testDadoDoisAFPodeConcatenalos(self): afd1 = construirAFDComABOndeAsEhPar() afd2 = construirAFDComABOndeBsEhImpar() afd1afd2 = util.concatenar_af(afd1, afd2) estados_antigos = len(afd1.obterEstados()) + len(afd2.obterEstados()) self.assertEqual(len(afd1afd2.obterEstados()), estados_antigos)
def testDadoDoisAFPodeUnilos(self): afd1 = construirAFDComABOndeAsEhPar() afd2 = construirAFDComABOndeBsEhImpar() afd1Uafd2 = util.unir_af(afd1, afd2) estados_antigos = len(afd1.obterEstados()) + len(afd2.obterEstados()) self.assertEqual(len(afd1Uafd2.obterEstados()) - 1, estados_antigos)
def testSabeSeReconheceEpsilon(self): afd = construirAFDComABOndeAsEhPar() self.assertTrue(afd.reconhecePalavra(EPSILON))