---
title: "Tests unitaires" 
weight: 7
---

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