Testing scalacheck中正则类的生成器
在scalacheck的“生成案例类”一段中。我修改了其中的示例,使用常规类而不是case类:Testing scalacheck中正则类的生成器,testing,scala,scalacheck,Testing,Scala,Scalacheck,在scalacheck的“生成案例类”一段中。我修改了其中的示例,使用常规类而不是case类: 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(L
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)
}
}
import org.scalacheck_
进口发电机_
任意导入_
密封抽象类树
对象叶扩展树
类节点(左:树,右:树,v:Int)扩展树
对象主体{
val genLeaf=值(叶)
val genNode=for{
v我看这里没有问题。在该示例中使用case类的原因是所示的树
是一种代数数据类型,可以使用case类。对于普通类,您无法在树上进行模式匹配,事实上,如果没有decl,您甚至无法获得左
、右
和v
将它们命名为val
这应该可以很好地工作。就ScalaCheck而言,case类并没有什么特别神奇的地方。任何旧类都可以获得生成器,甚至可以转换为任意类型
就测试而言,一个区别是,您生成的每一个非案例类树都是唯一的,因此对于您生成的任何两个树,都不会有tree1==tree2。这与案例类的情况不同,案例类基于值而不是身份来测试相等性。您可能需要更多的测试来处理可能出现的别名问题e当您具有基于身份而非基于价值的平等性时