diff options
author | Paul Phillips <paulp@improving.org> | 2012-01-19 19:28:37 -0800 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2012-01-19 19:28:37 -0800 |
commit | 14ef1090325c3b85aa8c2dd7911445ec7e934743 (patch) | |
tree | 71e4382e4a76d22420562c13757d826f605e9994 | |
parent | 8deade7d868dbd79194621d815ee6eee46f9807d (diff) | |
parent | beeac27cb480399eb787b47ef83906dd91935640 (diff) | |
download | scala-14ef1090325c3b85aa8c2dd7911445ec7e934743.tar.gz scala-14ef1090325c3b85aa8c2dd7911445ec7e934743.tar.bz2 scala-14ef1090325c3b85aa8c2dd7911445ec7e934743.zip |
Merge branch 'pullRequestIssue5387-withTest' of https://github.com/cvogt/scala into develop
-rw-r--r-- | src/library/scala/collection/TraversableLike.scala | 2 | ||||
-rw-r--r-- | test/files/run/t5387.scala | 15 |
2 files changed, 16 insertions, 1 deletions
diff --git a/src/library/scala/collection/TraversableLike.scala b/src/library/scala/collection/TraversableLike.scala index b4813e6341..36d45c0c8a 100644 --- a/src/library/scala/collection/TraversableLike.scala +++ b/src/library/scala/collection/TraversableLike.scala @@ -535,7 +535,7 @@ trait TraversableLike[+A, +Repr] extends HasNewBuilder[A, Repr] val b = newBuilder var go = false for (x <- this) { - if (!p(x)) go = true + if (!go && !p(x)) go = true if (go) b += x } b.result diff --git a/test/files/run/t5387.scala b/test/files/run/t5387.scala new file mode 100644 index 0000000000..5d62a005a9 --- /dev/null +++ b/test/files/run/t5387.scala @@ -0,0 +1,15 @@ +/* + * This tests that the predicate of dropWhile is only evaluated as often as needed, see https://issues.scala-lang.org/browse/SI-5387 + */ +import scala.collection.immutable.ListMap +object Test extends App{ + val subject = ListMap(1->1,2->2,3->3,4->4,5->5) + val result = ListMap(3->3,4->4,5->5) + assert( result == subject.dropWhile{ + case (key, value) => { + assert( key <= 3, "predicate evaluated more often than needed, key "+key ) + key < 3 + } + } + ) +} |