Probar código en la pista de Factor

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.

Una prueba a la vez

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.

Cuando las pruebas pasan

El ejecutor imprime cada prueba que ha ejecutado y termina sin más:

Unit Test: { { f } [ 2015 leap-year? ] }

Cuando una prueba falla

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.

Leer una prueba

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.