diff --git a/src/automate.c b/src/automate.c index c0904bc..b7161c5 100644 --- a/src/automate.c +++ b/src/automate.c @@ -298,16 +298,14 @@ Ensemble * delta( Ensemble * delta_star( const Automate* automate, const Ensemble * etats_courants, const char* mot ){ - Ensemble * res = creer_ensemble(NULL, NULL, NULL); Ensemble * fins = copier_ensemble(etats_courants); int i; for(i = 0; i < strlen(mot); i++) { + // deplacer_ensemble(fins, delta(automate, fins, mot[i])); fins = delta(automate, fins, mot[i]); - ajouter_elements(res, fins); } - - return res; + return fins; } void pour_toute_transition( @@ -483,7 +481,6 @@ Automate * mot_to_automate(const char * mot){ * La fonction calcule l'ensemble des états accessibles à partir d'un état donné
* \par * On itère sur les voisins tant qu'il y en a à traiter (permet de traiter les boucles)
- * On considère que les états sont accessibles depuis eux mêmes en lisant epsilon. * @param automate * @param etat * @return @@ -492,8 +489,7 @@ Automate * mot_to_automate(const char * mot){ Ensemble* etats_accessibles( const Automate * automate, int etat ){ Ensemble * res = creer_ensemble(NULL, NULL, NULL); Ensemble * etape = creer_ensemble(NULL, NULL, NULL); - ajouter_element(etape, etat); - ajouter_element(res, etat); + ajouter_element(etape, etat); Ensemble_iterateur it_lettre; Ensemble_iterateur it_etat; @@ -546,6 +542,7 @@ Automate *automate_accessible( const Automate * automate){ ! iterateur_ensemble_est_vide( it_etat ); it_etat = iterateur_suivant_ensemble( it_etat )){ ajouter_elements(etats, etats_accessibles(automate, get_element(it_etat))); + ajouter_element(etats, get_element(it_etat)); } // On détermine les états qui ne sont pas accessibles => ceux qui sont dans get_etats mais pas dans etats diff --git a/src/evaluation.c b/src/evaluation.c index c0b21e3..44a83e5 100644 --- a/src/evaluation.c +++ b/src/evaluation.c @@ -217,15 +217,79 @@ int test_creer_automate(){ return result; } - -int test_delta_delta_star(){ +int test_etats_accessibles() +{ BEGIN_TEST; int result = 1; + Automate* automate = creer_automate(); + ajouter_etat_initial(automate, 1); + ajouter_transition(automate, 1, 'b', 2); + ajouter_transition(automate, 1, 'a', 3); + ajouter_transition(automate, 2, 'a', 1); + ajouter_transition(automate, 2, 'c', 3); + ajouter_transition(automate, 4, 'a', 3); + ajouter_transition(automate, 4, 'b', 5); + ajouter_etat_final(automate, 3); + Ensemble* ens = etats_accessibles(automate, 1); + + TEST( + 1 + && ens + && est_dans_l_ensemble( ens, 1) + && est_dans_l_ensemble( ens, 2) + && ! est_dans_l_ensemble( ens, 4) + && ! est_dans_l_ensemble( ens, 5) + && est_dans_l_ensemble( ens, 3) + , result + ); + + liberer_ensemble(ens); + liberer_automate(automate); + return result; +} + +int test_automate_co_accessible() +{ + BEGIN_TEST; + + int result = 1; Automate* automate = creer_automate(); + ajouter_etat_initial(automate, 1); + ajouter_transition(automate, 1, 'b', 2); + ajouter_transition(automate, 1, 'a', 3); + ajouter_transition(automate, 2, 'a', 1); + ajouter_transition(automate, 2, 'c', 3); + ajouter_transition(automate, 4, 'a', 3); + ajouter_transition(automate, 4, 'b', 5); + ajouter_etat_final(automate, 3); + Automate* automate_co = automate_co_accessible(automate); + const Ensemble* etats = get_etats(automate_co); + TEST( + 1 + && etats + && est_dans_l_ensemble( etats, 1) + && est_dans_l_ensemble( etats, 2) + && est_dans_l_ensemble( etats, 3) + && est_dans_l_ensemble( etats, 4) + && !est_dans_l_ensemble( etats, 5) + , result + ); + + liberer_automate(automate); + liberer_automate(automate_co); + return result; +} +int test_delta_delta_star(){ + BEGIN_TEST; + + int result = 1; + + Automate* automate = creer_automate(); + ajouter_etat( automate, 3 ); ajouter_etat( automate, 5 ); ajouter_transition( automate, 3, 'a', 5 ); @@ -563,6 +627,9 @@ int main(){ // Mot to automate ajouter_test( test_mot_to_automate ); + ajouter_test(test_etats_accessibles); + ajouter_test(test_automate_co_accessible); + set_all_sigactions(); start_or_continue_test(); diff --git a/src/test_automate.c b/src/test_automate.c index bc22e83..b4d2a74 100644 --- a/src/test_automate.c +++ b/src/test_automate.c @@ -124,7 +124,7 @@ int main(){ print_automate(automate_co_accessible(automate2)); liberer_automate(automate2); - + /* Automate* suffixes = creer_automate_des_suffixes(automate2); printf("\n\n\nAutomate des suffixes de Automate2\n"); print_automate(suffixes); @@ -213,6 +213,6 @@ int main(){ Automate* concatenation = creer_automate_de_concatenation(concatenable1, concatenable2); printf("Automate concaténé\n"); - print_automate(concatenation); + print_automate(concatenation);*/ exit(1); }