Aprende a probar tus ejercicios de Factor en Exercism
Cuando descargas un ejercicio, Exercism lo guarda como una carpeta autocontenida, por ejemplo ~/exercism/factor/hello-world. Esa carpeta contiene una subcarpeta con tu solución y otra con el ejecutor de pruebas:
hello-world/
├── hello-world/
│ ├── hello-world.factor <- your solution
│ └── hello-world-tests.factor <- the tests
└── exercism-tools/ <- the bundled test runner
Entra con cd en la parte superior de esa carpeta y ejecuta las pruebas con:
factor -roots=. -run=exercism-tools <exercise>
Sustituye <exercise> por el nombre del ejercicio (el mismo nombre que el de la carpeta). Por ejemplo, para probar hello-world:
cd ~/exercism/factor/hello-world
factor -roots=. -run=exercism-tools hello-world
Ejecuta el comando desde la parte superior de la carpeta del ejercicio: el directorio que contiene tanto la subcarpeta <exercise> como la subcarpeta exercism-tools.
Son las mismas pruebas que ejecuta Exercism cuando envías tu solución, así que, en cuanto todas pasen en local, estarás listo para enviarla.
Cada ejercicio empieza con solo su primera prueba activa. El resto de las pruebas quedan bloqueadas por una línea STOP-HERE en el archivo <exercise>-tests.factor; el ejecutor ignora todo lo que hay debajo.
"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
Consigue que pase la primera prueba y, después, mueve STOP-HERE hacia abajo, pasando la siguiente prueba (o bórrala para activarlas todas), y vuelve a ejecutar las pruebas. Recorre el archivo de esta forma hasta que pasen todas las pruebas.
Cuando envías tu solución, el ejecutor de Exercism ignora STOP-HERE y ejecuta todas las pruebas, así que asegúrate de que todas pasen antes de enviarla.
El ejecutor imprime cada prueba que ha ejecutado y termina sin más:
Unit Test: { { f } [ 2015 leap-year? ] }
El ejecutor muestra la prueba y, a continuación, el valor que esperaba frente al valor que produjo tu código:
Unit Test: { { f } [ 2015 leap-year? ] }
--> test failed!
###FAIL_BEGIN###
leap/leap-tests.factor: 5
=== Expected:
f
=== Got:
t
###FAIL_END###
Aquí la prueba ejecutó 2015 leap-year? y esperaba f en la pila, pero obtuvo t.
Las pruebas se escriben con unit-test, que recibe un array que describe cómo debería quedar la pila después de ejecutar una quotation:
{ 3 } [ 1 2 + ] unit-test
Esto ejecuta [ 1 2 + ] y comprueba que deja 3 en la pila. Un array vacío, { }, significa que la quotation debería dejar la pila vacía. La línea description, que es opcional, va encima de una prueba y simplemente le da un nombre legible.
Para obtener más información, consulta la documentación de Factor sobre las pruebas unitarias.