2

Gen[A]同じオブジェクトを 2 回返さない using ScalaCheckを作成するにはどうすればよいですか?

Gen.oneOf(a,b,c)

同じオブジェクトを繰り返し選択できるため、機能しません。

私は specs2 で変更可能な仕様を書いています。これを行いたい理由は、テスト対象のシステムの動作が、ある意味で各オブジェクトを一度だけ「使用」できるようにする必要があるためです。

編集:「同じ」とは、 に従って同じことを意味し==、オブジェクトは実際には文字列であるため、毎回同じ文字列を作成することはできません。

4

1 に答える 1

3

あなたが何を求めているのか完全にはわかりませんがGen.wrap、ジェネレータ自体が評価されるたびにその引数を評価するというジェネレータコンビネータがあります。そうすれば、新しいオブジェクトの作成を強制できます。Gen.value以下の例を参照してください (必要に応じて、の使用をスキップして、代わりに暗黙的な変換に依存できることに注意してくださいA => Gen[A])。

scala> import org.scalacheck._
import org.scalacheck._

scala> class A
defined class A

scala> val g1: Gen[A] = Gen.value(new A)
g1: org.scalacheck.Gen[A] = Gen()

scala> g1.sample.get
res0: A = A@45243a0f

scala> g1.sample.get
res1: A = A@45243a0f

scala> val g2: Gen[A] = Gen.wrap(Gen.value(new A))
g2: org.scalacheck.Gen[A] = Gen()

scala> g2.sample.get
res2: A = A@331d4d66

scala> g2.sample.get
res3: A = A@728aed09
于 2012-10-05T12:48:54.120 に答える