Exercism-এ আপনার Fortran অনুশীলনীগুলো পরীক্ষা করার পদ্ধতি শিখুন
প্রতিটি অনুশীলনীর সাথে ইউনিট টেস্ট আর একটি 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" অনুশীলনীর জন্য CMake চালানোর সময় যদি 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 টাইপ করে টেস্ট কম্পাইল করুন। এতে কম্পাইল টাইম এরর আসা উচিত। এররগুলো ঠিক করে আবার make চালান। সব বিল্ড এরর ঠিক হয়ে গেলে টেস্ট চালান:
$ ctest -V
CMake-এর জেনারেটরের নাম Visual Studio 15। একই জেনারেটর Visual Studio 2017-এর সব IDE এডিশন সাপোর্ট করে: 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 নামের একটি ছোট লাইব্রেরির উপর নির্ভর করে, যা 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