gpt4 book ai didi

Scalacheck 忽略提供的生成器

转载 作者:行者123 更新时间:2023-12-04 19:14:54 24 4
gpt4 key购买 nike

我正在尝试实现一个简单的属性检查,但 Scalacheck 忽略了我的生成器。我在这里做错了什么?

object AlgorithmTest extends Properties("Algorithm") {
property("Test") = forAll (Gen.choose(0,10)) (n => n>=0 & n<10)
}

这是 SBT 的结果
[info] ! Algorithm.Test: Falsified after 12 passed tests. [info] >
ARG_0: -1 [error] Failed: : Total 1, Failed 1, Errors 0, Passed 0,
Skipped 0

最佳答案

它看起来像传递给 forAll 的 Shrink 实例。方法在搜索较小的反例时不使用生成器。如果您将属性(property)更改为:

property("Test") = Prop.forAllNoShrink(Gen.choose(1, 10)) (n => n >= 0 && n < 10)

然后它应该正确地失败:
[info] ! Algorithm.Test: Falsified after 7 passed tests.
[info] > ARG_0: 10
[error] Failed: : Total 1, Failed 1, Errors 0, Passed 0, Skipped 0

可视化收缩值的一种方法是使用 Prop.collect方法:
property("Test") = Prop.forAll(Gen.choose(1, 10)) { n =>
Prop.collect(n) { n >= 0 && n < 10 }
}

然后收集的值如下所示:
[info] ! Algorithm.Test: Falsified after 40 passed tests.
[info] > ARG_0: -1
[info] > Collected test data:
[info] 17% 3
[info] 17% 1
[info] 15% 6
[info] 12% 9
[info] 10% 2
[info] 10% 5
[info] 7% 4
[info] 7% 8
[info] 2% -1
[info] 2% 7

您可以看到在收缩过程中使用了 -1。

关于Scalacheck 忽略提供的生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10830355/

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