2015-02-06 18 views
8

Sto cercando di utilizzare QuickCheck dopo another answer. I test come questo:quickCheckAll restituisce sempre "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 

Poi ho caricarlo nel winGHCI e chiamare check e check2. Ottengo

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

che penso sia ragionevole. Tuttavia, ottengo questo da check2

quickCheckAll 
True 

Sono confuso perché non importa quanto a cambiare la funzione last', anche sbagliato, quickCheckAll tornare sempre vero.

Cosa c'è di sbagliato nel mio codice? Come posso risolvere questo?

+0

Per quello che vale, quando provo, ricevo anche un avviso: "Nome prop_test trovato nel file sorgente ma non era nell'ambito" (con un numero di linea che punta alla chiamata a 'quickCheckAll'). Molto misterioso –

risposta

10

Dalle Test.QuickCheck.All documentazione:

Per utilizzare quickCheckAll, aggiungere una definizione al modulo lungo le linee di

return [] 
runTests = $quickCheckAll 

e quindi eseguire runTests.

Nota: il bizzarro return [] nell'esempio precedente è necessario su GHC 7.8; senza di esso, quickCheckAll non sarà in grado di trovare nessuna proprietà.

L'aggiunta di return [] prima che il tuo check funzioni per me.

0

Per utilizzare quickCheckAll, hai bisogno di una funzione che recita:

return [] runTests = $quickCheckAll

L'altro commento menziona questo, ma non punta che sarà ancora sempre tornare vero a meno che la funzione si trova sotto tutti delle tue funzioni quickCheck!

Problemi correlati