2012-03-25 12 views
9

मैं QuickCheck का उपयोग कर शुद्ध कोड का परीक्षण करना चाहते जब मैं अक्सर एक Arbitrary उदाहरण लिखने के लिए की है। monadic कोड का परीक्षण करने के लिए, मैं इस article में वर्णित के रूप Test.QuickCheck.Monadic उपयोग कर सकते हैं।वहाँ QuickCheck साथ उपयोग करने के लिए मनमानी की एक monadic संस्करण है?

मेरा प्रश्न है: क्या डेटा उत्पन्न करने के लिए कुछ कैननिकल तरीका है जो एक monadic संदर्भ पर निर्भर करता है? विशेष रूप से, क्या मनमाने ढंग से कुछ monadic संस्करण है? आप डेटा उत्पन्न करने के बारे में कैसे जाएंगे जिसके लिए एक monadic संदर्भ की आवश्यकता है?

उत्तर

3

बेतरतीब ढंग से एक संदर्भ

उत्पन्न बस एक उपयुक्त यादृच्छिक monadic संदर्भ उत्पन्न करते हैं। आप परीक्षण चल रहे हैं, तो आप, शुद्ध काल्पनिक इकाई देश में नहीं रह सकते कि आप वास्तव में परीक्षण करने के लिए एक विशेष इकाई लेने के लिए किया है। क्या आपने एक सूची मोनड चुना था? यादृच्छिक रूप से संदर्भ के रूप में एक सूची उत्पन्न करते हैं। एक राज्य मोनड? यादृच्छिक रूप से संदर्भ के लिए राज्य प्रकार का एक मूल्य उत्पन्न करते हैं। लेखक? यादृच्छिक रूप से एक लॉग उत्पन्न करें।

बेतरतीब ढंग से, एक कार्रवाई

तो क्या करते हैं आप उत्पन्न करना चाहते उत्पन्न वास्तव में? यदि यह एक monadic कार्रवाई है, तो आप अपने विशेष इकाई, अपनी अनूठी पुरातन के आधार पर के लिए monadic कार्यों पैदा करने का एक तरीका प्रदान करने के लिए की जरूरत है। जैसे अनियमित रूप से उत्पन्न राज्य कार्यों राज्य पुरातन get और put से बेतरतीब ढंग से निर्माण किया जाना चाहिए।

उन्हें एक साथ रखो

आप QuickCheck की क्षमताओं का उपयोग करते हैं एक समारोह f कि एक monadic कार्रवाई पैदा करता है उत्पन्न करने के लिए, और QuickCheck का प्रयोग कर एक संदर्भ c उत्पन्न करने के लिए है, तो आप बस c >>= f उन्हें एक साथ डाल करने के लिए कर सकते हैं। या आप सीधे कार्रवाई a उत्पन्न कर सकते हैं, और c >> a करें।

6

Gen क्या आप एक इकाई ढांचे में Arbitrary उदाहरणों के साथ काम करने के बाद से Arbitrary प्रकार वर्ग मूल रूप से सिर्फ Gen a जनरेटर की एक प्रदाता है का उपयोग मूल रूप से है।