Projet Informatique Théorique 2016
Instructions et Documentation
test_delta_delta_star.c
1 /*
2  * Ce fichier fait partie d'un projet de programmation donné en Licence 3
3  * à l'Université de Bordeaux
4  *
5  * Copyright (C) 2015 Adrien Boussicault
6  *
7  * This Library is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation, either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This Library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this Library. If not, see <http://www.gnu.org/licenses/>.
19  */
20 
21 
22 #include "automate.h"
23 #include "outils.h"
24 
25 
26 int test_delta_delta_star(){
27 
28  int result = 1;
29 
30  Automate* automate = creer_automate();
31 
32 
33  ajouter_etat( automate, 3 );
34  ajouter_etat( automate, 5 );
35  ajouter_transition( automate, 3, 'a', 5 );
36  ajouter_transition( automate, 5, 'b', 3 );
37  ajouter_transition( automate, 5, 'a', 5 );
38  ajouter_transition( automate, 5, 'c', 6 );
39  ajouter_etat_initial( automate, 3 );
40  ajouter_etat_final( automate, 6 );
41 
42  TEST(
43  1
44  && automate
45  && est_un_etat_de_l_automate( automate, 3 )
46  && est_un_etat_de_l_automate( automate, 5 )
47  && est_un_etat_de_l_automate( automate, 6 )
48 
49  && est_un_etat_initial_de_l_automate( automate, 3 )
50  && ! est_un_etat_initial_de_l_automate( automate, 5 )
51  && ! est_un_etat_initial_de_l_automate( automate, 6 )
52 
53  && ! est_un_etat_final_de_l_automate( automate, 3 )
54  && ! est_un_etat_final_de_l_automate( automate, 5 )
55  && est_un_etat_final_de_l_automate( automate, 6 )
56 
57  && est_une_lettre_de_l_automate( automate, 'a' )
58  && est_une_lettre_de_l_automate( automate, 'b' )
59  && est_une_lettre_de_l_automate( automate, 'c' )
60  && ! est_une_lettre_de_l_automate( automate, 'd' )
61 
62  && est_une_transition_de_l_automate( automate, 3, 'a', 5 )
63  && est_une_transition_de_l_automate( automate, 5, 'b', 3 )
64  && est_une_transition_de_l_automate( automate, 5, 'a', 5 )
65  && est_une_transition_de_l_automate( automate, 5, 'c', 6 )
66 
67  && ! est_une_transition_de_l_automate( automate, 3, 'b', 5 )
68  && ! est_une_transition_de_l_automate( automate, 1, 'b', 5 )
69  && ! est_une_transition_de_l_automate( automate, 3, 'a', 1 )
70  , result
71  );
72 
73  Ensemble * etat_courant = creer_ensemble( NULL, NULL, NULL );
74  ajouter_element( etat_courant, 3 );
75 
76  deplacer_ensemble( etat_courant, delta( automate, etat_courant, 'a' ) );
77 
78  TEST(
79  1
80  && etat_courant
81  && est_dans_l_ensemble( etat_courant, 5 )
82  && taille_ensemble( etat_courant ) ==1
83  , result
84  );
85 
86  deplacer_ensemble(
87  etat_courant, delta_star( automate, etat_courant, "ab" )
88  );
89 
90  TEST(
91  1
92  && etat_courant
93  && est_dans_l_ensemble( etat_courant, 3 )
94  && taille_ensemble( etat_courant ) ==1
95  , result
96  );
97 
98  deplacer_ensemble(
99  etat_courant, delta_star( automate, etat_courant, "ac" )
100  );
101 
102  TEST(
103  1
104  && etat_courant
105  && est_dans_l_ensemble( etat_courant, 6 )
106  && taille_ensemble( etat_courant ) ==1
107  , result
108  );
109 
110  deplacer_ensemble(
111  etat_courant, delta_star( automate, etat_courant, "" )
112  );
113 
114  TEST(
115  1
116  && etat_courant
117  && est_dans_l_ensemble( etat_courant, 6 )
118  && taille_ensemble( etat_courant ) ==1
119  , result
120  );
121 
122  deplacer_ensemble(
123  etat_courant, delta_star( automate, etat_courant, "c" )
124  );
125 
126  TEST(
127  1
128  && etat_courant
129  && taille_ensemble( etat_courant ) == 0
130  , result
131  );
132 
133  liberer_ensemble( etat_courant );
134  liberer_automate( automate );
135 
136  return result;
137 }
138 
139 
140 int main(){
141 
142  if( ! test_delta_delta_star() ){ return 1; }
143 
144  return 0;
145 }
Le type d'un automate.
Definition: automate.h:39
void liberer_automate(Automate *automate)
Détruit un automate.
Definition: automate.c:168
int est_une_transition_de_l_automate(const Automate *automate, int origine, char lettre, int fin)
Renvoie 1 si ('origine', 'lettre', 'fin') est une transition de l'automate et 0 sinon.
Definition: automate.c:392
Ensemble * delta_star(const Automate *automate, const Ensemble *etats_courants, const char *mot)
Renvoie l'ensemble des états accessibles à partir d'un ensemble d'états donné en paramètre et en lisa...
Definition: automate.c:279
Ensemble * delta(const Automate *automate, const Ensemble *etats_courants, char lettre)
Renvoie l'ensemble des états accéssibles à partir d'un ensemble d'états donné en paramètre et en lisa...
Definition: automate.c:259
int est_un_etat_initial_de_l_automate(const Automate *automate, int etat)
Renvoie 1 si ('etat') est un état initial de l'automate et 0 sinon.
Definition: automate.c:403
int est_une_lettre_de_l_automate(const Automate *automate, char lettre)
Renvoie 1 si ('etat') est une lettre de l'automate et 0 sinon.
Definition: automate.c:411
int est_un_etat_de_l_automate(const Automate *automate, int etat)
Renvoie 1 si ('etat') est un état de l'automate et 0 sinon.
Definition: automate.c:399
void ajouter_etat(Automate *automate, int etat)
Ajoute un état à un automate passé en paramètre.
Definition: automate.c:198
void ajouter_transition(Automate *automate, int origine, char lettre, int fin)
Ajoute une transition à l'automate passé en paramètre.
Definition: automate.c:206
int est_un_etat_final_de_l_automate(const Automate *automate, int etat)
Renvoie 1 si ('etat') est un état final initial de l'automate et 0 sinon.
Definition: automate.c:407
Automate * creer_automate()
Crée un automate vide, sans états, sans lettres et sans transitions.
Definition: automate.c:91
void ajouter_etat_final(Automate *automate, int etat_final)
Ajoute un état final à un automate passé en paramètre.
Definition: automate.c:226
void ajouter_etat_initial(Automate *automate, int etat_initial)
Ajoute un état initial à un automate passé en paramètre.
Definition: automate.c:233