diff options
author | Erik Rozendaal <erik@deler.org> | 2012-01-22 21:17:29 +0100 |
---|---|---|
committer | Erik Rozendaal <erik@deler.org> | 2012-01-23 22:21:28 +0100 |
commit | 78374f340e71d8e8f71c5bcd11452b72c207068c (patch) | |
tree | d8d443d06164c1deb82f8103d03aec4745efdb5f /test/files/scalacheck/treeset.scala | |
parent | 7824dbd3cfe6704ab56aa5ceb2af2f5f4e55cbc7 (diff) | |
download | scala-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/treeset.scala')
-rw-r--r-- | test/files/scalacheck/treeset.scala | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/test/files/scalacheck/treeset.scala b/test/files/scalacheck/treeset.scala index e6d1b50860..98e38c8219 100644 --- a/test/files/scalacheck/treeset.scala +++ b/test/files/scalacheck/treeset.scala @@ -6,8 +6,11 @@ import Arbitrary._ import util._ object Test extends Properties("TreeSet") { - implicit def arbTreeSet[A : Arbitrary : Ordering]: Arbitrary[TreeSet[A]] = - Arbitrary(listOf(arbitrary[A]) map (elements => TreeSet(elements: _*))) + def genTreeSet[A: Arbitrary: Ordering]: Gen[TreeSet[A]] = + for { + elements <- listOf(arbitrary[A]) + } yield TreeSet(elements: _*) + implicit def arbTreeSet[A : Arbitrary : Ordering]: Arbitrary[TreeSet[A]] = Arbitrary(genTreeSet) property("foreach/iterator consistency") = forAll { (subject: TreeSet[Int]) => val it = subject.iterator @@ -92,6 +95,17 @@ object Test extends Properties("TreeSet") { prefix == subject.take(n) && suffix == subject.drop(n) } + def genSliceParms = for { + tree <- genTreeSet[Int] + 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: TreeSet[Int]) => val result = subject.takeWhile(_ < 0) result.forall(_ < 0) && result == subject.take(result.size) |