Aprende a testar os teus exercícios de Fortran no Exercism
Cada exercício fornece os testes unitários e uma receita de compilação do CMake. A implementação é contigo. Cada ficheiro de teste destina-se a ligar-se à tua implementação para produzir um executável de consola que corre os testes. Ao executar o executável de testes, é impressa uma mensagem por cada teste que falha e é reportado um estado de saída diferente de zero quando há testes que falham.
O ficheiro de teste tem o nome <exercise>_test.f90, por isso, para o exercício "Bob", o ficheiro que contém os testes é bob_test.f90. Cada teste tem um comentário que descreve o teste e, a seguir, o teste propriamente dito, que começa por call assert_equal, por exemplo.
! Test 16: non-letters with question
call assert_equal("Sure.", hey(":) ?"), "non-letters with question")
Para desativar um teste, basta comentá-lo com um '!', por exemplo.
! Test 16: non-letters with question
! call assert_equal("Sure.", hey(":) ?"), "non-letters with question")
Trabalhar cada exercício é um processo que passa por:
Cada exercício traz um ficheiro CMakeLists.txt juntamente com os testes unitários. Contém a receita de CMake já pronta que trata da compilação por ti. Não deves precisar de editar este ficheiro. A receita fornecida assume que a tua implementação está num ficheiro de código-fonte com o nome do exercício.
Por exemplo, o exercício "Bob" espera uma implementação no ficheiro bob.f90.
Cria os teus ficheiros de implementação iniciais antes de correr o CMake.
Se não tiveres o ficheiro bob.f90 quando correres o CMake para o exercício "Bob", o CMake vai gerar um erro a dizer que não encontra os ficheiros.
Estes ficheiros podem estar vazios, mas têm de existir.
Com esta receita, o CMake consegue gerar um projeto adequado ao teu ambiente, correndo cmake -G com um gerador adequado e a localização do diretório do exercício. O CMake vai gerar um script de compilação apropriado ao teu sistema operativo. Para manteres esses ficheiros gerados separados do código-fonte do exercício, é comum criar um diretório chamado build para guardar esses ficheiros de compilação gerados, bem como o código compilado.
Assim, a tua pasta do exercício fica limpa e arrumada.
**Nota: Da primeira vez que se chama cmake, o testlib é descarregado automaticamente. O testlib é necessário para que os testes unitários funcionem.
Como vais correr o CMake para criar as instruções de compilação de cada exercício, talvez queiras criar um script bash (Linux/MacOS) ou um ficheiro batch (Windows) para este comando.
Depois de o CMake criar o ambiente de compilação, podes compilar o teu código com o comando adequado ao teu ambiente:
make
mingw32-make.exe
nmake.exe
Abaixo estão exemplos de como correr o CMake em diferentes ambientes.
O nome do gerador para o CMake é Unix Makefiles.
Assumindo que o exercício atual é bob e que estamos na pasta do exercício:
$ touch bob.f90
$ mkdir build
$ cd build
$ cmake -G "Unix Makefiles" ..
$ make
Este exemplo mostra como criar ficheiros vazios para a implementação antes de correr o CMake.
Basta escrever make no diretório build para compilar os testes. Isto deve gerar erros de compilação. Depois de corrigires os erros, corre make outra vez. Quando todos os erros de compilação estiverem corrigidos, corre os testes:
$ ctest -V
O nome do gerador para o CMake é Visual Studio 15. O mesmo gerador suporta todas as edições IDE do Visual Studio 2017: Community, Professional e Enterprise. Assumindo que o exercício atual é bob e que estamos na pasta do exercício:
> copy nul: bob.f90
> mkdir build
> cd build
> cmake -G "Visual Studio 15" ..
Este exemplo mostra como criar ficheiros vazios para a implementação antes de correr o CMake.
O nome do gerador para o CMake é MinGW Makefiles. Assumindo que o exercício atual é bob e que estamos na pasta do exercício:
> copy nul: bob.f90
> mkdir build
> cd build
> cmake -G "MinGW Makefiles" ..
Este exemplo mostra como criar ficheiros vazios para a implementação antes de correr o CMake.
Basta escrever make no diretório build para compilar os testes. Isto deve gerar erros de compilação. Depois de corrigires os erros, corre make outra vez. Quando todos os erros de compilação estiverem corrigidos, corre os testes:
O nome do gerador para o CMake é Xcode.
Assumindo que o exercício atual é bob e que estamos na pasta do exercício:
$ touch bob.f90
$ mkdir build
$ cd build
$ cmake -G Xcode ..
Este exemplo mostra como criar ficheiros vazios para a implementação antes de correr o CMake.
Basta escrever make no diretório build para compilar os testes. Isto deve gerar erros de compilação. Depois de corrigires os erros, corre make outra vez. Quando todos os erros de compilação estiverem corrigidos, corre os testes:
$ ctest -V
Os testes dependem de uma pequena biblioteca chamada testlib, que é descarregada do GitHub da primeira vez que a compilação é configurada com o cmake.
Se o descarregamento falhar, podes fazê-lo manualmente, por exemplo.
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