51 lines
1.4 KiB
Markdown
51 lines
1.4 KiB
Markdown
---
|
|
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. |