diff --git a/Test1.scala b/Test1.scala
new file mode 100644
index 0000000000000000000000000000000000000000..6cd5734cd39ed79c022cf2f9207aa805a21236fb
--- /dev/null
+++ b/Test1.scala
@@ -0,0 +1,27 @@
+import funcheck.lib.Specs._
+import org.scalacheck.{Gen, Arbitrary}
+
+object HeapTest {
+  sealed abstract class Middle extends Top
+  case class E()  extends Middle
+  @generator sealed abstract class Top
+  case class Elem(i: Int, j: Int) 
+
+  @generator def create(): E = E()
+  //@generator def create2(i: Int): Elem = Elem(i)
+
+  def genE = Gen.value(E())
+  def genE2 = Gen.value(E())
+
+  @generator
+  def genElemSynthetic(a: Int, b: Int) = Elem(a,b)
+
+  def genElem = for {
+    v2 <- Arbitrary.arbitrary[Int]
+    v1 <- Arbitrary.arbitrary[Int]
+  } yield Elem(v2,v2)
+
+  implicit def arbE: Arbitrary[E] = Arbitrary(Gen.oneOf(genE,genE2))
+
+  forAll[(Elem,Elem,Int)]( p => 1+1 == 2)
+}
\ No newline at end of file
diff --git a/Test2.scala b/Test2.scala
new file mode 100644
index 0000000000000000000000000000000000000000..667c7e1ae75e1411a6cefca10219d42b26c69add
--- /dev/null
+++ b/Test2.scala
@@ -0,0 +1,31 @@
+import funcheck.lib.Specs._
+import org.scalacheck.{Gen, Arbitrary}
+
+object HeapTest {
+  @generator
+  sealed abstract class Tree 
+  case class Leaf()  extends Tree
+  case class Node(left: Tree, right: Tree, v:Int) extends Tree
+
+  @generator def create(left: Tree, right: Tree, v: Int): Node = Node(left,right,v)
+
+  case class Elem (i: Int, j: Int, k: Int)
+  
+  def genElem: Gen[Elem] = for {
+    i <- Arbitrary.arbitrary[Int]
+    j <- Arbitrary.arbitrary[Int]
+    k <- Arbitrary.arbitrary[Int]
+  } yield Elem(i,j,k)
+ 
+  def genLeaf = Gen.value(Leaf())
+  def genTree: Gen[Tree] = Gen.oneOf(genLeaf,genNode)
+  def genNode = for {
+    v1 <- Arbitrary.arbitrary[Tree]
+    v2 <- Arbitrary.arbitrary[Tree]
+    v3 <- Arbitrary.arbitrary[Int]
+  } yield Node(v1,v2,v3)
+
+  implicit def arbTree: Arbitrary[Tree] = Arbitrary(genTree)
+
+  
+}
\ No newline at end of file
diff --git a/Test3.scala b/Test3.scala
new file mode 100644
index 0000000000000000000000000000000000000000..705509819b1bc77e897026427587fcf92bb569b1
--- /dev/null
+++ b/Test3.scala
@@ -0,0 +1,20 @@
+import funcheck.lib.Specs._
+import org.scalacheck.{Gen, Arbitrary}
+
+object HeapTest {
+
+  @generator sealed abstract class Tree 
+  case class Node(left: Tree, right: Tree) extends Tree
+  case class Leaf() extends Tree
+
+  def genLeaf: Gen[Leaf] = Gen.value[Leaf](Leaf())
+
+  def genNode: Gen[Node] = for {
+    v1 <- Arbitrary.arbitrary[Tree]
+    v2 <- Arbitrary.arbitrary[Tree]
+  } yield Node(v1,v2)
+
+  implicit def arbTree: Arbitrary[Tree] = Arbitrary(genTree)
+  def genTree: Gen[Tree] = Gen.oneOf(genLeaf,genNode)
+  
+}
\ No newline at end of file