次のようなクラスがあります。
class EpidemySimulator extends Simulator {
...
class Person{
// Implementation
}
}
EpidemySimulator クラスでいくつかのプロパティを定義できるように、内部クラス Persons の Arbitrary を追加したいと考えています。コンパニオン オブジェクトは、Person 型のオブジェクトを生成するプロパティを定義するために必要な暗黙的なジェネレーターを定義できると考えました。
object EpidemySimulator
{
implicit def arbPerson(implicit sim: EpidemySimulator ) =
Arbitrary(for(n <- Gen.choose(1, roomRows * roomColumns))yield{ new sim.Person(n) })
def propertyOne(sim: EpidemySimulator ) = forAll { person: sim.Person =>
person.row > 0 && person.row < roomRows && person.col > 0 && person.col < roomColumns
}
}
Arbitrary[sim.Person]
私の理解では、(暗黙的に提供される)特定のものを作成する暗黙的な関数を提供した場合、のsim:EpidemySimulator
ようにプロパティを作成できるはずpropertyOne
です。ただし、プロパティでコンパイラエラーが発生します
Multiple markers at this line
- identifier expected but ';' found.
- not enough arguments for method forAll: (implicit p: Boolean => org.scalacheck.Prop, implicit a1: org.scalacheck.Arbitrary[sim.Person],
implicit s1: org.scalacheck.Shrink[sim.Person], implicit pp1: sim.Person => org.scalacheck.Pretty)org.scalacheck.Prop. Unspecified value parameters
a1, s1, pp1.
- could not find implicit value for parameter a1: org.scalacheck.Arbitrary[sim.Person]
- type <error> is not a member of simulations.EpidemySimulator
私が間違っていることについてのアイデア。最終的にできるようにしたい:
class EpidemySuite extends FunSuite with Checkers {
test("EpidemySimulator fulfills property one"){
val es = new EpidemySimulator
check( EpidemySimulator.propertyOne(sim) )
}
}