【问题标题】:How to generate increasing sequence in ScalaCheck?如何在ScalaCheck中生成递增序列?
【发布时间】:2019-09-12 00:38:58
【问题描述】:

我正在尝试使用 ScalaCheck 生成不断增加的数字序列。

我想实现这样的目标:

0 2 4 6

这是通过将范围 0..3 增加 2 来实现的:

0 * 2 = 0
1 * 2 = 2
2 * 2 = 4
3 * 2 = 6

感谢您的帮助。 对不起,如果问题之前被质疑过。

【问题讨论】:

  • 您是否有任何具体原因要使用 ScalaCheck 生成器而不是普通的 Scala 范围,例如 0 to 6 by 2
  • 我遇到了使用基于属性的测试的项目,所以只是学习 ScalaCheck 来测试我的代码。
  • ScalaCheck 生成器通常会生成一些随机输入数据。使用它们生成完整且可预测的输入序列是我不记得见过的,我认为这不是预期用途,因此用于此的代码可能远非简单。
  • 我明白了,谢谢你的解释。我认为问题无关紧要。

标签: scala scalacheck


【解决方案1】:

好吧,生成随机序列似乎并不难。抱歉,我需要更具体地了解可预测性。

object GenerateSequence {

  def apply(maxSize: Int, maxStep: Int): Gen[Seq[Int]] = {
    for {
      size <- Gen.chooseNum(1, maxSize)
      step <- Gen.chooseNum(1, maxStep)
    } yield {
      (0 to size).map(_ * step)
    }
  }
}

【讨论】:

    【解决方案2】:

    并不是真的使用ScalaCheck,但是你可以使用even的数字流:

    >val even = Stream.from(0,2)
    
    >even.take(4)
    // Display
    // res2: Stream[Int] = Stream(0, 2, 4, 6)
    

    【讨论】:

      猜你喜欢
      • 2020-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多