Projet Informatique Théorique 2016
Instructions et Documentation
test_creer_automate.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 #include "fifo.h"
25 
26 #include <signal.h>
27 #include <errno.h>
28 
29 int test_creer_automate(){
30 
31  int result = 1;
32 
33  Automate * automate = creer_automate();
34 
35  ajouter_lettre( automate, 'a' );
36  ajouter_lettre( automate, 'd' );
37 
38  ajouter_etat( automate, 3 );
39  ajouter_etat_final( automate, 6 );
40 
41  ajouter_transition( automate, 3, 'a', 5 );
42  ajouter_transition( automate, 3, 'b', 3 );
43 
44  ajouter_etat_final( automate, 5 );
45  ajouter_etat_initial( automate, 3 );
46 
47  TEST(
48  1
49  && automate
50  && est_un_etat_de_l_automate( automate, 3)
51  && est_un_etat_de_l_automate( automate, 5)
52  && est_un_etat_de_l_automate( automate, 6)
53  , result
54  );
55  TEST(
56  1
57  && automate
58  && ! est_un_etat_final_de_l_automate( automate, 3)
59  && est_un_etat_final_de_l_automate( automate, 5)
60  && est_un_etat_final_de_l_automate( automate, 6)
61  , result
62  );
63  TEST(
64  1
65  && automate
66  && est_un_etat_initial_de_l_automate( automate, 3)
67  && ! est_un_etat_initial_de_l_automate( automate, 5)
68  , result
69  );
70  TEST(
71  1
72  && automate
73  && est_une_lettre_de_l_automate( automate, 'a')
74  && est_une_lettre_de_l_automate( automate, 'b')
75  && est_une_lettre_de_l_automate( automate, 'd')
76  && ! est_une_lettre_de_l_automate( automate, 'c')
77  , result
78  );
79  TEST(
80  1
81  && automate
82  && est_une_transition_de_l_automate( automate, 3, 'a', 5 )
83  && est_une_transition_de_l_automate( automate, 3, 'b', 3 )
84  && ! est_une_transition_de_l_automate( automate, 3, 'b', 5 )
85  && ! est_une_transition_de_l_automate( automate, 3, 'a', 3 )
86  && ! est_une_transition_de_l_automate( automate, 5, 'a', 3 )
87  && ! est_une_transition_de_l_automate( automate, 5, 'b', 3 )
88  && ! est_une_transition_de_l_automate( automate, 5, 'a', 5 )
89  && ! est_une_transition_de_l_automate( automate, 5, 'b', 5 )
90  , result
91  );
92 
93  const Ensemble* ens = get_initiaux( automate );
94 
95  TEST(
96  1
97  && ens
98  && est_dans_l_ensemble( ens, 3 )
99  && ! est_dans_l_ensemble( ens, 5 )
100  && ! est_dans_l_ensemble( ens, 6 )
101  , result
102  );
103 
104  ens = get_finaux( automate );
105 
106  TEST(
107  1
108  && ens
109  && ! est_dans_l_ensemble( ens, 3 )
110  && est_dans_l_ensemble( ens, 5 )
111  && est_dans_l_ensemble( ens, 6 )
112  , result
113  );
114 
115  ens = get_alphabet( automate );
116 
117  TEST(
118  1
119  && ens
120  && est_dans_l_ensemble( ens, 'a')
121  && est_dans_l_ensemble( ens, 'b')
122  && ! est_dans_l_ensemble( ens, 'c')
123  && est_dans_l_ensemble( ens, 'd')
124  , result
125  );
126 
127 
128  liberer_automate( automate );
129 
130  return result;
131 }
132 
133 
134 int main(){
135 
136  if( ! test_creer_automate() ){ return 1; }
137 
138  return 0;
139 }
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
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
const Ensemble * get_finaux(const Automate *automate)
Renvoie l'ensemble des états finaux d'un automate.
Definition: automate.c:190
const Ensemble * get_initiaux(const Automate *automate)
Renvoie l'ensemble des états intiaux d'un automate.
Definition: automate.c:186
void ajouter_lettre(Automate *automate, char lettre)
Ajoute une lettre à l'alphabet d'un automate passé en paramètre.
Definition: automate.c:202
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
const Ensemble * get_alphabet(const Automate *automate)
Renvoie l'alphabet d'un automate.
Definition: automate.c:194