Aprende a probar tus ejercicios de Fortran en Exercism
Cada ejercicio incluye los tests unitarios y una receta de compilación de CMake. Tú te encargas de la implementación. Cada fichero de tests debe enlazarse con tu implementación para producir un ejecutable de consola que ejecute los tests. Al ejecutar el ejecutable de tests, se imprimen mensajes para cada test que falla y se informa de un estado de salida distinto de cero cuando fallan los tests.
El fichero de tests tendrá el nombre <exercise>_test.f90, así que, para el ejercicio «Bob», el fichero que contiene los tests es bob_test.f90. Cada test tendrá un comentario que lo describe y, a continuación, el test propiamente dicho, que empieza por call assert_equal. Por ejemplo:
! Test 16: non-letters with question
call assert_equal("Sure.", hey(":) ?"), "non-letters with question")
Para desactivar un test, basta con comentarlo con un '!'. Por ejemplo:
! Test 16: non-letters with question
! call assert_equal("Sure.", hey(":) ?"), "non-letters with question")
Trabajar cada ejercicio es un proceso que consiste en:
Cada ejercicio incluirá un fichero CMakeLists.txt junto con los tests unitarios. Contiene la receta predefinida de CMake que se encarga de la compilación por ti. No deberías necesitar editar este fichero. La receta proporcionada da por hecho que tu implementación está en un fichero de código fuente con el nombre del ejercicio.
Por ejemplo, el ejercicio «Bob» espera una implementación en el fichero bob.f90.
Crea los ficheros de tu implementación inicial antes de ejecutar CMake.
Si no tienes el fichero bob.f90 cuando ejecutas CMake para el ejercicio «Bob», CMake generará un error indicando que no se encuentran los ficheros.
Estos ficheros pueden estar vacíos, pero deben existir.
Con esta receta, CMake puede generar un proyecto adecuado para tu entorno ejecutando cmake -G con un generador adecuado y la ubicación del directorio del ejercicio. CMake generará un script de compilación apropiado para tu sistema operativo. Para mantener esos ficheros generados separados del código fuente de tu ejercicio, es habitual crear un directorio llamado build que contenga tanto los ficheros de compilación generados como el código compilado.
Así mantendrás la carpeta de tu ejercicio ordenada y despejada.
**Nota: la primera vez que se llama a cmake, se descargará testlib automáticamente. Se necesita testlib para que funcionen los tests unitarios.
Como vas a ejecutar CMake para crear las instrucciones de compilación de cada tarea, quizá te venga bien crear un script de bash (Linux/MacOS) o un archivo por lotes (Windows) para este comando.
Una vez que CMake haya creado el entorno de compilación, puedes compilar tu código con el comando adecuado para tu entorno:
make
mingw32-make.exe
nmake.exe
A continuación se muestran ejemplos de cómo ejecutar CMake en distintos entornos.
El nombre del generador para CMake es Unix Makefiles.
Suponiendo que el ejercicio actual es bob y que estamos en la carpeta del ejercicio:
$ touch bob.f90
$ mkdir build
$ cd build
$ cmake -G "Unix Makefiles" ..
$ make
Este ejemplo muestra cómo crear ficheros vacíos para la implementación antes de ejecutar CMake.
Basta con escribir make en el directorio build para compilar los tests. Esto debería generar errores en tiempo de compilación. Una vez corregidos los errores, ejecuta make de nuevo. Cuando hayas corregido todos los errores de compilación, ejecuta los tests:
$ ctest -V
El nombre del generador para CMake es Visual Studio 15. El mismo generador es compatible con todas las ediciones IDE de Visual Studio 2017: Community, Professional y Enterprise. Suponiendo que el ejercicio actual es bob y que estamos en la carpeta del ejercicio:
> copy nul: bob.f90
> mkdir build
> cd build
> cmake -G "Visual Studio 15" ..
Este ejemplo muestra cómo crear ficheros vacíos para la implementación antes de ejecutar CMake.
El nombre del generador para CMake es MinGW Makefiles. Suponiendo que el ejercicio actual es bob y que estamos en la carpeta del ejercicio:
> copy nul: bob.f90
> mkdir build
> cd build
> cmake -G "MinGW Makefiles" ..
Este ejemplo muestra cómo crear ficheros vacíos para la implementación antes de ejecutar CMake.
Basta con escribir make en el directorio build para compilar los tests. Esto debería generar errores en tiempo de compilación. Una vez corregidos los errores, ejecuta make de nuevo. Cuando hayas corregido todos los errores de compilación, ejecuta los tests:
El nombre del generador para CMake es Xcode.
Suponiendo que el ejercicio actual es bob y que estamos en la carpeta del ejercicio:
$ touch bob.f90
$ mkdir build
$ cd build
$ cmake -G Xcode ..
Este ejemplo muestra cómo crear ficheros vacíos para la implementación antes de ejecutar CMake.
Basta con escribir make en el directorio build para compilar los tests. Esto debería generar errores en tiempo de compilación. Una vez corregidos los errores, ejecuta make de nuevo. Cuando hayas corregido todos los errores de compilación, ejecuta los tests:
$ ctest -V
Los tests dependen de una pequeña biblioteca llamada testlib, que se descarga de GitHub la primera vez que se configura la compilación con CMake.
Si la descarga falla, se puede hacer manualmente. Por ejemplo:
mkdir testlib
cd testlib
wget https://raw.githubusercontent.com/exercism/fortran/master/testlib/CMakeLists.txt
wget https://raw.githubusercontent.com/exercism/fortran/master/testlib/TesterMain.f90