Aprende a probar tus ejercicios de Factor en Exercism
Cuando descargas un ejercicio, Exercism lo guarda como una carpeta independiente, 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 a la carpeta principal y ejecuta las pruebas con:
factor -roots=. -run=exercism-tools <exercise>
Reemplaza <exercise> por el nombre del ejercicio (el mismo nombre 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 carpeta principal del ejercicio, el directorio que contiene tanto la subcarpeta <exercise> como la subcarpeta exercism-tools.
Estas son las mismas pruebas que Exercism ejecuta cuando envías tu solución, así que una vez que todas pasen en tu computadora, ya puedes enviar.
Cada ejercicio empieza con solo su primera prueba activa. El resto de las pruebas quedan retenidas por una línea STOP-HERE en el archivo <exercise>-tests.factor; el ejecutor ignora todo lo que está debajo de ella.
"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
Haz que la primera prueba pase y luego mueve STOP-HERE hacia abajo, más allá de la siguiente prueba (o bórrala para habilitarlas todas), y ejecuta las pruebas de nuevo. Avanza por el archivo de esta manera hasta que todas las pruebas pasen.
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 enviar.
El ejecutor imprime cada prueba que ejecutó y termina en silencio:
Unit Test: { { f } [ 2015 leap-year? ] }
El ejecutor muestra la prueba y luego 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 verifica que deje 3 en la pila. Un array vacío, { }, significa que la quotation debe dejar la pila vacía. La línea description opcional encima de una prueba simplemente le da un nombre legible.
Para más detalles, consulta la documentación de Factor sobre pruebas unitarias.