ScalaCheck - 有序数组生成器

时间:2015-03-15 08:35:05

标签: scala scalacheck

我第一次尝试使用ScalaCheck,我想生成一个有序的Ints数组。

我阅读了文档并进行了一些搜索,但我没有找到办法。

有人可以对此有所了解吗?

由于

1 个答案:

答案 0 :(得分:7)

我假设您需要一个已排序的任意整数数组,对吧?如果是这种情况,您可以使用以下任一方法获取Gen[Array[Int]]

val genIntArray = Gen.containerOf[Array, Int](
  Gen.chooseNum(Int.MinValue, Int.MaxValue)
)

或者:

val genIntArray = implicitly[Arbitrary[Array[Int]]].arbitrary

然后,您可以使用map修改生成器以对其结果进行排序:

 val genSortedIntArray = genIntArray.map(_.sorted)

现在你可以运行genSortedIntArray.sample.get几次来说服自己结果是一个随机整数的排序数组。

如果你想要一个Arbitrary的整数排序数组,最好定义一个包装器而不是隐藏默认的Arbitrary[Array[Int]]。例如,您可以编写以下内容:

case class SortedIntArray(value: Array[Int]) extends AnyVal

object SortedIntArray {
  implicit val arb: Arbitrary[SortedIntArray] = Arbitrary(
    genSortedIntArray.map(SortedIntArray(_))
  )
}

然后:

forAll { (a: SortedIntArray) =>
  confirmThatMyFunctionOnSortedIntArraysWorks(a.value)
}