Scalacheck:生成总数小于某个值的数字列表

时间:2016-02-20 22:18:37

标签: scala scalacheck

我需要使用ScalaCheck生成一个给定大小的数字的随机列表,其总数小于给定的固定阈值。换句话说,做一些像:

val threshold = 3000    
val listGenerator = Gen.listOfN(2000, Gen.choose(1,2000)) suchThat { _.sum < theshold }

虽然上面的内容完全表达了我想要实现的目标,但它并不起作用,因为这样的子句最终会丢弃绝大多数生成的值。

1 个答案:

答案 0 :(得分:0)

好吧,如果你的最大值是3k,并且你想要一个2000的最小值为1的列表,那么我期待一个大多数为1和2的列表。下面是一个解决方案(当前数字只会生成一个1的列表),

val threshold = 3000

val max = 2000
val max = threshold / n

val listGenerator = Gen.listOfN(max, Gen.choose(1,max))

如果你允许0,数学会改变一点。