Ich nehme an, Sie eine beliebige Array von ganzen Zahlen wollen, die sortiert worden ist, nicht wahr? Wenn das der Fall ist, können Sie eine der folgenden Ansätze nutzen, um eine Gen[Array[Int]]
:
val genIntArray = Gen.containerOf[Array, Int](
Gen.chooseNum(Int.MinValue, Int.MaxValue)
)
Oder:
val genIntArray = implicitly[Arbitrary[Array[Int]]].arbitrary
Sie können dann map
verwenden um den Generator zu ändern, um ihre Ergebnisse zu sortieren:
Jetzt können Sie genSortedIntArray.sample.get
ein paar Mal ausführen, um sich davon zu überzeugen, dass das Ergebnis ein sortiertes Array von zufälligen Ganzzahlen ist.
Wenn Sie eine Arbitrary
für sortierte Arrays von ganzen Zahlen möchten, ist es am besten, einen Wrapper zu definieren, anstatt den Standard Arbitrary[Array[Int]]
zu verbergen. Zum Beispiel könnte schreiben Sie Folgendes:
case class SortedIntArray(value: Array[Int]) extends AnyVal
object SortedIntArray {
implicit val arb: Arbitrary[SortedIntArray] = Arbitrary(
genSortedIntArray.map(SortedIntArray(_))
)
}
Und dann:
forAll { (a: SortedIntArray) =>
confirmThatMyFunctionOnSortedIntArraysWorks(a.value)
}
Wenn wie diese mit speziellen Generatoren, ich denke, dass es besser ist, alle zusammen zu vermeiden Willkürliche. Sie können Ihren Generator einfach direkt verwenden: forAll (genSortedIntArray) {a => ...}. Es könnte jedoch eine Frage des Geschmacks sein. –