1

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)
        }
}

ただし、生成された開始と終了のすべてが条件を満たさない場合、テストが失敗する可能性があります。したがって、それが最善の解決策とは言えません (少なくとも良い解決策です)。

4

1 に答える 1

2

次のように、scalatest の forAll 関数を使用してそれらにアクセスします。

  import org.scalatest.prop.GeneratorDrivenPropertyChecks._

  forAll (genPairs) { 
    case (start, end) => doSomething(start, end)
  }
于 2013-11-18T13:51:44.390 に答える