int test_automate_vide(){ BEGIN_TEST; int result = 1; Automate * automate = creer_automate(); TEST( 1 && ! est_un_etat_de_l_automate( automate, 0) && ! est_un_etat_final_de_l_automate( automate, 0) && ! est_un_etat_initial_de_l_automate( automate, 0) && ! est_une_lettre_de_l_automate( automate, 'a') && ! est_une_transition_de_l_automate( automate, 0, 'a', 0 ) , result ); liberer_automate( automate ); return result; }
int test_transitions_automate( int nb_transitions, const Automate* aut, ... ){ va_list pile; int i; int nb = 0; pour_toute_transition( aut, action_test_transitions_automate, &nb ); if( nb_transitions != nb ){ return 0; } va_start(pile,aut); for (i=0;i<nb_transitions;i++){ int origine = va_arg(pile,int); char lettre = (char) va_arg(pile,int); int fin = va_arg(pile,int); if( ! est_une_transition_de_l_automate( aut, origine, lettre, fin ) ){ return 0; } } va_end(pile); return 1; }
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 ); ajouter_transition( automate, 5, 'b', 3 ); ajouter_transition( automate, 5, 'a', 5 ); ajouter_transition( automate, 5, 'c', 6 ); ajouter_etat_initial( automate, 3 ); ajouter_etat_final( automate, 6 ); TEST( 1 && est_un_etat_de_l_automate( automate, 3 ) && est_un_etat_de_l_automate( automate, 5 ) && est_un_etat_de_l_automate( automate, 6 ) && est_un_etat_initial_de_l_automate( automate, 3 ) && ! est_un_etat_initial_de_l_automate( automate, 5 ) && ! est_un_etat_initial_de_l_automate( automate, 6 ) && ! est_un_etat_final_de_l_automate( automate, 3 ) && ! est_un_etat_final_de_l_automate( automate, 5 ) && est_un_etat_final_de_l_automate( automate, 6 ) && est_une_lettre_de_l_automate( automate, 'a' ) && est_une_lettre_de_l_automate( automate, 'b' ) && est_une_lettre_de_l_automate( automate, 'c' ) && ! est_une_lettre_de_l_automate( automate, 'd' ) && est_une_transition_de_l_automate( automate, 3, 'a', 5 ) && est_une_transition_de_l_automate( automate, 5, 'b', 3 ) && est_une_transition_de_l_automate( automate, 5, 'a', 5 ) && est_une_transition_de_l_automate( automate, 5, 'c', 6 ) && ! est_une_transition_de_l_automate( automate, 3, 'b', 5 ) && ! est_une_transition_de_l_automate( automate, 1, 'b', 5 ) && ! est_une_transition_de_l_automate( automate, 3, 'a', 1 ) , result ); Ensemble * etat_courant = creer_ensemble( NULL, NULL, NULL ); ajouter_element( etat_courant, 3 ); deplacer_ensemble( etat_courant, delta( automate, etat_courant, 'a' ) ); TEST( 1 && est_dans_l_ensemble( etat_courant, 5 ) && taille_ensemble( etat_courant ) ==1 , result ); deplacer_ensemble( etat_courant, delta_star( automate, etat_courant, "ab" ) ); TEST( 1 && est_dans_l_ensemble( etat_courant, 3 ) && taille_ensemble( etat_courant ) ==1 , result ); deplacer_ensemble( etat_courant, delta_star( automate, etat_courant, "ac" ) ); TEST( 1 && est_dans_l_ensemble( etat_courant, 6 ) && taille_ensemble( etat_courant ) ==1 , result ); deplacer_ensemble( etat_courant, delta_star( automate, etat_courant, "" ) ); TEST( 1 && est_dans_l_ensemble( etat_courant, 6 ) && taille_ensemble( etat_courant ) ==1 , result ); deplacer_ensemble( etat_courant, delta_star( automate, etat_courant, "c" ) ); TEST( 1 && taille_ensemble( etat_courant ) == 0 , result ); liberer_ensemble( etat_courant ); liberer_automate( automate ); return result; }
int test_creer_automate(){ BEGIN_TEST; int result = 1; Automate * automate = creer_automate(); ajouter_lettre( automate, 'a' ); ajouter_lettre( automate, 'd' ); ajouter_etat( automate, 3 ); ajouter_etat_final( automate, 6 ); ajouter_transition( automate, 3, 'a', 5 ); ajouter_transition( automate, 3, 'b', 3 ); ajouter_etat_final( automate, 5 ); ajouter_etat_initial( automate, 3 ); TEST( 1 && est_un_etat_de_l_automate( automate, 3) && est_un_etat_de_l_automate( automate, 5) && est_un_etat_de_l_automate( automate, 6) , result ); TEST( 1 && ! est_un_etat_final_de_l_automate( automate, 3) && est_un_etat_final_de_l_automate( automate, 5) && est_un_etat_final_de_l_automate( automate, 6) , result ); TEST( 1 && est_un_etat_initial_de_l_automate( automate, 3) && ! est_un_etat_initial_de_l_automate( automate, 5) , result ); TEST( 1 && est_une_lettre_de_l_automate( automate, 'a') && est_une_lettre_de_l_automate( automate, 'b') && est_une_lettre_de_l_automate( automate, 'd') && ! est_une_lettre_de_l_automate( automate, 'c') , result ); TEST( 1 && est_une_transition_de_l_automate( automate, 3, 'a', 5 ) && est_une_transition_de_l_automate( automate, 3, 'b', 3 ) && ! est_une_transition_de_l_automate( automate, 3, 'b', 5 ) && ! est_une_transition_de_l_automate( automate, 3, 'a', 3 ) && ! est_une_transition_de_l_automate( automate, 5, 'a', 3 ) && ! est_une_transition_de_l_automate( automate, 5, 'b', 3 ) && ! est_une_transition_de_l_automate( automate, 5, 'a', 5 ) && ! est_une_transition_de_l_automate( automate, 5, 'b', 5 ) , result ); const Ensemble* ens = get_initiaux( automate ); TEST( 1 && ens && est_dans_l_ensemble( ens, 3 ) && ! est_dans_l_ensemble( ens, 5 ) && ! est_dans_l_ensemble( ens, 6 ) , result ); ens = get_finaux( automate ); TEST( 1 && ens && ! est_dans_l_ensemble( ens, 3 ) && est_dans_l_ensemble( ens, 5 ) && est_dans_l_ensemble( ens, 6 ) , result ); ens = get_alphabet( automate ); TEST( 1 && ens && est_dans_l_ensemble( ens, 'a') && est_dans_l_ensemble( ens, 'b') && ! est_dans_l_ensemble( ens, 'c') && est_dans_l_ensemble( ens, 'd') , result ); liberer_automate( automate ); return result; }