diff --git a/munit-scalacheck/shared/src/main/scala/munit/ScalaCheckSuite.scala b/munit-scalacheck/shared/src/main/scala/munit/ScalaCheckSuite.scala index 6ebcc36f..2629c1fc 100644 --- a/munit-scalacheck/shared/src/main/scala/munit/ScalaCheckSuite.scala +++ b/munit-scalacheck/shared/src/main/scala/munit/ScalaCheckSuite.scala @@ -49,23 +49,29 @@ trait ScalaCheckSuite extends FunSuite { private def propToTry(prop: Prop, test: Test): Try[Unit] = { import ScalaCheckTest._ - def seed = + def makeSeed() = scalaCheckTestParameters.initialSeed.getOrElse( Seed.fromBase64(scalaCheckInitialSeed).get ) + val initialSeed = makeSeed() + var seed: Seed = initialSeed val result = check( scalaCheckTestParameters, - Prop(genParams => prop(genParams.withInitialSeed(seed))) + Prop { genParams => + val r = prop(genParams.withInitialSeed(seed)) + seed = seed.next + r + } ) def renderResult(r: Result): String = { val resultMessage = Pretty.pretty(r, scalaCheckPrettyParameters) if (r.passed) { resultMessage } else { - val seedMessage = s"""|Failing seed: ${seed.toBase64} + val seedMessage = s"""|Failing seed: ${initialSeed.toBase64} |You can reproduce this failure by adding the following override to your suite: | - | override val scalaCheckInitialSeed = "${seed.toBase64}" + | override val scalaCheckInitialSeed = "${initialSeed.toBase64}" |""".stripMargin seedMessage + "\n" + resultMessage } diff --git a/tests/shared/src/test/scala/munit/ScalaCheckInitialSeedSuite.scala b/tests/shared/src/test/scala/munit/ScalaCheckInitialSeedSuite.scala new file mode 100644 index 00000000..dd95f5d2 --- /dev/null +++ b/tests/shared/src/test/scala/munit/ScalaCheckInitialSeedSuite.scala @@ -0,0 +1,23 @@ +package munit + +import scala.collection.mutable +import org.scalacheck.Prop.forAll + +final class ScalaCheckInitialSeedSuite extends ScalaCheckSuite { + + // initial seed should be used for the first out of 100 `minSuccessfulTests` only + override val scalaCheckInitialSeed = + "9SohH7wEYXCdXK4b9yM2d6TKIN2jBFcBs4QBta-2yTD=" + private val ints = mutable.Set.empty[Int] + + property("generating int") { + forAll { (i: Int) => + ints.add(i) + true + } + } + + test("generated int are not all the same") { + assert(ints.size > 1) + } +}