summaryrefslogtreecommitdiff
path: root/test/files/scalacheck
diff options
context:
space:
mode:
authorErik Rozendaal <erik@deler.org>2012-01-21 22:55:59 +0100
committerErik Rozendaal <erik@deler.org>2012-01-21 22:55:59 +0100
commit7824dbd3cfe6704ab56aa5ceb2af2f5f4e55cbc7 (patch)
tree4a0426606da5724faf24610fafa68d95308775c6 /test/files/scalacheck
parent00b5cb84df493aace270674054d2f6ddf3721131 (diff)
downloadscala-7824dbd3cfe6704ab56aa5ceb2af2f5f4e55cbc7.tar.gz
scala-7824dbd3cfe6704ab56aa5ceb2af2f5f4e55cbc7.tar.bz2
scala-7824dbd3cfe6704ab56aa5ceb2af2f5f4e55cbc7.zip
Custom coded version of range/from/to/until.
This avoids unnecessary allocation of Option and Function objects, mostly helping performance of small trees.
Diffstat (limited to 'test/files/scalacheck')
-rw-r--r--test/files/scalacheck/redblacktree.scala26
1 files changed, 10 insertions, 16 deletions
diff --git a/test/files/scalacheck/redblacktree.scala b/test/files/scalacheck/redblacktree.scala
index 14538c2352..e4b356c889 100644
--- a/test/files/scalacheck/redblacktree.scala
+++ b/test/files/scalacheck/redblacktree.scala
@@ -174,39 +174,33 @@ package scala.collection.immutable.redblacktree {
object TestRange extends RedBlackTreeTest with RedBlackTreeInvariants {
import RB._
- override type ModifyParm = (Option[Int], Boolean, Option[Int], Boolean)
+ override type ModifyParm = (Option[Int], Option[Int])
override def genParm(tree: Tree[String, Int]): Gen[ModifyParm] = for {
from <- choose(0, iterator(tree).size)
- fromInclusive <- oneOf(false, true)
to <- choose(0, iterator(tree).size) suchThat (from <=)
- toInclusive <- oneOf(false, true)
optionalFrom <- oneOf(Some(from), None, Some(from)) // Double Some(n) to get around a bug
optionalTo <- oneOf(Some(to), None, Some(to)) // Double Some(n) to get around a bug
- } yield (optionalFrom, fromInclusive, optionalTo, toInclusive)
+ } yield (optionalFrom, optionalTo)
override def modify(tree: Tree[String, Int], parm: ModifyParm): Tree[String, Int] = {
val from = parm._1 flatMap (nodeAt(tree, _) map (_._1))
- val to = parm._3 flatMap (nodeAt(tree, _) map (_._1))
- range(tree, from, parm._2, to, parm._4)
+ val to = parm._2 flatMap (nodeAt(tree, _) map (_._1))
+ rangeImpl(tree, from, to)
}
property("range boundaries respected") = forAll(genInput) { case (tree, parm, newTree) =>
val from = parm._1 flatMap (nodeAt(tree, _) map (_._1))
- val fromPredicate: String => String => Boolean = if (parm._2) (_ <=) else (_ <)
- val to = parm._3 flatMap (nodeAt(tree, _) map (_._1))
- val toPredicate: String => String => Boolean = if (parm._4) (_ >=) else (_ >)
- ("lower boundary" |: (from forall ( key => keysIterator(newTree) forall fromPredicate(key)))) &&
- ("upper boundary" |: (to forall ( key => keysIterator(newTree) forall toPredicate(key))))
+ val to = parm._2 flatMap (nodeAt(tree, _) map (_._1))
+ ("lower boundary" |: (from forall ( key => keysIterator(newTree) forall (key <=)))) &&
+ ("upper boundary" |: (to forall ( key => keysIterator(newTree) forall (key >))))
}
property("range returns all elements") = forAll(genInput) { case (tree, parm, newTree) =>
val from = parm._1 flatMap (nodeAt(tree, _) map (_._1))
- val fromPredicate: String => String => Boolean = if (parm._2) (_ >=) else (_ >)
- val to = parm._3 flatMap (nodeAt(tree, _) map (_._1))
- val toPredicate: String => String => Boolean = if (parm._4) (_ <=) else (_ <)
+ val to = parm._2 flatMap (nodeAt(tree, _) map (_._1))
val filteredTree = (keysIterator(tree)
- .filter(key => from forall fromPredicate(key))
- .filter(key => to forall toPredicate(key))
+ .filter(key => from forall (key >=))
+ .filter(key => to forall (key <))
.toList)
filteredTree == keysIterator(newTree).toList
}