Scalacheck,大小为 5 到 12 的列表生成器

Posted

技术标签:

【中文标题】Scalacheck,大小为 5 到 12 的列表生成器【英文标题】:Scalacheck, generator for lists between size 5 and 12 【发布时间】:2016-04-21 02:12:26 【问题描述】:

我可以找到许多设置生成器最大大小的示例,但是如何生成介于最小和最大长度之间的列表?

【问题讨论】:

【参考方案1】:

关于生成器的一个简洁属性是它们是可组合的,因此您可以使用listOfN 生成器简单地为您的列表长度组合一个生成器。

for 
  numElems <- Gen.choose(5, 12)
  elems <- Gen.listOfN(numElems, elemGenerator)
 yield elems

【讨论】:

你知道吗;这简直太优雅了!出于某种原因,库在处理大小时需要转换,例如:不支持最小大小的 Gen.resize(12,myGenerator)。您的示例更加灵活和有启发性。 组合生成器是一个你必须在头脑中翻转的开关,但是一旦你意识到它对于生成专门的对象实际上是多么强大。很高兴我能帮上忙! 使用 Gen.chooseNum 而不是 Gen.choose,因为 chooseNum 赋予了更大的权重来测试和生成最小值、最大值和特殊情况,例如 0(如果它们在范围内)。 这让我觉得不正确:listOfN 中的 N 被描述为 Generates a list with at most the given number of elements ...意思是无论 N 是 5 还是 12,您仍然可以获得以下列表3个元素。或者一个空列表,就此而言。 我没有看到相同的文档。在底层它使用buildableOfN,如果容器强制元素唯一性(如集合或地图),它可以生成小于指定大小的容器。 List 不是这种情况,我找到的所有文档都指定生成的列表的长度恰好是指定的 N【参考方案2】:

我在这里唤醒了鬼魂,但万一有人来:

根据我对已接受答案的评论,该解决方案随机决定 5 到 12 之间的最大长度,但在这种情况下,生成列表的实际大小仍可能为 0(零)或低于 5 的任何值。

我认为以下内容符合 OP 的描述:

Gen
  .listOfN(12, elemGenerator)
  .suchThat(_.size >= 5)

如果有一个 API 可以方便地生成这个,或者说一个精确大小的列表,N,那就太棒了。

【讨论】:

以上是关于Scalacheck,大小为 5 到 12 的列表生成器的主要内容,如果未能解决你的问题,请参考以下文章

sbt->compile 后未找到 org.scalacheck 和 org.scalatest

如何将不同大小的numpy数组列表保存到磁盘?

根据列表中图像的数量按比例调整动态图像列表的大小

数组到 NSOrderedSet 将列表的大小更改为 1

使用分页库时,观察者显示列表大小为零

python中的多个列表到excel