summaryrefslogtreecommitdiff
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
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.
-rw-r--r--src/library/scala/collection/immutable/Range.scala19
-rw-r--r--test/files/run/t8738.scala16
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)
+ )
+ }
+ }
+}