2008-09-15 11 views
6

मैं किसी भी सूची में चलने वाले निष्कर्षण नामक फ़ंक्शन का परीक्षण कर रहा हूं।टेस्ट करें। त्वरित जांच। बैच परीक्षण सूची कार्यों के लिए डिफ़ॉल्ट प्रकार का उपयोग करें

extractions :: [a] -> [(a,[a])] 
extractions [] = [] 
extractions l = extract l [] 
    where extract [] _ = [] 
      extract (x:xs) prev = (x, prev++xs) : extract xs (x : prev) 

मैं, यह परीक्षण करने के लिए

import Test.QuickCheck.Batch  
prop_len l = length l == length (extractions l) 
main = runTests "extractions" defOpt [run prop_len] 

साथ उदाहरण के लिए, चाहते हैं लेकिन इस संकलन नहीं होगा; मुझे run या prop_len के लिए एक प्रकार की आपूर्ति करना है, क्योंकि क्विक चेक [a] उत्पन्न नहीं कर सकता है, इसे कुछ ठोस उत्पन्न करना है।

main = runTests "extractions" defOpt [r prop_len] 
    where r = run :: ([Int] -> Bool) -> TestOptions -> IO TestResult 

वहाँ किसी भी तरह से QuickCheck मेरे लिए a का चयन करने के बजाय इसे run के प्रकार में निर्दिष्ट होने पाने के लिए है: तो मैं Int चुना?

उत्तर

7

quickcheck manual कहते हैं, "नहीं":

गुण monomorphic प्रकार होना आवश्यक है। `पॉलिमॉर्फिक 'गुण, जैसे उपर्युक्त, परीक्षण के लिए उपयोग किए जाने वाले किसी विशेष प्रकार तक सीमित होना चाहिए। यह एक

जहां प्रकार = (x1 :: t1, x2 :: t2, ...)

खंड ...

में एक या अधिक तर्क के प्रकार कहते हुए कि ऐसा करने के लिए सुविधाजनक है