2015-02-06 10 views
8

वापस लौटें मैं another answer के बाद क्विक चेक का उपयोग करने की कोशिश कर रहा हूं। मैं इस तरह का परीक्षण:quickCheck हमेशा "True"

{-# LANGUAGE TemplateHaskell #-} 
import Test.QuickCheck 
import Test.QuickCheck.All 


last' :: [a] -> a 
last' [x] = x 
last' (_:xs) = last' xs 

prop_test x = last' x == last x 

check = do 
     putStrLn "quickCheck" 
     quickCheck (prop_test :: [Char]-> Bool) 

check2 = do 
     putStrLn "quickCheckAll" 
     $quickCheckAll 

तब मैं winGHCI में लोड और check और check2 कहते हैं। मुझे

quickCheck 
*** Failed! (after 1 test): 
Exception: 
    list.hs:(7,1)-(8,23): Non-exhaustive patterns in function last' 
"" 

जो मुझे लगता है कि यह उचित है। हालांकि, मैं से check2

quickCheckAll 
True 

मैं उलझन में हूं, क्योंकि कोई बात नहीं मैं last' समारोह, यहां तक ​​कि गलत कैसे बदलने के लिए, quickCheckAll हमेशा सच लौट इस मिलता है।

मेरे कोड में क्या गलत है? मैं इसे कैसे ठीक करूं?

+0

जब मैं कोशिश करता हूं, तो मुझे एक चेतावनी भी मिलती है: "स्रोत फ़ाइल में पाया गया prop_test लेकिन स्कोप में नहीं था" (कॉल पर 'लाइन चेक पॉइंट' के साथ 'QuickCheckAll')। बहुत रहस्यमय –

उत्तर

10
Test.QuickCheck.All डॉक्स से

:

quickCheckAll का उपयोग करने के लिए,

return [] 
runTests = $quickCheckAll 

की तर्ज पर अपने मॉड्यूल के लिए एक परिभाषा जोड़ने और फिर runTests निष्पादित।

नोट: उपरोक्त उदाहरण में विचित्र return [] जीएचसी 7.8 पर आवश्यक है; इसके बिना, quickCheckAll कोई भी संपत्ति नहीं ढूंढ पाएगी।

return [] को check जोड़ने से पहले यह मेरे लिए काम करता है।

return [] runTests = $quickCheckAll

अन्य टिप्पणी में यह उल्लेख है, लेकिन कहना नहीं है कि यह अभी भी हमेशा सच वापस आ जाएगी जब तक कि समारोह सभी के नीचे है:

0

quickCheckAll का उपयोग करने के लिए आपको एक समारोह जो पढ़ता है की जरूरत है आपके त्वरित जांच कार्यों का!

संबंधित मुद्दे