2015-02-06 33 views
8

Tôi đang cố gắng sử dụng QuickCheck theo số another answer. tôi thử nghiệm như thế này:quickCheckAll luôn trả về "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 

Sau đó, tôi tải nó trong winGHCI và gọi checkcheck2. Tôi nhận được

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

mà tôi nghĩ nó hợp lý. Tuy nhiên, tôi có được điều này từ check2

quickCheckAll 
True 

Tôi đang bối rối vì không có vấn đề làm thế nào tôi thay đổi last' chức năng, thậm chí sai, quickCheckAll luôn trở thành True.

Mã của tôi có vấn đề gì? Làm thế nào tôi có thể sửa lỗi này?

+0

Đối với giá trị của nó, khi tôi thử, tôi cũng nhận được cảnh báo: "Tên prop_test được tìm thấy trong tệp nguồn nhưng không nằm trong phạm vi" (với số dòng chỉ cuộc gọi đến 'quickCheckAll'). Rất huyền bí. –

Trả lời

10

Từ Test.QuickCheck.All tài liệu:

Để sử dụng quickCheckAll, thêm một định nghĩa để mô-đun của bạn dọc theo dòng của

return [] 
runTests = $quickCheckAll 

và sau đó thực hiện runTests.

Lưu ý: số return [] kỳ lạ trong ví dụ trên là cần thiết trên GHC 7.8; không có nó, quickCheckAll sẽ không thể tìm thấy bất kỳ thuộc tính nào.

Thêm return [] trước khi check làm cho nó phù hợp với tôi.

0

Để sử dụng quickCheckAll, bạn cần có một chức năng mà đọc:

return [] runTests = $quickCheckAll

Các bình luận khác đề cập đến điều này, nhưng không chỉ ra rằng nó sẽ vẫn luôn trở thành sự thật trừ khi chức năng nằm bên dưới tất cả các chức năng quickCheck của bạn!

Các vấn đề liên quan