gpt4 book ai didi

f# - 在 FsCheck 中,如何生成非负字段的测试记录?

转载 作者:行者123 更新时间:2023-12-04 17:26:34 24 4
gpt4 key购买 nike

在 F# 中,我有一个包含几个字段的记录:

    type myRecord = { a:float; b:float; c:float }

我正在使用 FsCheck 来测试一些使用此记录的属性。
对于(人为的)示例,
    let verify_this_property (r:myRecord) = myFunction(r) = (r.a * r.b) / r.c

由于 的内部实现限制myFunction ,我想让 FsCheck 创建测试用例,其中每个字段 a、b、c 都被限制为非负浮点数。

我怀疑这需要为 创建一个生成器我的记录 ,但我还没有找到任何有关如何执行此操作的示例。

任何人都可以提供指导吗?

最佳答案

尝试这个:

type Generators = 
static member arbMyRecord =
fun (a,b,c) -> { myRecord.a = a; b = b; c = c }
<!> (Arb.generate<float> |> Gen.suchThat ((<) 0.) |> Gen.three)
|> Arb.fromGen

Arb.register<Generators>() |> ignore
Check.Quick verify_this_property
<!>是一个中缀 map ,适用于应用风格。这是一个等效的生成器:
type Generators = 
static member arbMyRecord =
Arb.generate<float>
|> Gen.suchThat ((<) 0.)
|> Gen.three
|> Gen.map (fun (a,b,c) -> { myRecord.a = a; b = b; c = c })
|> Arb.fromGen

如果你不想全局注册你的生成器,你可以使用 forAll :
Check.Quick (forAll Generators.arbMyRecord verify_this_property)

向左收缩作为练习;)

关于f# - 在 FsCheck 中,如何生成非负字段的测试记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8160421/

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