تعلّم كيفية اختبار تمارين 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.
إذا لم يكن لديك الملف bob.f90 عند تشغيل CMake لتمرين «Bob»، فسيولّد CMake خطأً بشأن عدم العثور على الملفات.
يمكن أن تكون هذه الملفات فارغة، لكن يجب أن تكون موجودة.
باستخدام هذه الوصفة، يستطيع CMake توليد مشروع مناسب لبيئتك عبر تشغيل cmake -G مع مولد مناسب وموقع مجلد التمرين. وسيولّد CMake نص بناء مناسبًا لنظام تشغيلك. ولإبقاء الملفات المولّدة منفصلة عن الكود المصدري لتمرينك، من الشائع إنشاء مجلد باسم build يحتوي على ملفات البناء المولّدة، وكذلك الكود المُترجَم.
سيبقي هذا مجلد تمرينك مرتبًا وخاليًا من الفوضى.
**ملاحظة: في المرة الأولى التي يُستدعى فيها cmake، سيُنزَّل testlib تلقائيًا. وهناك حاجة إلى testlib لكي تعمل اختبارات الوحدة.
بما أنك ستشغّل CMake لإنشاء تعليمات البناء لكل تمرين، فقد ترغب في إنشاء نص برمجي bash (لينكس/ماك) أو ملف دفعي (ويندوز) لهذا الأمر.
بعد أن ينشئ 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 في مجلد البناء لترجمة الاختبارات. وسيولّد هذا أخطاء وقت الترجمة. وبعد إصلاح الأخطاء، شغّل make مرة أخرى.
وعند إصلاح كل أخطاء البناء، شغّل الاختبارات:
$ ctest -V
اسم المولّد لـ CMake هو Visual Studio 15. ويدعم المولّد نفسه كل إصدارات الواجهة الرسومية من 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 في مجلد البناء لترجمة الاختبارات. وسيولّد هذا أخطاء وقت الترجمة. وبعد إصلاح الأخطاء، شغّل make مرة أخرى.
وعند إصلاح كل أخطاء البناء، شغّل الاختبارات:
اسم المولّد لـ CMake هو Xcode.
بافتراض أن التمرين الحالي هو bob وأننا في مجلد التمرين:
$ touch bob.f90
$ mkdir build
$ cd build
$ cmake -G Xcode ..
يوضّح هذا المثال إنشاء ملفات فارغة للتنفيذ قبل تشغيل CMake.
ما عليك سوى كتابة make في مجلد البناء لترجمة الاختبارات. وسيولّد هذا أخطاء وقت الترجمة. وبعد إصلاح الأخطاء، شغّل 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