有没有办法伪造这个(错误的)属性:
prop :: Eq a => [a] -> Bool
prop xs = reverse xs == xs
当我使用 QuickCheck 和后来的 VerboseCheck 时,它提供了 100 种不同的形式:
[(),(),(),(),(),(),(),(),(),(),(),(),(),(),()]
通过:
最终结果是:
+++ OK, passed 100 tests.
最佳答案
正好
Eq a
使用,并与 ExtendedDefaultRules
扩展通常在 GHCi 中启用,它选择 ()
. ()
,因为它只有一个(非底部)值,所以这个命题实际上是真的。 最简单的解决方法是通过提供类型注释来选择(几乎)任何其他类型:
Prelude Test.QuickCheck> quickCheck (prop :: [Int] -> Bool)
*** Failed! Falsifiable (after 4 tests and 3 shrinks):
[0,1]
关于Haskell,QuickCheck,伪造(错误的)属性 :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26697039/