Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- case class Inner(left: Tree, right: Tree) extends Tree
- case class Leaf(i: Int) extends Tree
- abstract class Generator[+T] {
- self =>
- def generate: T
- def map[S](f: T => S): Generator[S] = new Generator[S] {
- def generate = f(self.generate)
- }
- def flatMap[S](f: T => Generator[S]): Generator[S] = new Generator[S] {
- def generate = f(self.generate).generate
- }
- }
- val integers = new Generator[Int] {
- val rand = new Random
- def generate: Int = rand.nextInt()
- }
- val booleans: Generator[Boolean] = for{
- x <- integers
- } yield x > 0
- val trees: Generator[Tree] = for{
- isLeaf <- booleans
- tree <- if(isLeaf) leaves else inners
- } yield tree
- val leaves: Generator[Leaf] = for{
- i <- integers
- } yield Leaf(i)
- val inners: Generator[Inner] = for{
- i <- trees
- j <- trees
- } yield Inner(i, j)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement