# Test 03 - Gestion des dépendances circulaires

Ce test vérifie le comportement de `bake` comparé à `make` lorsqu'il existe des dépendances circulaires entre les fichiers du projet.

## 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)

## Structure du test

```
test-03-circular/
├── 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.