Exercism-এ আপনার C++ অনুশীলনী কীভাবে টেস্ট করবেন তা জানুন
প্রতিটি অনুশীলনীতে ইউনিট টেস্ট আর একটি CMake বিল্ড রেসিপি দেওয়া থাকে। ইমপ্লিমেন্টেশনটি আপনাকেই দিতে হবে। প্রতিটি টেস্ট ফাইল আপনার ইমপ্লিমেন্টেশনের সাথে লিংক হয়ে এমন একটি কনসোল এক্সিকিউটেবল তৈরি করে, যা টেস্টগুলো চালায়। টেস্ট এক্সিকিউটেবলটি রান করলে প্রতিটি ফেল করা টেস্টের জন্য মেসেজ প্রিন্ট হয়, আর টেস্ট ফেল করলে এটি একটি নন-জিরো এক্সিট স্ট্যাটাস জানায়।
লক্ষ্য করুন: আপনি যখনই আপনার প্রজেক্ট বিল্ড করেন, তখনই আপনার কোড টেস্ট স্যুটের বিপরীতে টেস্ট করা হয়। আপনার কোড যদি এক বা একাধিক টেস্ট পাস না করে কিন্তু বৈধ C++ কোড হয়, তবুও এটি কম্পাইল হবে।
প্রতিটি অনুশীলনী শেষ করা একটি প্রক্রিয়া:
প্রতিটি অনুশীলনীর সাথে ইউনিট টেস্টের পাশাপাশি একটি CMakeLists.txt ফাইল থাকবে। এতে আগে থেকেই তৈরি একটি CMake রেসিপি থাকে, যা আপনার হয়ে বিল্ডটি সামলায়। এই ফাইলটি আপনার সম্পাদনা করার কথা নয়। দেওয়া রেসিপিটি ধরে নেয় যে আপনার ইমপ্লিমেন্টেশন অনুশীলনীর নামে একটি হেডার ফাইল আর একটি সোর্স ফাইল হিসেবে থাকবে।
যেমন, bob অনুশীলনীটি bob.h আর bob.cpp ফাইলে ইমপ্লিমেন্টেশন আশা করে। নামে ড্যাশ থাকা অনুশীলনীগুলোর ক্ষেত্রে সোর্স ফাইলগুলোতে আন্ডারস্কোর ব্যবহার করা ধরে নেওয়া হয়, তাই word-count আশা করে word_count.h আর word_count.cpp। আপনি মনে করতে পারেন যে আপনার ইমপ্লিমেন্টেশন যথেষ্ট সরল, তাই এটি পুরোপুরি হেডারেই থাকতে পারে; সেক্ষেত্রে cpp ফাইলটি বাদ দিতে পারেন।
CMake রান করার আগে আপনার প্রাথমিক ইমপ্লিমেন্টেশন ফাইলগুলো তৈরি করে নিন। bob অনুশীলনীর জন্য CMake রান করার সময় আপনার কাছে bob.h আর bob.cpp ফাইল না থাকলে CMake ফাইল খুঁজে না পাওয়ার একটি এরর দেবে। এই ফাইলগুলো খালি থাকতে পারে, কিন্তু থাকতেই হবে।
এই রেসিপি ব্যবহার করে, উপযুক্ত একটি জেনারেটর আর অনুশীলনীর ডিরেক্টরির অবস্থান দিয়ে cmake -G রান করলে CMake আপনার পরিবেশের জন্য উপযুক্ত একটি প্রজেক্ট তৈরি করতে পারে। CMake আপনার অপারেটিং সিস্টেমের জন্য উপযুক্ত একটি বিল্ড স্ক্রিপ্ট তৈরি করবে। জেনারেট হওয়া ফাইলগুলোকে আপনার অনুশীলনীর সোর্স কোড থেকে আলাদা রাখতে সাধারণত build নামে একটি ডিরেক্টরি তৈরি করা হয়, যেখানে জেনারেট হওয়া বিল্ড ফাইলগুলো আর কম্পাইল হওয়া কোড রাখা হয়। এতে আপনার অনুশীলনীর ফোল্ডারটি গোছানো আর পরিষ্কার থাকে।
CMake একবার বিল্ড এনভায়রনমেন্ট তৈরি করে ফেললে, আপনার পরিবেশের জন্য উপযুক্ত কমান্ড দিয়ে কোডটি বিল্ড করতে পারেন:
make
make exercism CLI অ্যাপ ব্যবহার করলে
বিভিন্ন পরিবেশে CMake রান করার উদাহরণ নিচে দেখানো হলো।
CMake-এর জেনারেটরের নাম Unix Makefiles।
ধরা যাক, চলতি অনুশীলনীটি bob আর আমরা অনুশীলনীর ফোল্ডারে আছি:
$ touch bob.{h,cpp}
$ mkdir build
$ cd build
$ cmake -G "Unix Makefiles" ..
$ make
এই উদাহরণে CMake রান করার আগে ইমপ্লিমেন্টেশনের জন্য খালি ফাইল তৈরি করা দেখানো হয়েছে।
টেস্ট কম্পাইল করতে বিল্ড ডিরেক্টরিতে শুধু make টাইপ করুন। এতে কম্পাইল-টাইম এরর আসা উচিত। এররগুলো ঠিক হয়ে গেলে make টেস্টগুলো বিল্ড করে রান করবে।
Visual Studio-তে CMake প্রজেক্টের নেটিভ সাপোর্ট আছে, তাই CMake আলাদা করে ইনস্টল করার বা Visual Studio-র বাইরে রান করার দরকার হওয়ার কথা নয়। Visual Studio-তে CMake প্রজেক্ট সেটআপ করতে এই গাইডটি অনুসরণ করুন।
CMake-এর জেনারেটরের নাম Xcode।
ধরা যাক, চলতি অনুশীলনীটি bob আর আমরা অনুশীলনীর ফোল্ডারে আছি:
$ touch bob.{h,cpp}
$ mkdir build
$ cd build
$ cmake -G Xcode ..
এই উদাহরণে XCode ফাইলগুলো জেনারেট হয়, যাতে আপনি XCode-এ প্রজেক্টটি খুলতে পারেন। XCode-এ প্রজেক্ট খোলা থাকলে আপনার আরেকটি টার্গেট যোগ করার দরকার হতে পারে। নতুন টার্গেটের জন্য মেনু থেকে File -> New -> Target-এ যান, OS X \ Application \ Command Line Tool -> Next, ভাষা হিসেবে C++ বেছে নিন আর একটি টার্গেট নাম দিন। টার্গেটটি দিয়ে কোডটি রান করুন।
আপনার টার্মিনাল যদি Xcode x.x not supported এরর দেখায়, তাহলে খুব সম্ভবত আপনার মেশিনে Xcode ইনস্টল করা নেই বা আপনার ভার্সনটি পুরনো হয়ে গেছে। App Store থেকে কিংবা এই লিংক থেকে Xcode ডাউনলোড করে ইনস্টল করুন। The CXX compiler identification is unknown-এর মতো এররগুলো GCC ইনস্টল করার নির্দেশাবলি অনুসরণ করে, কিংবা উপরের অনুচ্ছেদ অনুযায়ী Xcode-এ আরেকটি টার্গেট যোগ করে, সম্ভবত সমাধান হয়ে যাবে।
CMake-এর জেনারেটরের নাম Unix Makefiles।
ধরা যাক, চলতি অনুশীলনীটি bob আর আমরা অনুশীলনীর ফোল্ডারে আছি:
$ touch bob.{h,cpp}
$ cmake -G "Unix Makefiles" .
$ exercism test
এই উদাহরণে আমরা CMake রান করার আগে ইমপ্লিমেন্টেশনের জন্য খালি ফাইল তৈরি করি, কিন্তু খালি একটি বিল্ড ডিরেক্টরি তৈরি করি না। কারণ Exercism CLI টেস্ট কেসগুলো পার্স করতে রুট ডিরেক্টরির .exercism/metadata.json ফাইলটি ব্যবহার করে।
টেস্ট কম্পাইল করতে রুট ডিরেক্টরিতে শুধু exercism test টাইপ করুন। এতে কম্পাইল-টাইম এরর আসা উচিত। এররগুলো ঠিক হয়ে গেলে আবার exercism test রান করলে Exercism CLI দিয়ে টেস্টগুলো বিল্ড ও এক্সিকিউট হবে।