有没有办法伪造这个(错误的)财产:
prop :: Eq a => [a] -> Bool
prop xs = reverse xs == xs
当我使用QuickCheck及以后的VerboseCheck时,它提供了100种不同形式:
[(),(),(),(),(),(),(),(),(),(),(),(),(),(),()]
传递:
最后的结果是:
+++ OK, passed 100 tests.
答案 0 :(得分:10)
恰好发生了
Eq a
,并且通常在GHCi中启用ExtendedDefaultRules
扩展名,它会选择()
()
,因为它只有一个(非底部)值,所以命题实际上是 true 。最简单的解决方法是通过提供类型注释来选择(几乎)任何其他类型:
Prelude Test.QuickCheck> quickCheck (prop :: [Int] -> Bool)
*** Failed! Falsifiable (after 4 tests and 3 shrinks):
[0,1]