gpt4 book ai didi

haskell - 如何在 QuickCheck 中使用自定义 listOf

转载 作者:行者123 更新时间:2023-12-02 12:53:29 27 4
gpt4 key购买 nike

在我的代码中,我需要生成一个Point列表

我已在 Arbitrary 类型类中实例化了自定义类型 Point。到目前为止一切顺利。

现在我需要生成一个列表:[Points]

但是 QuickCheck 生成的默认随机列表(我相信使用 listOf?)对我不起作用。因为我需要点之间的一些特殊关系。我知道生成器组合器,例如。 suchAs 但是它们太慢了(因为关系非常罕见)

我定义了一个自定义的Gen [Point]来满足我的需求。

randomBoard :: Gen [Point]
randomBoard = ...

但我不知道如何让我的测试在属性测试中使用此自定义 Gen,因为它默认为 listOf 生成的列表。

最佳答案

IIUC,问题是您的测试通过 Testable instance for 使用Arbitrary 实例。 (任意 a,显示 a,可测试 Prop )=> 可测试(a -> Prop )

获取自定义生成器的常见模式是使用所需的Arbitrary实例抛出一些newtype。所以你可以定义类似的东西

newtype Board = Board [Point]

instance Arbitrary Board where
...

那会起作用的。但我建议完全绕过 Arbitrary 并使用 forAll and its variants 编写您的属性。 .

genBoard :: Gen [Point]
genBoard = ...

shrinkBoard :: [Point] -> [[Point]]
shrinkBoard = ...

myProperty :: Property
myProperty = forAllShrink genBoard shrinkBoard (\board -> ...)

关于haskell - 如何在 QuickCheck 中使用自定义 listOf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59398893/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com