Haskell 使用快速检查测试随机生成器

Haskell 使用快速检查测试随机生成器,haskell,quickcheck,Haskell,Quickcheck,我已经写了一个随机生成器来创建一个扫雷板。它返回一个Gen Board,其中Board是我自己定义的数据类型。我想测试一下它是否做了它应该做的。由于它是一个生成器,我不能使用我所使用的返回布尔值或属性的函数。有没有一种使用快速检查测试生成器的好方法?假设您有 genBoard :: Gen Board isValidBoard :: Board -> Bool 您可以使用for all组合器测试生成器是否有效 prop_genBoardMakesValidBoards :: Proper

我已经写了一个随机生成器来创建一个扫雷板。它返回一个Gen Board,其中Board是我自己定义的数据类型。我想测试一下它是否做了它应该做的。由于它是一个生成器,我不能使用我所使用的返回布尔值或属性的函数。有没有一种使用快速检查测试生成器的好方法?

假设您有

genBoard :: Gen Board
isValidBoard :: Board -> Bool
您可以使用
for all
组合器测试生成器是否有效

prop_genBoardMakesValidBoards :: Property
prop_genBoardMakesValidBoards = forAll genBoard isValidBoard

很难测试生成器是否足够随机,例如,它并不总是返回一个微不足道的电路板。

Nice!虽然我的生成器使用参数来决定大小、地雷数量等,但我想您可以将它们传递给prop_genBoard MakesValidboard,并将它们传递给genBoard函数?类型为
Int->Proprety
的函数也是可测试的,因此您可以将其传递给
quickcheck
等。它将生成随机数以赋予函数。