Apprends à tester tes exercices Factor sur Exercism
Quand tu télécharges un exercice, Exercism l'enregistre dans un dossier autonome, par exemple ~/exercism/factor/hello-world. Ce dossier contient un sous-dossier avec ta solution et un autre avec l'exécuteur de tests :
hello-world/
├── hello-world/
│ ├── hello-world.factor <- your solution
│ └── hello-world-tests.factor <- the tests
└── exercism-tools/ <- the bundled test runner
Place-toi à la racine de ce dossier avec cd, puis lance les tests avec :
factor -roots=. -run=exercism-tools <exercise>
Remplace <exercise> par le nom de l'exercice (le même nom que celui du dossier). Par exemple, pour tester hello-world :
cd ~/exercism/factor/hello-world
factor -roots=. -run=exercism-tools hello-world
Lance la commande depuis la racine du dossier de l'exercice, c'est-à-dire le répertoire qui contient à la fois les sous-dossiers <exercise> et exercism-tools.
Ce sont les mêmes tests qu'Exercism exécute au moment de la soumission, donc dès qu'ils réussissent tous en local, tu peux soumettre.
Chaque exercice démarre avec seulement son premier test actif. Les autres tests sont bloqués par une ligne STOP-HERE dans le fichier <exercise>-tests.factor ; l'exécuteur ignore tout ce qui se trouve en dessous.
"year not divisible by 4 in common year" description
{ f } [ 2015 leap-year? ] unit-test
STOP-HERE
"year divisible by 2, not divisible by 4 in common year" description
{ f } [ 1970 leap-year? ] unit-test
Fais passer le premier test, puis déplace STOP-HERE plus bas, après le test suivant (ou supprime-la pour les activer tous), et relance les tests. Avance ainsi dans le fichier jusqu'à ce que tous les tests réussissent.
Au moment de la soumission, l'exécuteur d'Exercism ignore STOP-HERE et lance tous les tests : assure-toi donc qu'ils réussissent tous avant de soumettre.
L'exécuteur affiche chaque test qu'il a lancé, puis se termine sans rien signaler :
Unit Test: { { f } [ 2015 leap-year? ] }
L'exécuteur affiche le test, puis la valeur attendue face à la valeur produite par ton code :
Unit Test: { { f } [ 2015 leap-year? ] }
--> test failed!
###FAIL_BEGIN###
leap/leap-tests.factor: 5
=== Expected:
f
=== Got:
t
###FAIL_END###
Ici, le test a exécuté 2015 leap-year? et attendait f sur la pile, mais il a obtenu t.
Les tests s'écrivent avec unit-test, qui prend un tableau décrivant l'état de la pile après l'exécution d'une quotation :
{ 3 } [ 1 2 + ] unit-test
On exécute ici [ 1 2 + ] et on vérifie que 3 se retrouve sur la pile. Un tableau vide, { }, signifie que la quotation doit laisser la pile vide. La ligne description facultative au-dessus d'un test lui donne simplement un nom lisible.
Pour plus de détails, consulte la documentation de Factor sur les tests unitaires.