枚举的任意元组

时间:2013-08-27 08:28:21

标签: scala scalacheck

我有一个枚举RankAndFile,其中64个值代表棋盘上的方块。

我想获得一个ScalaCheck Arbitrary[(RankAndFile, RankAndFile)],但我不确定如何。

到目前为止,我有:

implicit val arbitraryRankAndFile = 
  Arbitrary(Gen.oneOf(RankAndFile.values.toSeq))

implicit val arbitraryRankAndFilePair = 
  Arbitrary.arbTuple2[RankAndFile, RankAndFile]

但是编译器在第二个声明中抱怨它could not find implicit value for parameter a1: org.scalacheck.Arbitrary[RankAndFile.RankAndFile]。当然这是因为arbitraryRankAndFile的类型是Arbitrary[Gen[RankAndFile]]

我该怎么办?

1 个答案:

答案 0 :(得分:3)

任意单个值就足够了:

implicit def rankAndFile = Arbitrary { Gen.oneOf(RankAndFile.values.toSeq) }

要检查的属性采用了RankAndFile的元组,scalacheck可以从这个Arbitrary值中得到满足。方法Arbitrary.arbTuple2是一个红鲱鱼。