diff options
author | Erik Rozendaal <erik@deler.org> | 2012-01-21 22:55:59 +0100 |
---|---|---|
committer | Erik Rozendaal <erik@deler.org> | 2012-01-21 22:55:59 +0100 |
commit | 7824dbd3cfe6704ab56aa5ceb2af2f5f4e55cbc7 (patch) | |
tree | 4a0426606da5724faf24610fafa68d95308775c6 /test/files | |
parent | 00b5cb84df493aace270674054d2f6ddf3721131 (diff) | |
download | scala-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')
-rw-r--r-- | test/files/scalacheck/redblacktree.scala | 26 |
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 } |