scalacheckのユーザーガイドには、「ケースクラスの生成」の段落があります。ケースクラスの代わりに通常のクラスを使用するように例を変更しました。
import org.scalacheck._
import Gen._
import Arbitrary._
sealed abstract class Tree
object Leaf extends Tree
class Node(left:Tree, rigth:Tree, v:Int) extends Tree
object Main {
val genLeaf = value(Leaf)
val genNode = for{
v <- Arbitrary.arbitrary[Int]
left <- genTree
rigth <- genTree
} yield new Node(left, rigth, v)
val genTree:Gen[Tree] = oneOf(genLeaf, genNode)
def main(args:Array[String]){
println(genTree.sample)
}
}
すべてが機能しているように見えますが、ここで質問する前に、本番コードでこのアプローチを使用することを恐れています。落とし穴はありますか?