Exercism-এ আপনার Haskell অনুশীলনীগুলো কীভাবে টেস্ট করবেন তা জানুন
টেস্ট চালাতে আপনার অনুশীলনীর ডিরেক্টরিতে নিচের কমান্ডটি চালান:
stack test
প্রতিবার ফাইল সেভ করার সময় টেস্ট চালাতে চাইলে এর বদলে এই কমান্ডটি চালান:
stack test --file-watch
No .cabal file found in directory
তাহলে সম্ভবত আপনি stack-এর পুরোনো একটি ভার্সন চালাচ্ছেন এবং সেটি আপগ্রেড করা দরকার।
No compiler found, expected minor version match with...
Try running "stack setup" to install the correct GHC...
তাহলে এটি যা বলছে সেটিই করুন, আর এটি সঠিক কম্পাইলার ভার্সন ডাউনলোড করে ইনস্টল করে দেবে:
stack setup
একটি অনুশীলনীর সমাধান হলো একটি Haskell মডিউল। মডিউলের নামটি টেস্ট স্যুটের একটি ইমপোর্ট স্টেটমেন্ট-এ নির্ধারিত থাকে, সাধারণত একেবারে শুরুতে:
import Test.Hspec (Spec, describe, it, shouldBe)
import Test.Hspec.Runner (configFailFast, defaultConfig, hspecWith)
import ModuleName (someFunc)
main :: IO ()
main ...
এই উদাহরণে, টেস্ট ফাইলটি ৪ নম্বর লাইনে ModuleName নামের একটি মডিউল ইমপোর্ট করে, যেটি someFunc নামের একটি ফাংশন এক্সপোর্ট করে। এর মানে হলো, আপনাকে ModuleName.hs নামের একটি ফাইল তৈরি করতে হবে, যেটি দেখতে এরকম হবে:
module ModuleName (someFunc) where
someFunc :: ...
someFunc ...
src/ ফোল্ডারে এই নামের একটি ফাইল আগে থেকেই থাকবে, যা আপনি আপনার সমাধানের শুরুর বিন্দু হিসেবে ব্যবহার করতে পারেন।
শুধু মনে রাখবেন, এই স্টাবটি শুধু আপনাকে শুরু করার জন্যই দেওয়া। যদি মনে করেন এটি পুরোপুরি বদলে ফেলাই ঠিক, তাহলে নির্দ্বিধায় তাই করুন।
আরও সুন্দর একটি সমাধান লিখতে কিছু প্যাকেজ ব্যবহার করতে চাইলে, প্রথমে package.yaml ফাইলে আপনার সমাধানের ডিপেন্ডেন্সিতে প্যাকেজগুলো যোগ করুন:
library:
exposed-modules: ModuleName
source-dirs: src
dependencies:
- foo
- bar
লোকালি কাজ করার সময় আপনি আপনার ইচ্ছেমতো যেকোনো প্যাকেজ ব্যবহার করতে পারেন। তবে অনলাইন টেস্ট রানারের কাছে সীমিত কিছু প্যাকেজেরই অ্যাক্সেস থাকে। যে প্যাকেজগুলো পাওয়া যায় সেগুলো হলো
base, containers, array, time, mtl, deepseq, exceptions, bytestring), এবংযদি এমন কোনো সমাধান সাবমিট করেন যেটি পাওয়া যায় না এমন একটি প্যাকেজ ব্যবহার করে, তাহলে টেস্ট রানারের ইন্টারনেট অ্যাক্সেসের অভাব দেখা দেবে এবং এরকম একটি এরর দেখাবে:
Cabal file info not found for unavailable-package-1.0@..., updating
Selected mirror https://hackage.haskell.org/
Downloading root
HttpExceptionRequest Request {
host = "hackage.haskell.org"
...
}
(ConnectionFailure ...)
GHCi-তে আপনার সমাধান নিয়ে পরীক্ষা-নিরীক্ষা করতে চাইলে, শুধু এই কমান্ডটি চালান:
stack ghci
আপনার সমাধানে hlint চালিয়ে দেখার পরামর্শ রইল, যাতে দেখা যায় এটি আপনার চোখ এড়িয়ে যাওয়া কিছু ধরতে পারে কিনা:
hlint ModuleName.hs
hlint-এর দেওয়া সব পরামর্শ আপনাকে মানতেই হবে এমন নয়, তবে সাধারণত এগুলো আপনাকে সুন্দর ও ইডিওম্যাটিক Haskell কোড লেখা শিখতে সাহায্য করে।