Création d'un script de test automatique pour le test n°3 + Amélioration du readme.md d'explication

This commit is contained in:
2025-03-01 21:28:01 +01:00
parent c7d0b78e03
commit 85d2cef358
2 changed files with 224 additions and 12 deletions

View File

@@ -1,15 +1,114 @@
# Test 3 : Gestion des dépendances circulaires
# Test 03 - Gestion des dépendances circulaires
## Description
Ce test vérifie que le système de compilation peut détecter et gérer correctement les dépendances circulaires. Il simule un projet où plusieurs fichiers `.c` et `.h` s'incluent mutuellement, créant ainsi une boucle dans les dépendances.
Ce test vérifie le comportement de `bake` comparé à `make` lorsqu'il existe des dépendances circulaires entre les fichiers du projet.
## Fichiers utilisés
- `a.c` : Implémente functionA qui appelle functionB.
- `b.c` : Implémente functionB qui appelle functionC.
- `c.c` : Implémente functionC et inclut a.h, créant une boucle indirecte.
- `a.h`, `b.h`, `c.h` : Fichiers d'en-tête correspondant.
- `Bakefile` : Contient les règles de compilation et les dépendances.
- `bakefile.jar` : Version compilée de notre système de build.
## Sommaire
- [Structure du test](#structure-du-test)
- [Contenu des fichiers de règles](#contenu-des-fichiers-de-règles)
- [Description des dépendances circulaires](#description-des-dépendances-circulaires)
- [Objectif du test](#objectif-du-test)
- [Comment exécuter le test](#comment-exécuter-le-test)
- [Test automatique](#test-automatique)
- [Test manuel](#test-manuel)
- [Résultats attendus](#résultats-attendus)
## Résultat attendu
Si le système de build détecte une dépendance circulaire, il doit la gérer automatiquement en évitant la boucle infinie et en compilant correctement les fichiers.
## Structure du test
```
test-03-circular-dependencies/
├── README.md # Ce fichier
├── bake/
│ ├── Bakefile # Fichier de règles pour bake
│ ├── bakefile.jar # Exécutable de bake (JAR)
│ ├── a.c # Fichier source C
│ ├── a.h # Fichier d'en-tête C
│ ├── b.c # Fichier source C
│ ├── b.h # Fichier d'en-tête C
│ ├── c.c # Fichier source C
│ └── c.h # Fichier d'en-tête C
├── make/
│ ├── Makefile # Fichier de règles pour make
│ ├── a.c # Fichier source C
│ ├── a.h # Fichier d'en-tête C
│ ├── b.c # Fichier source C
│ ├── b.h # Fichier d'en-tête C
│ ├── c.c # Fichier source C
│ └── c.h # Fichier d'en-tête C
└── run_test03.sh # Programme de test automatique
```
## Contenu des fichiers de règles
Les fichiers `Makefile` et `Bakefile` contiennent les mêmes règles :
```makefile
main: a b c
gcc a b c -o main
a: a.c a.h b.h
gcc -Wall -Werror -Wextra -ansi -pedantic -c a.c -o a
b: b.c b.h c.h
gcc -Wall -Werror -Wextra -ansi -pedantic -c b.c -o b
c: c.c c.h a.h
gcc -Wall -Werror -Wextra -ansi -pedantic -c c.c -o c
```
## Description des dépendances circulaires
Ce test comporte des dépendances circulaires entre les fichiers :
- `a` dépend de `b.h`
- `b` dépend de `c.h`
- `c` dépend de `a.h`
Ce qui forme une boucle : a → b → c → a
## Objectif du test
Ce test vérifie que `bake` se comporte comme `make` face à des dépendances circulaires :
1. Vérifier que les deux outils détectent correctement les dépendances entre les fichiers
2. Vérifier que les deux outils construisent correctement les cibles dans un ordre permettant de résoudre les dépendances circulaires
3. Vérifier que tous les fichiers objets et l'exécutable final sont correctement générés
4. Comparer les messages de sortie et les résultats des deux outils
## Comment exécuter le test
### Test automatique
1. Rendez le script de test exécutable :
```
chmod +x run_test03.sh
```
2. Lancez le script de test :
```
./run_test03.sh
```
3. Consultez les résultats affichés dans le terminal et dans le fichier de log généré dans le répertoire `logs/`.
### Test manuel
1. Pour Make :
```
cd make
make
```
2. Pour Bake :
```
cd bake
java -cp bakefile.jar fr.monlouyan.bakefile.Main
```
3. Comparez les deux résultats.
## Résultats attendus
- Les deux outils devraient détecter les dépendances entre les fichiers
- Les deux outils devraient générer correctement tous les fichiers objets (`a`, `b`, `c`) malgré les dépendances circulaires
- Les deux outils devraient générer l'exécutable final `main`
- Les messages de sortie devraient être similaires, indiquant l'ordre dans lequel les cibles sont construites
Ce test vérifie la capacité de bake à gérer les dépendances circulaires.