में परीक्षण डेटा कैसे उत्पन्न होता है, इस पर नियंत्रण करते हुए मैंने हास्केल में सबसेट योग समस्या का हल ढूंढने के लिए एक एल्गोरिदम लिखा था। हस्ताक्षरक्विक चेक
subsetSum :: (Ord a, Num a) => [a] -> a -> Maybe [a]
क्विक चेक परीक्षण करने के लिए एक अच्छा फिट प्रतीत होता है।
prop_sumEqualsS l s = case subsetSum l s of
Just solution -> (sum solution) == s
Nothing -> True
समस्या यह है कि एल्गोरिथ्म काफी कंप्यूटेशनल रूप से संवेदनशील और बड़ा इनपुट सूचियों के साथ 100 परीक्षण चल रहा है चलाने के लिए उम्र ले जाता है: उदाहरण के लिए मैं यहाँ गुण है कि मैं जांच कर सकता है में से एक है।
मैंने क्विक चेक 1 के साथ प्रयास किया और यह जल्दी से चला गया, लेकिन परीक्षण के लिए उपयोग किए गए डेटा सेट बहुत छोटे थे। क्विक चेक 2 पर जाने के बाद यह विपरीत समस्या प्रतीत होता है। क्यूसी के लिए a manual है लेकिन यह पुराना प्रतीत होता है (कोई तारीख जानकारी नहीं है) और मुझे नहीं पता कि क्यूसी 2 पर अभी भी कितना लागू होता है। A Tutorial हास्केल विकी पर उपलब्ध है लेकिन Arbitrary
को तत्काल करने पर कुछ ही विवरण नहीं हैं।
- क्या QuickCheck 2 में परिवर्तन करने के लिए यह इतना QuickCheck की तुलना में धीमी हो जाते हैं:
तो मैं दो प्रश्न हैं?
- किसी दिए गए परीक्षण के लिए उन्हें उपयोगी बनाने के लिए डेटा सेट निर्माण को नियंत्रित करने का सबसे अच्छा तरीका क्या है?
संपादित करें: अधिक विशिष्ट होना करने के लिए, मैं -10,000 और 10000
QuickCheck के संदर्भ के लिए एक छोटे से अस्पष्ट लगता है, शायद आप इसके बजाय एक सामान्य परीक्षण प्रश्न पूछना बेहतर होगा। यद्यपि आपके वर्तमान दृष्टिकोण के साथ कुछ समस्याएं हैं: यह जांच नहीं करेगा कि समाधान वास्तव में एक सबसेट है, या यदि फ़ंक्शन कुछ भी नहीं लौटाता है तो वास्तव में कोई समाधान नहीं होता है। – gatoatigrado
@gatoatigrado संपत्ति सिर्फ एक उदाहरण था। मुझे विश्वास है कि समाधान एक सबसेट एक अन्य संपत्ति में है। क्या मै गलत हु? मुझे यह जांचने का एक आसान तरीका नहीं दिख रहा है कि जब कुछ भी वापस नहीं किया जाता है, वास्तव में कोई समाधान नहीं होता है, फिर भी समस्या को हल करने के अलावा किसी अन्य एल्गोरिदम के साथ। यह थोड़ा अनावश्यक लगता है। – Antoine
http://stackoverflow.com/questions/10712373/cookbook-for-converting-from-quickcheck1-to-quickcheck2 – gliptak