Foo
を受け取るコンストラクタを持つ型がありInt
ます。scalacheck で使用するimplicit
Arbitrary
forを定義するにはどうすればよいですか?Foo
implicit def arbFoo: Arbitrary[Foo] = ???
私は次の解決策を思いつきましたが、それは少し「手動」であり、私の好みには低レベルです。
val fooGen = for (i <- Gen.choose(Int.MinValue, Int.MaxValue)) yield new Foo(i)
implicit def arbFoo: Arbitrary[Foo] = Arbitrary(fooGen)
理想的には、関数をプラグインするだけでよい高次関数が必要ですInt => Foo
。
私はそれを次のように削減することができました:
implicit def arbFoo = Arbitrary(Gen.resultOf((i: Int) => new Foo(i)))
しかし、もう少し簡単な方法が必要だとまだ感じています。