আমি টিডিডি অনুশীলনের চেষ্টা করছি, এটি ব্যবহার করে বিট ভেক্টরের মতো একটি সাধারণ বিকাশ করতে। আমি সুইফ্ট ব্যবহার করে যাচ্ছি, তবে এটি একটি ভাষা-অজ্ঞাত প্রশ্ন।
আমার এমনটি BitVector
যা একটি struct
একক সঞ্চয় করে UInt64
এবং এটির উপরে একটি API উপস্থাপন করে যা আপনাকে এটি সংগ্রহের মতো আচরণ করতে দেয়। বিশদটি খুব বেশি গুরুত্ব দেয় না, তবে এটি বেশ সহজ। উচ্চ 57 বিটগুলি হ'ল স্টোরেজ বিট, এবং নীচের 6 টি বিটগুলি "গণনা" বিটস, যা আপনাকে বলবে যে স্টোরেজ বিটগুলির মধ্যে কতগুলি আসলে একটি বিদ্যমান মান সঞ্চয় করে।
এখনও অবধি আমার হাতে খুব সাধারণ ক্ষমতা রয়েছে:
- একটি ইনিশিয়ালাইজার যা খালি বিট ভেক্টর তৈরি করে
count
প্রকারের একটি সম্পত্তিInt
isEmpty
প্রকারের একটি সম্পত্তিBool
- একটি সমতা অপারেটর (
==
)। নোট: এটিObject.equals()
জাভা -এর মতো একটি মান-সমতা অপারেটর , জাভা -র মতো কোনও রেফারেন্স সমতা অপারেটর নয়==
।
আমি একগুচ্ছ চক্রীয় নির্ভরতা মধ্যে চলেছি:
আমার ইনিশিয়ালাইজার পরীক্ষা করে এমন ইউনিট পরীক্ষা করে নতুন নির্মিত কিনা তা যাচাই করা দরকার
BitVector
। এটি 3 টির মধ্যে একটিতে এটি করতে পারে:- চেক
bv.count == 0
- চেক
bv.isEmpty == true
- যে পরীক্ষা
bv == knownEmptyBitVector
পদ্ধতি 1 নির্ভর করে
count
, পদ্ধতি 2 নির্ভর করেisEmpty
(যা নিজেই নির্ভর করেcount
, সুতরাং এটি ব্যবহার করার কোনও মানে নেই), পদ্ধতি 3 নির্ভর করে==
। যাই হোক না কেন, আমি আমার প্রারম্ভিকটিকে বিচ্ছিন্নভাবে পরীক্ষা করতে পারি না।- চেক
count
কোনও কিছুর উপর পরিচালনা করার জন্য পরীক্ষার প্রয়োজন, যা অনিবার্যভাবে আমার আরম্ভকারীকে পরীক্ষা করেবাস্তবায়ন
isEmpty
উপর নির্ভর করেcount
বাস্তবায়ন
==
উপর নির্ভর করেcount
।
BitVector
বিদ্যমান বিট প্যাটার্ন (এ হিসাবে UInt64
) থেকে একটি রচনা করে এমন একটি প্রাইভেট API প্রবর্তন করে আমি আংশিকভাবে এই সমস্যার সমাধান করতে সক্ষম হয়েছি । এটি আমাকে অন্য আরম্ভকারীদের পরীক্ষা না করে মানগুলি আরম্ভ করার অনুমতি দেয়, যাতে আমি "বুট স্ট্র্যাপ" চালিয়ে যেতে পারি।
আমার ইউনিট পরীক্ষাগুলি সত্যই ইউনিট পরীক্ষা হওয়ার জন্য, আমি নিজেকে অনেকগুলি হ্যাকগুলি করতে দেখি, যা আমার প্রোড এবং পরীক্ষার কোডকে যথেষ্ট জটিল করে তোলে।
আপনি এই ধরণের সমস্যাটি সম্পর্কে কীভাবে পেতে পারেন?
BitVector
ইউনিট পরীক্ষার জন্য একদম সূক্ষ্ম ইউনিট আকার এবং অবিলম্বে আপনার সমস্যাগুলি সমাধান করে যে জনসাধারণের সদস্যদেরBitVector
অর্থপূর্ণ পরীক্ষা করার জন্য একে অপরের প্রয়োজন।