diff options
author | Lukas Rytz <lukas.rytz@typesafe.com> | 2014-07-20 23:12:48 +0200 |
---|---|---|
committer | Lukas Rytz <lukas.rytz@typesafe.com> | 2014-07-20 23:12:48 +0200 |
commit | afa96e3be767935cfe128d9365c8c9e04355dfde (patch) | |
tree | fa9b18d772ca8104ebc42f7e51ac06cb488cae85 | |
parent | abdd570cee5788000724c6d3b89a978c48a7fa39 (diff) | |
parent | c7cc1a803764b4d26dd23d2baf34a27a3a40f682 (diff) | |
download | scala-afa96e3be767935cfe128d9365c8c9e04355dfde.tar.gz scala-afa96e3be767935cfe128d9365c8c9e04355dfde.tar.bz2 scala-afa96e3be767935cfe128d9365c8c9e04355dfde.zip |
Merge pull request #3887 from Ichoran/issue/8738
SI-8738 Regression in range equality
-rw-r--r-- | src/library/scala/collection/immutable/Range.scala | 19 | ||||
-rw-r--r-- | test/files/run/t8738.scala | 16 |
2 files changed, 26 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) } diff --git a/test/files/run/t8738.scala b/test/files/run/t8738.scala new file mode 100644 index 0000000000..6898301db7 --- /dev/null +++ b/test/files/run/t8738.scala @@ -0,0 +1,16 @@ +object Test { + def check(a: Range, b: Range) = (a == b) == (a.toList == b.toList) + def main(args: Array[String]) { + val lo = -2 to 2 + val hi = lo + val step = List(-6,-2,-1,1,2,6) + for (i <- lo; j <- hi; n <- step; k <- lo; l <- hi; m <- step) { + assert( + check(i until j by n, k until l by m) && + check(i until j by n, k to l by m) && + check(i to j by n, k until l by m) && + check(i to j by n, k to l by m) + ) + } + } +} |