我需要使用ScalaCheck生成一个给定大小的数字的随机列表,其总数小于给定的固定阈值。换句话说,做一些像:
val threshold = 3000
val listGenerator = Gen.listOfN(2000, Gen.choose(1,2000)) suchThat { _.sum < theshold }
虽然上面的内容完全表达了我想要实现的目标,但它并不起作用,因为这样的子句最终会丢弃绝大多数生成的值。
答案 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,数学会改变一点。