快速检查,使用函数定义任意实例,其结果取决于其参数

时间:2014-11-22 02:53:07

标签: haskell testing generator quickcheck

我有一个函数arbExample来生成一个随机Example数据类型,它依赖于多个函数。

我正在尝试通过quickCheck prop_example进行一些属性测试,问题是我不知道如何为使用Arbitrary的{​​{1}}定义Example个实例。

我希望能够在指定arbExample使用的quickCheck prop_example数据结构时运行Gens

arbExample

1 个答案:

答案 0 :(得分:7)

使用具有签名的forAll组合子:

forAll :: (Show a, Testable prop) => Gen a -> (a -> prop) -> Property

一个简单的例子:

import Test.QuickCheck

genA :: Gen Int
genA = choose (-100,100)

genB :: Gen Int
genB = choose (1,100)

prop_example :: Int -> Bool
prop_example n = n > 0

testA = quickCheck $ forAll genA prop_example
testB = quickCheck $ forAll genB prop_example

testA会失败,但testB会成功。