ScalaCheck - 有序数组生成器
ScalaCheck - Ordered array generator
我是第一次尝试 ScalaCheck,我想生成一个有序的整数数组。
我阅读了文档并进行了一些搜索,但没有找到解决方法。
有人可以解释一下吗?
谢谢
我假设您想要一个已排序的任意整数数组,对吧?如果是这种情况,您可以使用以下任一方法来获得 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)
}
我是第一次尝试 ScalaCheck,我想生成一个有序的整数数组。
我阅读了文档并进行了一些搜索,但没有找到解决方法。
有人可以解释一下吗?
谢谢
我假设您想要一个已排序的任意整数数组,对吧?如果是这种情况,您可以使用以下任一方法来获得 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)
}