加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scalacheck忽略了提供的生成器

发布时间:2020-12-16 18:37:57 所属栏目:安全 来源:网络整理
导读:我正在尝试实现一个简单的属性检查,但 Scalacheck忽略了我的生成器.我在这里做错了什么? object AlgorithmTest extends Properties("Algorithm") { property("Test") = forAll (Gen.choose(0,10)) (n = n=0 n10)} 这是SBT的结果 [info] ! Algorithm.Test: F
我正在尝试实现一个简单的属性检查,但 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("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,Skipped 0

可视化Shrink值的一种方法是使用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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读