Advertisement
Guest User

Scala

a guest
May 15th, 2019
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 3.37 KB | None | 0 0
  1. import exercises.DerevoADT
  2. import exercises.DerevoADT.{Derevo, Listok, Vetka}
  3. import org.scalacheck.Prop.forAll
  4. import org.scalacheck.{Gen, Prop, Properties}
  5.  
  6. class DerevoADT extends Properties("DerevoADT") {
  7.   val listokGen = for {
  8.     s <- Gen.chooseNum(0, 9)
  9.   } yield Listok(s)
  10.  
  11.   val vetkaGen = for {
  12.     s <- listokGen.sample
  13.     b <- listokGen.sample
  14.   } yield Vetka(s, b)
  15.  
  16. //  val listokSimpleSize: Prop
  17.   property("listokSimpleSize")= forAll(listokGen) { (n: Listok[Int]) => DerevoADT.size(n) == 1 && DerevoADT.sizeF(n) == 1
  18.   }
  19.  
  20. //  val listokSimpleDepth: Prop
  21.   property("listokSimpleDepth")= forAll(listokGen) { (n: Listok[Int]) => DerevoADT.depth(n) == 1 && DerevoADT.depth(n) == 1
  22.   }
  23.  
  24. //  val listokSimpleMax: Prop
  25.   property("listokSimpleMax")= forAll(listokGen) { (n: Listok[Int]) => DerevoADT.maximum(n) == n.a && DerevoADT.maximumF(n) == n.a
  26.   }
  27.  
  28. //  val listokSimpleMap: Prop
  29.   property("listokSimpleMap")= forAll(listokGen) { (n: Listok[Int]) =>
  30.     val b: Int = n.a
  31.     val c: Listok[Int] = Listok(b)
  32.     val first: Derevo[Int] = DerevoADT.map(n)(a => a * 2)
  33.     val second: Derevo[Int] = DerevoADT.mapF(c)(c => c * 3)
  34.     (first, second) match {
  35.       case (f: Listok[Int], s: Listok[Int]) => (b * 2 == f.a) && (b * 3 == s.a)
  36.     }
  37.   }
  38.  
  39. //  val vetkaSimpleSize: Prop
  40.   property("vetkaSimpleSize")= forAll(vetkaGen) { case (n: Some[Vetka[Int]]) => DerevoADT.size(n.get) == 2 && DerevoADT.sizeF(n.get) == 2 }
  41.  
  42. //  val vetkaSimpleDepth: Prop
  43.   property("vetkaSimpleDepth")= forAll(vetkaGen) { case (n: Some[Vetka[Int]]) => DerevoADT.depth(n.get) == 2 && DerevoADT.depth(n.get) == 2
  44.   }
  45.  
  46.  
  47. //  val vetkaSimpleMax: Prop
  48.   property("vetkaSimpleMax")= forAll(vetkaGen) { case (n: Some[Vetka[Int]]) => {
  49.     val lft = n.get.lft
  50.     val rgt = n.get.rgt
  51.     val b = DerevoADT.maximum(n.get)
  52.     val c = DerevoADT.maximumF(n.get)
  53.     (lft, rgt) match {
  54.       case (lft: Listok[Int], rgt: Listok[Int])
  55.       => {
  56.         (b == Math.max(lft.a, rgt.a)) && (c == Math.max(lft.a, rgt.a))
  57.       }
  58.     }
  59.   }
  60.   }
  61.  
  62. //  val vetkaSimpleMap: Prop
  63.   property("vetkaSimpleMap")= forAll(vetkaGen) { case (n: Some[Vetka[Int]]) => {
  64.     val lft = n.get.lft
  65.     val rgt = n.get.rgt
  66.     (lft, rgt) match {
  67.       case (lft: Listok[Int], rgt: Listok[Int])
  68.       => {
  69.         val first = lft.a
  70.         val sec = rgt.a
  71.         val newV = DerevoADT.map(n.get)(a => a * 2)
  72.         val newF = DerevoADT.mapF(n.get)(a => a * 3)
  73.         (newV, newF) match {
  74.           case (newV: Vetka[Int], newF: Vetka[Int]) => {
  75.             val l1 = newV.lft
  76.             val r1 = newV.rgt
  77.             val l2 = newF.lft
  78.             val r2 = newF.rgt
  79.             (l1, r1, l2, r2) match {
  80.               case (l1: Listok[Int], r1: Listok[Int], l2: Listok[Int], r2: Listok[Int]) => {
  81.                 (first * 2 == l1.a) && (sec * 2 == r1.a) && (first * 3 == l2.a) && (sec * 3 == r2.a)
  82.               }
  83.             }
  84.           }
  85.         }
  86.       }
  87.     }
  88.   }
  89.   }
  90.  
  91. //  property("simpleListokFunctions") = listokSimpleDepth && listokSimpleSize && listokSimpleMax && listokSimpleMap
  92. //  property("simpleVetkaFunctions") = vetkaSimpleDepth && vetkaSimpleSize && vetkaSimpleMax && vetkaSimpleMap
  93.  
  94.   //  val a = Vetka(Vetka(Listok(1), Listok(2)), Vetka(Vetka(Listok(1), Listok(2)), Listok(3)))
  95.   //  val b = DerevoADT.fold(a)((m: Int) => m) { (m: Int, n: Int) => println("m: " + m + " n:" + n); m + n }
  96.  
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement