summaryrefslogtreecommitdiff
path: root/test/files/scalacheck/treemap.scala
diff options
context:
space:
mode:
authorErik Rozendaal <erik@deler.org>2012-01-22 21:17:29 +0100
committerErik Rozendaal <erik@deler.org>2012-01-23 22:21:28 +0100
commit78374f340e71d8e8f71c5bcd11452b72c207068c (patch)
treed8d443d06164c1deb82f8103d03aec4745efdb5f /test/files/scalacheck/treemap.scala
parent7824dbd3cfe6704ab56aa5ceb2af2f5f4e55cbc7 (diff)
downloadscala-78374f340e71d8e8f71c5bcd11452b72c207068c.tar.gz
scala-78374f340e71d8e8f71c5bcd11452b72c207068c.tar.bz2
scala-78374f340e71d8e8f71c5bcd11452b72c207068c.zip
Custom implementations of drop/take/slice.
This mainly helps performance when comparing keys is expensive.
Diffstat (limited to 'test/files/scalacheck/treemap.scala')
-rw-r--r--test/files/scalacheck/treemap.scala18
1 files changed, 15 insertions, 3 deletions
diff --git a/test/files/scalacheck/treemap.scala b/test/files/scalacheck/treemap.scala
index ba6d117fd4..f672637c57 100644
--- a/test/files/scalacheck/treemap.scala
+++ b/test/files/scalacheck/treemap.scala
@@ -7,11 +7,12 @@ import util._
import Buildable._
object Test extends Properties("TreeMap") {
- implicit def arbTreeMap[A : Arbitrary : Ordering, B : Arbitrary]: Arbitrary[TreeMap[A, B]] =
- Arbitrary(for {
+ def genTreeMap[A: Arbitrary: Ordering, B: Arbitrary]: Gen[TreeMap[A, B]] =
+ for {
keys <- listOf(arbitrary[A])
values <- listOfN(keys.size, arbitrary[B])
- } yield TreeMap(keys zip values: _*))
+ } yield TreeMap(keys zip values: _*)
+ implicit def arbTreeMap[A : Arbitrary : Ordering, B : Arbitrary] = Arbitrary(genTreeMap[A, B])
property("foreach/iterator consistency") = forAll { (subject: TreeMap[Int, String]) =>
val it = subject.iterator
@@ -96,6 +97,17 @@ object Test extends Properties("TreeMap") {
prefix == subject.take(n) && suffix == subject.drop(n)
}
+ def genSliceParms = for {
+ tree <- genTreeMap[Int, String]
+ from <- choose(0, tree.size)
+ until <- choose(from, tree.size)
+ } yield (tree, from, until)
+
+ property("slice") = forAll(genSliceParms) { case (subject, from, until) =>
+ val slice = subject.slice(from, until)
+ slice.size == until - from && subject.toSeq == subject.take(from).toSeq ++ slice ++ subject.drop(until)
+ }
+
property("takeWhile") = forAll { (subject: TreeMap[Int, String]) =>
val result = subject.takeWhile(_._1 < 0)
result.forall(_._1 < 0) && result == subject.take(result.size)