Quelques explications des tests réalisés sur la forge
Ce fichier donne quelques explications sur les tests automatiques exécutés sur les dépôts à l’intérieur de la forge. La plupart des tests sont censés êtres clairs, mais certains sont un peu plus complexes. Cette page donne les explications nécessaires pour reproduire ces tests dans son propre dépôt.
Tests fonctionnels
Tous les tests fonctionnels sont compilés avec l’option -D
SET__SIZE=1001
, cela même sur les implémentations de taille variable.
Adding consecutive integers in an increasing manner to the brim
Ce test fait les choses suivantes :
-
Le code est compilé avec
-DSET__SIZE=1001
-
Créer un ensemble vide
-
Ajouter les entiers de
0
àSET__SIZE-2
(ici 999) dans cet ensemble. Vérifier à chaque fois que l’ajout n’envoie pas d’erreur (il s’agit effectivement du maximum qu’on peut ajouter sans erreur pour l’implémentationsentinel
) -
Vérifier que la longueur est bien celle attendue à savoir
SET__SIZE-1
(ici 1000)
Adding and remove integers to the brim
Ce test fait les choses suivantes :
-
Le code est compilé avec
-DSET__SIZE=1001
-
Créer un ensemble vide
-
Ajouter les entiers de
0
àSET__SIZE-2
(ici 999) dans cet ensemble. -
Enlever les entiers pairs de
0
àSET__SIZE-2
de cet ensemble. -
Vérifier que la longueur est correcte (ici 500).
-
Ajouter les entiers pairs de
0
àSET__SIZE-2
à cet ensemble. -
Vérifier que la longueur est correcte (ici 1000).
Tests de complexité
Il y a 4 tests de complexité, qui consistent à :
-
Le code est compilé avec
-DSET__SIZE=1001
, -
Créer un ensemble vide
- Et ensuite, selon le test :
- Ajouter les entiers de 0 à 999 dans l’ensemble (
add_in_increasing_order
) - Ajouter les entiers de 999 à 0 dans l’ensemble (
add_in_decreasing_order
)
- Ajouter les entiers de 0 à 999 dans l’ensemble (
-
A cet instant, le tableau contient 1000 éléments
- Ensuite, selon le test :
- Enlever les entiers de 0 à 999 de l’ensemble (
remove_in_increasing_order
) - Enlever les entiers de 999 à 0 de l’ensemble (
remove_in_decreasing_order
)
- Enlever les entiers de 0 à 999 de l’ensemble (
Les valeurs de complexité sont obtenues avec valgrind
--tool=callgrind
qui permet de calculer le nombre exact d’écritures
et de lecture en mémoire effectuées par un programme. Elles sont
ensuite comparées aux valeurs obtenues à travers notre implémentation
de référence, ramenées à la complexité théorique des algorithmes
utilisés pour chaque paire test/implémentation.
Activation et désactivation des tests des implémentations
La forge n’exécute les tests des implémentations que lorsque les
répertoires sentinel
, dynamic
et link
sont trouvés. Comme les
tests peuvent devenir facilement envahissants au cours du projet, il
peut valoir le coup de renommer certains de ces répertoires
temporairement. En faisant cela, on ne traite que les tests d’une
implémentation à la fois. Pour cela, il est recommandé de faire :
git mv dynamic dynamic.moved # Disable tests for dynamic
git mv dynamic.moved dynamic # Re-enable tests for dynamic
FAQ sur les niveaux d’implémentation
Les implémentations évoluent au cours des différents TDs, et les tests sur la forge évoluent aussi. Cela signifie qu’il peut y avoir plus ou moins de tests effectués selon le niveau d’avancement. Il y a en tout 4 niveaux d’implémentation :
-
without * : l’implémentation de départ
-
with * : le constructeur
set__empty
renvoie un pointeur -
generic : les données dans les ensembles sont polymorphes (
void *
) -
object : le type
struct set
inclut les fonctions de copie, comparaison et libération du type polymorphe.