تست در مسیر 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، فایل‌های پیاده‌سازی اولیه‌ی خود را بسازید. اگر هنگام اجرای CMake برای تمرین «Bob» فایل bob.f90 را نداشته باشید، CMake خطایی درباره پیدا نشدن فایل‌ها تولید می‌کند. این فایل‌ها می‌توانند خالی باشند، اما باید وجود داشته باشند.

با استفاده از این دستور، CMake می‌تواند با اجرای cmake -G همراه با یک تولیدکننده‌ی مناسب و مسیر پوشه‌ی تمرین، پروژه‌ای مناسب برای محیط شما تولید کند. CMake یک اسکریپت ساخت مناسب برای سیستم‌عامل شما تولید می‌کند. برای جدا نگه داشتن این فایل‌های تولیدشده از کد منبع تمرین، معمول است که پوشه‌ای به اسم build بسازید تا هم این فایل‌های ساخت تولیدشده و هم کد کامپایل‌شده را در آن نگه دارید.

این کار پوشه‌ی تمرین شما را مرتب و بدون شلوغی نگه می‌دارد.

**توجه: نخستین باری که cmake فراخوانی شود، testlib به‌طور خودکار دانلود می‌شود. برای کار کردن تست‌های واحد، testlib لازم است.

چون برای هر تمرین CMake را اجرا می‌کنید تا دستورهای ساخت را بسازید، ممکن است بخواهید برای این دستور یک اسکریپت bash (Linux/MacOS) یا یک فایل دسته‌ای (Windows) بسازید.

وقتی محیط ساخت توسط CMake ساخته شد، می‌توانید کد خود را با دستور مناسب محیط خود بسازید:

  • Linux با make: make
  • Windows با Visual Studio: از منو گزینه‌ی Build / Build Solution را انتخاب کنید.
  • Windows با MingW: mingw32-make.exe
  • Windows با nMake: nmake.exe
  • MacOS با Xcode: از نوار ابزار گزینه‌ی Build را انتخاب کنید.

نمونه‌هایی از اجرای CMake برای محیط‌های مختلف در ادامه آمده است.

Linux\MacOS با Make

اسم تولیدکننده برای CMake برابر Unix Makefiles است. با فرض اینکه تمرین فعلی bob است و در پوشه‌ی تمرین قرار داریم:

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

این نمونه ساخت فایل‌های خالی برای پیاده‌سازی را پیش از اجرای CMake نشان می‌دهد.

برای کامپایل کردن تست‌ها، کافی است در پوشه‌ی build دستور make را تایپ کنید. این کار باید خطاهای زمان کامپایل را تولید کند. وقتی خطاها برطرف شدند، دوباره make را اجرا کنید. وقتی همه‌ی خطاهای ساخت برطرف شدند، تست‌ها را اجرا کنید:

$ ctest -V

Windows با Visual Studio 2017

اسم تولیدکننده برای 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 نشان می‌دهد.

Windows با MingW

اسم تولیدکننده برای CMake برابر MinGW Makefiles است. با فرض اینکه تمرین فعلی bob است و در پوشه‌ی تمرین قرار داریم:

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

این نمونه ساخت فایل‌های خالی برای پیاده‌سازی را پیش از اجرای CMake نشان می‌دهد.

برای کامپایل کردن تست‌ها، کافی است در پوشه‌ی build دستور make را تایپ کنید. این کار باید خطاهای زمان کامپایل را تولید کند. وقتی خطاها برطرف شدند، دوباره make را اجرا کنید. وقتی همه‌ی خطاهای ساخت برطرف شدند، تست‌ها را اجرا کنید:

MacOS با Xcode

اسم تولیدکننده برای CMake برابر Xcode است. با فرض اینکه تمرین فعلی bob است و در پوشه‌ی تمرین قرار داریم:

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

این نمونه ساخت فایل‌های خالی برای پیاده‌سازی را پیش از اجرای CMake نشان می‌دهد.

برای کامپایل کردن تست‌ها، کافی است در پوشه‌ی build دستور make را تایپ کنید. این کار باید خطاهای زمان کامپایل را تولید کند. وقتی خطاها برطرف شدند، دوباره make را اجرا کنید. وقتی همه‌ی خطاهای ساخت برطرف شدند، تست‌ها را اجرا کنید:

$ ctest -V

Testlib

تست‌ها به کتابخانه‌ای کوچک به اسم testlib وابسته‌اند که نخستین بار که ساخت با cmake پیکربندی می‌شود، از github دانلود می‌شود.

اگر دانلود ناموفق بود، می‌توان آن را به‌صورت دستی انجام داد، مثلاً

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