带有生成对象的列表的Scalacheck生成器
我需要生成对象列表。每个对象必须包含预定值和生成值。 我创建了生成器,但不确定这是否正确。 有没有办法让它更具可读性带有生成对象的列表的Scalacheck生成器,scalacheck,Scalacheck,我需要生成对象列表。每个对象必须包含预定值和生成值。 我创建了生成器,但不确定这是否正确。 有没有办法让它更具可读性 object Test { case class A(myInt: Int, randomInt: Int) val list = List(1, 2, 3, 4, 5) val subListGen = Gen.someOf(list) val randomIntGen = Gen.choose(0,10) impo
object Test {
case class A(myInt: Int, randomInt: Int)
val list = List(1, 2, 3, 4, 5)
val subListGen = Gen.someOf(list)
val randomIntGen = Gen.choose(0,10)
import scala.collection.JavaConverters._
val seqAGen: Gen[Seq[A]] = for {
subsetMyInts <- subListGen
seqOfRandomIntsWithSizeEqualGenSubList <- Gen.sequence(subsetMyInts.map(x => randomIntGen))
} yield {
subsetMyInts.zip(seqOfRandomIntsWithSizeEqualGenSubList.asScala.toList).map(x => A(x._1, x._2))
}
}
对象测试{
案例类别A(myInt:Int,randomInt:Int)
val list=列表(1,2,3,4,5)
val subListGen=Gen.someOf(列表)
val randomIntGen=Gen.choose(0,10)
导入scala.collection.JavaConverters_
val sekagen:Gen[Seq[A]]=for{
分条款A(x._1,x._2))
}
}
首先,我们可能希望为单个实例实现一个生成器:
val aGen: Gen[A] = for {
myInt <- Gen.oneOf(list:_*)
randomInt <- Gen.choose(0, 10)
} yield A(myInt, randomInt)
如果您不关心myInt的唯一性,这将起作用。使用.sample的方法
object Test {
case class A(myInt: Int, randomInt: Int)
val list = List(1, 2, 3, 4, 5)
val randomIntGen = Gen.choose(0,10)
val seqAGen: Gen[Seq[A]] = Gen.someOf(list.flatMap(myInt => randomIntGen.sample.map(A(myInt, _))))
}
正如Arseniy所注意到的:如果您有一个a类型,那么为该类型定制一个生成器是惯用的做法。如果您确定sample将返回非空的generator.val listOfAGen=Gen.listOfN(list.size*2,aGen.map(.groupBy(.myInt).flatMap(x=>x.\u 2.headOption))则可以使用sample
object Test {
case class A(myInt: Int, randomInt: Int)
val list = List(1, 2, 3, 4, 5)
val randomIntGen = Gen.choose(0,10)
val seqAGen: Gen[Seq[A]] = Gen.someOf(list.flatMap(myInt => randomIntGen.sample.map(A(myInt, _))))
}