Factor ট্র্যাকে টেস্ট করা

Exercism-এ নিজের Factor অনুশীলনীগুলো টেস্ট করার উপায় শিখুন


আপনি যখন একটি অনুশীলনী ডাউনলোড করেন, Exercism সেটি একটি স্বয়ংসম্পূর্ণ ফোল্ডার হিসেবে সেভ করে, যেমন ~/exercism/factor/hello-world. সেই ফোল্ডারের ভেতরে একটি সাব-ফোল্ডারে আপনার সলিউশন থাকে, আর আরেকটিতে থাকে টেস্ট রানার:

hello-world/
├── hello-world/
│   ├── hello-world.factor        <- your solution
│   └── hello-world-tests.factor  <- the tests
└── exercism-tools/               <- the bundled test runner

সেই ফোল্ডারের একেবারে উপরের স্তরে cd করে নিচের কমান্ড দিয়ে টেস্ট চালান:

factor -roots=. -run=exercism-tools <exercise>

<exercise> অংশটির জায়গায় অনুশীলনীর নামটি বসান (ফোল্ডারের নামটিই)। যেমন hello-world টেস্ট করতে:

cd ~/exercism/factor/hello-world
factor -roots=. -run=exercism-tools hello-world

কমান্ডটি অনুশীলনী ফোল্ডারের একেবারে উপরের স্তর থেকে চালান; অর্থাৎ যে ডিরেক্টরিতে <exercise> আর exercism-tools দুটি সাব-ফোল্ডারই থাকে।

আপনি সাবমিট করলে Exercism যে টেস্টগুলো চালায়, এগুলো ঠিক সেগুলোই। তাই স্থানীয়ভাবে সবগুলো পাস হয়ে গেলে আপনি সাবমিট করার জন্য প্রস্তুত।

একবারে একটি করে টেস্ট

প্রতিটি অনুশীলনীর শুরুতে শুধু তার প্রথম টেস্টটি চালু থাকে। বাকি টেস্টগুলো <exercise>-tests.factor ফাইলের একটি STOP-HERE লাইন দিয়ে আটকে রাখা হয়; রানার তার নিচের সবকিছু উপেক্ষা করে।

"year not divisible by 4 in common year" description
{ f } [ 2015 leap-year? ] unit-test

STOP-HERE

"year divisible by 2, not divisible by 4 in common year" description
{ f } [ 1970 leap-year? ] unit-test

প্রথম টেস্টটি পাস করান, তারপর STOP-HERE লাইনটি পরের টেস্টের নিচে সরিয়ে দিন (অথবা সবগুলো চালু করতে সেটি মুছে দিন) এবং আবার টেস্টগুলো চালান। এভাবে ফাইলটি ধরে এগোতে থাকুন, যতক্ষণ না প্রতিটি টেস্ট পাস করে।

আপনি সাবমিট করলে Exercism-এর রানার STOP-HERE উপেক্ষা করে এবং প্রতিটি টেস্ট চালায়, তাই সাবমিট করার আগে নিশ্চিত হয়ে নিন যে সবগুলো পাস করছে।

টেস্ট পাস হলে

রানার তার চালানো প্রতিটি টেস্ট প্রিন্ট করে আর চুপচাপ বন্ধ হয়ে যায়:

Unit Test: { { f } [ 2015 leap-year? ] }

টেস্ট ফেল করলে

রানার টেস্টটি দেখায়, তারপর কী মান প্রত্যাশা করা হয়েছিল আর আপনার কোড কী মান তৈরি করেছে, দুটোই দেখায়:

Unit Test: { { f } [ 2015 leap-year? ] }
--> test failed!
###FAIL_BEGIN###
leap/leap-tests.factor: 5
=== Expected:
f
=== Got:
t
###FAIL_END###

এখানে টেস্টটি 2015 leap-year? চালিয়েছিল এবং স্ট্যাকে f আশা করেছিল, কিন্তু পেয়েছিল t.

একটি টেস্ট পড়া

টেস্টগুলো unit-test দিয়ে লেখা হয়; এটি এমন একটি অ্যারে নেয় যাতে বর্ণনা থাকে, কোটেশন চালানোর পরে স্ট্যাক কেমন দেখতে হওয়া উচিত:

{ 3 } [ 1 2 + ] unit-test

এটি [ 1 2 + ] চালায় এবং যাচাই করে যে এটি স্ট্যাকে 3 রেখে যায়। একটি খালি অ্যারে, { }, মানে কোটেশনটি চালানোর পরে স্ট্যাক খালি থাকা উচিত। টেস্টের উপরে থাকা ঐচ্ছিক description লাইনটি শুধু টেস্টটিকে একটি পাঠযোগ্য নাম দেয়।

আরও বিস্তারিত জানতে Factor-এর ডকুমেন্টেশনে ইউনিট টেস্টিং অংশটি দেখুন।