【发布时间】:2014-02-25 21:31:03
【问题描述】:
我在这里遇到了编程问题。一半的麻烦是问题本身很难思考,另一半是我不记得如何找到解决 QuickCheck 的方法。
我知道,如果您编写的函数接受多个具有Arbitrary 实例的参数,QuickCheck 将允许您使用该方法作为测试。我不知道如何在该方法中生成新的测试参数。我想写类似的东西
prop13 :: Foo -> Bar -> Bool
prop13 foo bar =
if foobar foo bar
then fn1 foo
else newInput $ \ baz -> fn2 foo bar baz
但我不知道该怎么做。
其实不,我真正想写的是
prop13 :: Foo -> Bar -> Property
prop13 foo bar =
if foobar foo bar
then label "foobar=YES" $ fn1 foo
else label "foobar=NO" $ newInput $ \ baz -> fn2 foo bar baz
只是这样我可以检查它是否 100% 的时间占用一个分支或类似的荒谬。
实际上,如果我可以要求baz 具有某些特定属性,那就太好了。我隐约记得 QuickCheck 在某处有一个函数可以丢弃不满足给定条件的输入。 (唯一的问题是它可能需要不合理的尝试次数才能满足条件......)
有没有办法做到这一点?我盯着黑线鳕页面,但我不知道如何得到我想要的……
【问题讨论】:
标签: haskell quickcheck