Scopri come testare gli esercizi Factor su Exercism
Quando scarichi un esercizio, Exercism lo salva come cartella autonoma, per esempio ~/exercism/factor/hello-world. Quella cartella contiene una sottocartella con la soluzione e un'altra con il test runner:
hello-world/
├── hello-world/
│ ├── hello-world.factor <- your solution
│ └── hello-world-tests.factor <- the tests
└── exercism-tools/ <- the bundled test runner
Spostati con cd nella cartella principale ed esegui i test con:
factor -roots=. -run=exercism-tools <exercise>
Sostituisci <exercise> con il nome dell'esercizio (lo stesso nome della cartella). Per esempio, per testare hello-world:
cd ~/exercism/factor/hello-world
factor -roots=. -run=exercism-tools hello-world
Esegui il comando dalla cartella principale dell'esercizio, la directory che contiene sia la sottocartella <exercise> sia exercism-tools.
Sono gli stessi test che Exercism esegue quando invii la soluzione, quindi quando passano tutti in locale sei pronto per inviare.
Ogni esercizio parte con un solo test attivo, il primo. I test rimanenti sono bloccati da una riga STOP-HERE nel file <exercise>-tests.factor; il runner ignora tutto ciò che sta sotto.
"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
Fai passare il primo test, poi sposta STOP-HERE più in basso, oltre il test successivo (oppure eliminalo per abilitarli tutti), ed esegui di nuovo i test. Procedi così attraverso il file finché non passano tutti i test.
Quando invii la soluzione, il runner di Exercism ignora STOP-HERE ed esegue tutti i test, quindi assicurati che passino tutti prima di inviare.
Il runner stampa ogni test che ha eseguito ed esce senza aggiungere altro:
Unit Test: { { f } [ 2015 leap-year? ] }
Il runner mostra il test, poi il valore che si aspettava e quello prodotto dal codice:
Unit Test: { { f } [ 2015 leap-year? ] }
--> test failed!
###FAIL_BEGIN###
leap/leap-tests.factor: 5
=== Expected:
f
=== Got:
t
###FAIL_END###
Qui il test ha eseguito 2015 leap-year? e si aspettava f sullo stack, ma ha ottenuto t.
I test si scrivono con unit-test, che prende un array che descrive come dovrebbe apparire lo stack dopo l'esecuzione di una quotation:
{ 3 } [ 1 2 + ] unit-test
Questo esegue [ 1 2 + ] e verifica che lasci 3 sullo stack. Un array vuoto, { }, significa che la quotation deve lasciare lo stack vuoto. La riga description opzionale sopra un test gli dà semplicemente un nome leggibile.
Per maggiori dettagli, consulta la documentazione di Factor sui test unitari.