zakładam chcesz dowolną tablicę liczb całkowitych, które zostało uporządkowane, prawda? Jeśli to przypadek, można użyć jednej z następujących metod, aby uzyskać Gen[Array[Int]]
:
val genIntArray = Gen.containerOf[Array, Int](
Gen.chooseNum(Int.MinValue, Int.MaxValue)
)
Lub:
val genIntArray = implicitly[Arbitrary[Array[Int]]].arbitrary
Następnie można użyć map
zmodyfikować generator uporządkować swoje wyniki:
val genSortedIntArray = genIntArray.map(_.sorted)
Teraz możesz uruchomić genSortedIntArray.sample.get
kilka razy, aby przekonać się, że wynikiem jest posortowana tablica losowych liczb całkowitych.
Jeśli chcesz, aby Arbitrary
posortowane tablice z liczb całkowitych, najlepiej zdefiniować wrapper zamiast ukrywać domyślne Arbitrary[Array[Int]]
. Na przykład, można napisać następujące:
case class SortedIntArray(value: Array[Int]) extends AnyVal
object SortedIntArray {
implicit val arb: Arbitrary[SortedIntArray] = Arbitrary(
genSortedIntArray.map(SortedIntArray(_))
)
}
, a następnie:
forAll { (a: SortedIntArray) =>
confirmThatMyFunctionOnSortedIntArraysWorks(a.value)
}
Przy użyciu specjalistycznych generatorów tak, myślę, że lepiej jest, aby uniknąć arbitralnych razem. Możesz po prostu użyć swojego generatora bezpośrednio: forAll (genSortedIntArray) {a => ...}. Może to jednak być kwestia gustu. –