Як тестувати вправи з Fortran на Exercism
Кожна вправа містить модульні тести та рецепт збірки CMake. Реалізацію ж пишемо ми. Кожен файл тестів компонується з нашою реалізацією, утворюючи консольний виконуваний файл, який запускає тести. Під час запуску виконуваного файлу тестів для кожного невдалого тесту друкуються повідомлення, а коли тести не проходять, повертається ненульовий статус завершення.
Файл тестів має назву <exercise>_test.f90, тож для вправи
«Bob» файл із тестами називається bob_test.f90. У кожному тесті буде
коментар з описом тесту, а потім і сам тест, який починається з
call assert_equal, наприклад:
! Test 16: non-letters with question
call assert_equal("Sure.", hey(":) ?"), "non-letters with question")
Щоб вимкнути тест, досить закоментувати його за допомогою '!', наприклад:
! Test 16: non-letters with question
! call assert_equal("Sure.", hey(":) ?"), "non-letters with question")
Робота над кожною вправою складається з таких кроків:
Кожна вправа постачається з файлом CMakeLists.txt разом із модульними
тестами. У ньому міститься готовий рецепт CMake, який бере збірку на себе.
Редагувати цей файл, найімовірніше, не доведеться. Готовий рецепт розраховує,
що реалізація міститься у вихідному файлі, названому за назвою вправи.
Наприклад, для вправи «Bob» реалізація має лежати у файлі bob.f90.
Створіть початкові файли реалізації до запуску CMake.
Якщо під час запуску CMake для вправи «Bob» файлу bob.f90 немає, CMake видасть помилку про те, що файлів не знайдено.
Ці файли можуть бути порожніми, але вони мусять існувати.
За допомогою цього рецепта CMake може згенерувати проєкт, придатний для нашого
середовища: достатньо запустити cmake -G з відповідним генератором і вказати
розташування каталогу вправи. CMake згенерує скрипт збірки, що відповідає нашій
операційній системі. Щоб згенеровані файли не змішувалися з вихідним кодом
вправи, зазвичай створюють каталог build, де зберігаються і ці згенеровані
файли збірки, і скомпільований код.
Так папка вправи залишається охайною й не захаращеною.
**Примітка: під час першого виклику cmake testlib завантажиться автоматично. testlib потрібен, щоб модульні тести працювали.
Оскільки для кожного завдання ми запускаємо CMake, щоб створити інструкції збірки, можливо, варто створити bash-скрипт (Linux/MacOS) або командний файл (Windows) для цієї команди.
Коли середовище збірки створено за допомогою CMake, зібрати код можна відповідною командою для нашого середовища:
make
mingw32-make.exe
nmake.exe
Нижче наведено приклади запуску CMake для різних середовищ.
Генератор для CMake називається Unix Makefiles.
Нехай поточна вправа має назву bob, а ми перебуваємо в папці цієї вправи:
$ touch bob.f90
$ mkdir build
$ cd build
$ cmake -G "Unix Makefiles" ..
$ make
Цей приклад показує, як створити порожні файли для реалізації до запуску CMake.
Щоб скомпілювати тести, досить набрати make у каталозі build. Це має
породити помилки часу компіляції. Коли помилки виправлено, запускаємо make знову.
Коли всі помилки збірки виправлено, запускаємо тести:
$ ctest -V
Генератор для CMake називається Visual Studio 15. Той самий генератор
підтримує всі IDE-видання Visual Studio 2017: Community, Professional
та Enterprise. Нехай поточна вправа має назву bob, а ми перебуваємо в папці
цієї вправи:
> copy nul: bob.f90
> mkdir build
> cd build
> cmake -G "Visual Studio 15" ..
Цей приклад показує, як створити порожні файли для реалізації до запуску CMake.
Генератор для CMake називається MinGW Makefiles. Нехай поточна
вправа має назву bob, а ми перебуваємо в папці цієї вправи:
> copy nul: bob.f90
> mkdir build
> cd build
> cmake -G "MinGW Makefiles" ..
Цей приклад показує, як створити порожні файли для реалізації до запуску CMake.
Щоб скомпілювати тести, досить набрати make у каталозі build. Це має
породити помилки часу компіляції. Коли помилки виправлено, запускаємо make знову.
Коли всі помилки збірки виправлено, запускаємо тести:
Генератор для CMake називається Xcode.
Нехай поточна вправа має назву bob, а ми перебуваємо в папці цієї вправи:
$ touch bob.f90
$ mkdir build
$ cd build
$ cmake -G Xcode ..
Цей приклад показує, як створити порожні файли для реалізації до запуску CMake.
Щоб скомпілювати тести, досить набрати make у каталозі build. Це має
породити помилки часу компіляції. Коли помилки виправлено, запускаємо make знову.
Коли всі помилки збірки виправлено, запускаємо тести:
$ ctest -V
Тести залежать від невеликої бібліотеки testlib, яка завантажується з GitHub,
коли збірку вперше налаштовують за допомогою cmake.
Якщо завантаження не вдалося, його можна зробити вручну, наприклад:
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