11
我使用QuickCheck
測試以下程序:雖然響應變化爲什麼QuickCheck放棄?
{-# LANGUAGE TemplateHaskell #-}
import Test.QuickCheck
import Test.QuickCheck.All
elementAt :: (Integral b) => [a] -> b -> a
elementAt [x] _ = x
elementAt (x:xs) 1 = x
elementAt (x:xs) b = elementAt xs (b - 1)
prop_elementAt xs b = length xs > 0 && b >= 0 && b < length xs ==> elementAt xs (b + 1) == xs !! b
main = $(quickCheckAll)
,我不斷收到消息
*** Gave up! Passed only x tests.
這是不是我應該關心?或者測試輸入的性質決定了QuickCheck的運行時間?
曾與同[99哈斯克爾問題提問]同樣的問題(http://www.haskell.org/haskellwiki/99_questions/1_to_10),它似乎很好地工作。但是爲我運行'verboseCheck prop_elementAt'會返回僅包含元素'()'的無盡列表,這意味着'elementAt(x:xs)_ = x'的實現仍然通過。任何想法如何生成一個列表中的實際元素? – ThomasH
那是因爲它推斷了prop_elemAt的錯誤類型。給它顯式類型(例子'prop_elementAt :: Foo [Int] Int - > Bool')。 – Satvik
解決了它,謝謝! – ThomasH