我想生成一个整数列表,该列表对应于ScalaCheck
.
import org.scalacheck._
import Arbitrary.arbitrary
val smallInt = Gen.choose(0,10)
val bigInt = Gen.choose(1000, 1000000)
val zeroOrOneInt = Gen.choose(0, 1)
val smallEvenInt = smallInt suchThat (_ % 2 == 0)
val gens = List(smallInt, bigInt, zeroOrOneInt, smallEvenInt)
//val listGen: Gen[Int] = ??
//println(listGen.sample) //should print something like List(2, 2000, 0, 6)
对于给定的gens
,我想创建一个生成器listGen
,其有效样本可以是List(2, 2000, 0, 6)
。这是我第一次尝试使用元组。
val gensTuple = (smallInt, bigInt, zeroOrOneInt, smallEvenInt)
val tupleGen = for {
a <- gensTuple._1
b <- gensTuple._2
c <- gensTuple._3
d <- gensTuple._4
} yield (a, b, c, d)
println(tupleGen.sample) // prints Some((1,318091,0,6))
这可行,但我不想使用元组,因为生成器列表gens
是动态创建的,并且列表的大小不是固定的。有没有办法用列表做到这一点?
我希望listGen
在 scalacheckforAll
属性检查中使用 list() 的生成器。
这看起来像是一个玩具问题,但这是我能做的最好的事情,以创建一个独立的片段来重现我面临的实际问题。