我想使用Scala的基于属性的测试工具ScalaCheck来表达属性
if an integer n * n = 0 then n = 0
如何在ScalaCheck中编写此属性?例如,我知道
val myprop = forAll {(n: Int) => n + 1 - 1 = n}
但我不知道如何表达";A表示B";在ScalaCheck中(不将其简化为Not-A或B,这可能看起来很笨拙(。
使用==>
(隐含运算符(
val prop = forAll { n: Int =>
(n * n == 0) ==> n == 0
}
(请参阅他们的《用户指南》(问题是:在这个特定的例子中,条件很难满足,所以ScalaCheck会在几次尝试后放弃(但至少它确实告诉你,否则你会得到假阳性,因为你的必要条件从未被检查过(。在这种情况下,您可以提供一个自定义生成器,以便它生成满足您的条件的值。