是否可以在ScalaCheck生成器中创建线性进程

时间:2014-07-03 08:59:27

标签: scala scalacheck

我有一个ScalaCheck的新手问题,我第一次玩这个问题。 是否可以创建一个Gen[Int],它将从0到N线性地进展。

这样当我在ScalaCheck中使用forAll时,它会将输入Int增加1。

我希望这个例子用增加值

进行测试
"Increase" should "always increase" in {
  forAll(validNumbers){ i:Int =>
    increase(i) should be (i + 1)
  }
}

也许这会破坏ScalaChecks的目的,我应该在ScalaTest中以这种方式进行测试。

1 个答案:

答案 0 :(得分:1)

你可以这样做:

def validNumbers(n: Int): Gen[Int] = Gen.resultOf[Int, Int] {
  new (Int => Int) {
    val current = (0 to n).iterator

    def apply(i: Int): Int = {
      if(current.hasNext) current.next else sys.error("No more numbers")
    }
  }
}

但是我认为你确实是对的,这会破坏ScalaChecks的目的。在这种情况下,一个简单的for循环会做得更好。