Exercism-এ আপনার Unison অনুশীলনীগুলো কীভাবে টেস্ট করবেন, তা শিখুন।
Unison কোডবেস ম্যানেজার (UCM) হলো সেই টুল, যা Unison প্রোগ্রামিং ভাষা রান করে এবং আপনি লেখা ও সেভ করা Unison কোড ঘুরে দেখার সুযোগ দেয়।
💡 মনে রাখবেন: Unison কোড টেক্সট-ভিত্তিক ফাইল কনটেন্ট হিসেবে সেভ হয় না। তাই Unison প্রোগ্রাম বদলানো ও রান করার জন্য আমাদের এমন একটি টুল দরকার।
Unison কোড লেখা ততটাই সহজ, যতটা সহজ আপনার পছন্দের টার্মিনাল খুলে যে ডিরেক্টরিতে Unison কোড লিখবেন সেখানে ucm কমান্ডটি রান করা। এরপর আপনার প্রিয় টেক্সট এডিটর দিয়ে .u এক্সটেনশনের একটি ফাইল তৈরি বা খুলতে পারেন, যেমন scratch.u বা hello.u। আপনার কাজের বেশিরভাগটাই হবে চলমান ucm কমান্ড লাইন ইনস্ট্যান্স আর আপনার .u ফাইলের মধ্যে যাওয়া-আসা। ফাইলটি সেভ করা মাত্রই UCM স্বয়ংক্রিয়ভাবে আপনার .u এক্সটেনশনের ফাইলের পরিবর্তন লক্ষ্য করে।
ডিরেক্টরি স্ট্রাকচারের বদলে Unison কোডবেস সাজানো হয় "নেমস্পেস" দিয়ে। কাজের ফাংশন ও ডেটা টাইপের খোঁজে আপনি স্ট্যান্ডার্ড লাইব্রেরির base নামের নেমস্পেস ঘুরে দেখবেন, আর Unison কোড লেখার সময় নিজের নেমস্পেসও তৈরি করবেন। UCM-এ কোডবেসের ভেতরে চলাফেরা করা হয় ls আর view কমান্ড দিয়ে; এগুলো যথাক্রমে নেমস্পেসের কনটেন্টের তালিকা করতে এবং সোর্স কোড দেখতে ব্যবহৃত হয়।
UCM CLI দিয়ে আপনি আপনার কোডবেস ঘুরে দেখতে ও দেখা করতে পারলেও, আপনার কাজের একটি সুন্দর গ্রাফিকাল রূপও হয়তো দেখতে মন চাইতে পারে। UCM CLI-তে ui কমান্ডটি দিলেই সেটি করতে পারবেন। এটি আপনার কোডবেসের কোডের একটি ভিউ নিয়ে একটি ব্রাউজার উইন্ডো খুলে দেবে। লোকাল কোডবেস UI হলো আমাদের স্ট্যান্ডার্ড লাইব্রেরির, অর্থাৎ base-এর, ফাংশনগুলো ঘুরে দেখারও দুর্দান্ত একটি উপায়, যা অনুশীলনীগুলো সম্পন্ন করতে কাজে লাগতে পারে। লোকাল কোডবেস UI সম্পর্কে আরও পড়ুন।
আপনি Unison ভাষা ট্যুর দিয়ে Unison-এর প্রোগ্রামিং ওয়ার্কফ্লো অনুশীলন করতে পারেন।
project.create কমান্ড দিয়ে একটি নতুন প্রজেক্ট তৈরি করুন এবং তার একটি নাম দিন (যেমন project.create hello-world)
UCM অনুশীলনীর ডিরেক্টরি লক্ষ্য রাখা অবস্থায় <myFileName>.u ফাইলে আপনার পরিবর্তনগুলো করুন
<myFileName>.u ফাইলটি সেভ করুন
ফাইলটি টাইপচেক হয়ে গেলে UCM-এর add বা update কমান্ড রান করুন
<myFileName>.u ফাইলের কোডে পরিবর্তন করতে থাকুনটেস্টগুলো স্কোপে আনতে ও রান করতে UCM cli-তে load <myFileName>.test.u কমান্ডটি রান করুন
আপনি যদি কমান্ড লাইনে কোনো Exercism সমস্যা নিয়ে কাজ করেন, তাহলে সম্ভবত প্রদত্ত অনুশীলনীর নামে থাকা ডিরেক্টরিতেই আপনার সমাধান লিখবেন। যেমন, অনুশীলনীটি যদি hello-world হয়, তাহলে কমান্ড লাইন থেকে ~/exercism/unison/hello-world-এ cd করার পর ucm খুলুন এবং ucm-এ একটি প্রজেক্ট তৈরি করুন (যেমন project.create hello-world)। hello.u ফাইলে আপনার ইমপ্লিমেন্টেশনের পরিবর্তনগুলো করুন, আর ইমপ্লিমেন্টেশনে সন্তুষ্ট হলে Unison কোডবেস ম্যানেজার CLI (UCM)-তে add বা update কমান্ড দিয়ে ফাইলের আপনার কাজটি কোডবেসে যোগ করুন।
প্রতিটি অনুশীলনীর টেস্ট যে ফাইলে থাকে, তার এক্সটেনশন .test.u। টেস্টগুলো স্কোপে আনতে ও রান করতে আপনি UCM-এর load কমান্ডটি ব্যবহার করতে চাইবেন। load কমান্ডটি আর্গুমেন্ট হিসেবে একটি ফাইল পাথ নেয়। hello world অনুশীলনী ও hello-world প্রজেক্টের ক্ষেত্রে সেটি দেখতে এমন হতে পারে:
hello-world/main> load hello.test.u
এরপর UCM থেকে আপনি একটি মেসেজ দেখবেন, যেখানে স্কোপে আনা টার্মগুলোর কথা থাকবে এবং সবচেয়ে গুরুত্বপূর্ণ হলো টেস্ট রান করার ফলাফল:
⍟ These new definitions are ok to `add`:
hello.test : Test.Test
tests : [Result]
Now evaluating any watch expressions (lines starting with
`>`)... Ctrl+C cancels.
6 | test> tests = runAll [hello.test]
🚫 FAILED
ধরা যাক, প্রথমবার আপনার টেস্ট পাস করেনি। আবার আপনার myExercise.u ফাইল এডিট করতে ফিরে যান, আর সেভ করার পর আপনি update করতে পারেন
I found and typechecked these definitions in ~/Exercism/unison/hello-world/hello.u. If you do an
`add` or `update`, here's how your codebase would change:
⍟ These names already exist. You can `update` them to your new definition:
hello : Text
hello-world/main> update
⍟ I've updated these names to your new definition:
hello : Text
এরপর আবার আমাদের টেস্ট লোড করে দেখতে পারি, কিছু বদলেছে কি না!
hello-world/main> load hello.test.u
Now evaluating any watch expressions (lines starting with `>`)... Ctrl+C cancels.
6 | test> tests = runAll [hello.test]
✅ Passed : Passed 1 tests.
আপনার কোডবেসের সাথে কাজ করার জন্যavailable কমান্ডের তালিকা দেখতে Unison কোডবেস ম্যানেজার CLI-তে help রান করুন। UCM কমান্ডের তালিকা আমাদের ওয়েবসাইটেও বর্ণনা করা আছে। নিচে কয়েকটি দেওয়া হলো, যা কাজে লাগতে পারে:
add: .u ফাইল থেকে নতুন ডেফিনিশনগুলো কোডবেসে যোগ করে।update: add-এর মতোই কাজ করে, তবে ফাইলের কোনো ডেফিনিশনের নাম যদি আগে থেকে থাকা কোনো ডেফিনিশনের সাথে একই হয়, তাহলে নামটি নতুন ডেফিনিশনের দিকে নির্দেশ করার জন্য আপডেট হয়ে যায়।
todo আইটেম তৈরি করবে।load: প্রদত্ত .u এক্সটেনশনের স্ক্র্যাচ ফাইল পার্স করে, টাইপচেক করে এবং ইভ্যালুয়েট করে। টাইপচেক ও ইভ্যালুয়েশন হয়ে গেলে আপনি টার্মগুলো আপনার কোডবেসে যোগ করতে পারেন।ls: একটি নেমস্পেসের কনটেন্টের তালিকা করেview: প্রদত্ত কোনো Unison ডেফিনিশনের সোর্স কোড দেখায়ui: লোকাল কোডবেস UI খোলেexit: UCM বন্ধ করে