summaryrefslogtreecommitdiff
path: root/src/library/scala/collection/immutable/Range.scala
diff options
context:
space:
mode:
authorRex Kerr <ichoran@gmail.com>2014-07-20 12:36:25 -0700
committerRex Kerr <ichoran@gmail.com>2014-07-20 12:39:12 -0700
commitc7cc1a803764b4d26dd23d2baf34a27a3a40f682 (patch)
treefa9b18d772ca8104ebc42f7e51ac06cb488cae85 /src/library/scala/collection/immutable/Range.scala
parentabdd570cee5788000724c6d3b89a978c48a7fa39 (diff)
downloadscala-c7cc1a803764b4d26dd23d2baf34a27a3a40f682.tar.gz
scala-c7cc1a803764b4d26dd23d2baf34a27a3a40f682.tar.bz2
scala-c7cc1a803764b4d26dd23d2baf34a27a3a40f682.zip
SI-8738 Regression in range equality
Missed the case of comparing a non-empty range to an empty one. Fixed by checking nonEmpty/isEmpty on other collection. Added a test to verify the behavior.
Diffstat (limited to 'src/library/scala/collection/immutable/Range.scala')
-rw-r--r--src/library/scala/collection/immutable/Range.scala19
1 files changed, 10 insertions, 9 deletions
diff --git a/src/library/scala/collection/immutable/Range.scala b/src/library/scala/collection/immutable/Range.scala
index 26ccd09803..720dfeed59 100644
--- a/src/library/scala/collection/immutable/Range.scala
+++ b/src/library/scala/collection/immutable/Range.scala
@@ -364,15 +364,16 @@ extends scala.collection.AbstractSeq[Int]
override def equals(other: Any) = other match {
case x: Range =>
// Note: this must succeed for overfull ranges (length > Int.MaxValue)
- (x canEqual this) && (
- isEmpty || // all empty sequences are equal
- (start == x.start && { // Otherwise, must have same start
- val l0 = last
- (l0 == x.last && ( // And same end
- start == l0 || step == x.step // And either the same step, or not take any steps
- ))
- })
- )
+ (x canEqual this) && {
+ if (isEmpty) x.isEmpty // empty sequences are equal
+ else // this is non-empty...
+ x.nonEmpty && start == x.start && { // ...so other must contain something and have same start
+ val l0 = last
+ (l0 == x.last && ( // And same end
+ start == l0 || step == x.step // And either the same step, or not take any steps
+ ))
+ }
+ }
case _ =>
super.equals(other)
}