الاختبار في مسار Fortran

تعلّم كيفية اختبار تمارين 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")

العمل على كل تمرين هو عملية تتضمن:

  • إنشاء البناء الأولي باستخدام CMake
  • لكل اختبار وحدة:
    • تخلّص من أخطاء الترجمة حتى يفشل الاختبار.
    • نفّذ القدر الكافي فقط ليجتاز الاختبار.
    • أعد هيكلة تنفيذك لتحسين قابلية القراءة وتقليل التكرار وما إلى ذلك.
    • أزل التعليق عن الاختبار التالي

إنشاء البناء الأولي باستخدام CMake

يأتي كل تمرين مع ملف CMakeLists.txt إلى جانب اختبارات الوحدة. ويحتوي هذا الملف على وصفة CMake الجاهزة التي تتولى البناء نيابة عنك. ولا يُفترض أن تحتاج إلى تعديل هذا الملف. وتفترض الوصفة المرفقة أن تنفيذك موجود في ملف مصدري يحمل اسم التمرين.

على سبيل المثال، يتوقع تمرين «Bob» تنفيذًا في الملف bob.f90.

أنشئ ملفات تنفيذك الأولية قبل تشغيل CMake. إذا لم يكن لديك الملف bob.f90 عند تشغيل CMake لتمرين «Bob»، فسيولّد CMake خطأً بشأن عدم العثور على الملفات. يمكن أن تكون هذه الملفات فارغة، لكن يجب أن تكون موجودة.

باستخدام هذه الوصفة، يستطيع CMake توليد مشروع مناسب لبيئتك عبر تشغيل cmake -G مع مولد مناسب وموقع مجلد التمرين. وسيولّد CMake نص بناء مناسبًا لنظام تشغيلك. ولإبقاء الملفات المولّدة منفصلة عن الكود المصدري لتمرينك، من الشائع إنشاء مجلد باسم build يحتوي على ملفات البناء المولّدة، وكذلك الكود المُترجَم.

سيبقي هذا مجلد تمرينك مرتبًا وخاليًا من الفوضى.

**ملاحظة: في المرة الأولى التي يُستدعى فيها cmake، سيُنزَّل testlib تلقائيًا. وهناك حاجة إلى testlib لكي تعمل اختبارات الوحدة.

بما أنك ستشغّل CMake لإنشاء تعليمات البناء لكل تمرين، فقد ترغب في إنشاء نص برمجي bash (لينكس/ماك) أو ملف دفعي (ويندوز) لهذا الأمر.

بعد أن ينشئ CMake بيئة البناء، يمكنك بناء الكود باستخدام الأمر المناسب لبيئتك:

  • لينكس مع make: make
  • ويندوز مع Visual Studio: اختر Build / Build Solution من القائمة.
  • ويندوز مع MingW: mingw32-make.exe
  • ويندوز مع nMake: nmake.exe
  • ماك مع Xcode: اختر Build من شريط الأدوات

فيما يلي أمثلة على تشغيل CMake لبيئات مختلفة.

لينكس\ماك مع Make

اسم المولّد لـ CMake هو Unix Makefiles. بافتراض أن التمرين الحالي هو bob وأننا في مجلد التمرين:

$ touch bob.f90
$ mkdir build
$ cd build
$ cmake -G "Unix Makefiles" ..
$ make

يوضّح هذا المثال إنشاء ملفات فارغة للتنفيذ قبل تشغيل CMake.

ما عليك سوى كتابة make في مجلد البناء لترجمة الاختبارات. وسيولّد هذا أخطاء وقت الترجمة. وبعد إصلاح الأخطاء، شغّل make مرة أخرى. وعند إصلاح كل أخطاء البناء، شغّل الاختبارات:

$ ctest -V

ويندوز مع Visual Studio 2017

اسم المولّد لـ 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.

ويندوز مع MingW

اسم المولّد لـ CMake هو MinGW Makefiles. بافتراض أن التمرين الحالي هو bob وأننا في مجلد التمرين:

> copy nul: bob.f90
> mkdir build
> cd build
> cmake -G "MinGW Makefiles" ..

يوضّح هذا المثال إنشاء ملفات فارغة للتنفيذ قبل تشغيل CMake.

ما عليك سوى كتابة make في مجلد البناء لترجمة الاختبارات. وسيولّد هذا أخطاء وقت الترجمة. وبعد إصلاح الأخطاء، شغّل make مرة أخرى. وعند إصلاح كل أخطاء البناء، شغّل الاختبارات:

ماك مع Xcode

اسم المولّد لـ CMake هو Xcode. بافتراض أن التمرين الحالي هو bob وأننا في مجلد التمرين:

$ touch bob.f90
$ mkdir build
$ cd build
$ cmake -G Xcode ..

يوضّح هذا المثال إنشاء ملفات فارغة للتنفيذ قبل تشغيل CMake.

ما عليك سوى كتابة make في مجلد البناء لترجمة الاختبارات. وسيولّد هذا أخطاء وقت الترجمة. وبعد إصلاح الأخطاء، شغّل make مرة أخرى. وعند إصلاح كل أخطاء البناء، شغّل الاختبارات:

$ ctest -V

Testlib

تعتمد الاختبارات على مكتبة صغيرة تُسمى 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