--- title: "Tests unitaires" weight: 60 --- # Tests unitaires La notion de test est native dans la résolution stellaire et on l'utilise constamment et implicitement. Un test unitaire permet de vérifier le bon comportement d'une constellation. Si on encode une fonction par une constellation, on pourrait la tester face à certaines entrées représentative de son domaine. Testons la constellation d'addition unaire : ``` +add(0 Y Y); -add(X Y Z) +add(s(X) Y s(Z)); +test(X Y R) -add(X Y R) ok(X Y R); @-test(0 0 0); @-test(0 s(0) s(0)); @-test(s(0) 0 s(0)); @-test(s(0) s(0) s(s(0))); @-test(s(s(0)) s(0) s(s(s(0)))); ``` On retrouve un rayon `ok(X Y R)` pour chaque test réussi. Mais que se passe t-il lorsqu'un test échoue ? Il n'apparaît pas car son calcul n'est pas allé jusqu'au bout. On peut justement faire apparaître de telles étoiles avec l'option `-allow-unfinished-computation`. On peut aussi utiliser des variables dans les tests et effectuer des tests *symboliques* : ``` +add(0 Y Y); -add(X Y Z) +add(s(X) Y s(Z)); +test(X Y R) -add(X Y R) ok(X Y R); @-test(0 X X); @-test(s(0) X s(X)); ``` C'est en général insuffisant pour tester qu'une fonction est correcte mais cela apporte déjà une certaine confiance. La résolution stellaire fait vivre programmes et tests dans le même espace (ils sont de même nature), ce qui nous permet des tests plus subtils.