ScalaTest と Scalacheck を併用しています。これが私の怠惰なペアです (Tuples2 の代わりに Gen[(Int, Int)] を結果として取得するため、機能しません。そのため、パターン マッチングを使用できません)。
private lazy val (startInterval, endInterval) =
for {
start <- Gen.choose(-10000, 10000)
end <- Gen.choose(-10000, 10000) if end > start
} yield (start, end)
forAll の 2 つのパラメーターを使用するには、上記の 2 つの値を次のように使用します。
forAll (endInterval, startInterval) { (start: Int, end: Int) =>
assert(sumOfCubes(start, end) === 0)
}
この方法で、1 つの Gen[(Int, Int)] を作成できます。
private lazy val genPairs =
for {
start <- Gen.choose(-10000, 10000)
end <- Gen.choose(-10000, 10000) if end > start
} yield (start, end)
しかし、その後、名前で要素にアクセスできません。
scalacheck を長く使っている人にとっては簡単な質問かもしれませんが、私は初心者であり、多くの解決策を試したので、この問題を解決するにはどうすればよいでしょうか?
編集: 1つの解決策は、いつでも使用できます:
private lazy val startInterval = Gen.choose(-10000, 10000)
private lazy val endInterval = Gen.choose(-10000, 10000)
と:
forAll (startInterval, endInterval) { (start: Int, end: Int) =>
whenever(start > end) {
assert(sumOfCubes(start, end) === 0)
}
}
ただし、生成された開始と終了のすべてが条件を満たさない場合、テストが失敗する可能性があります。したがって、それが最善の解決策とは言えません (少なくとも良い解決策です)。