summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@typesafe.com>2013-12-03 23:50:09 -0800
committerAdriaan Moors <adriaan.moors@typesafe.com>2013-12-03 23:50:09 -0800
commit394da59828b830f639d2418960052655d9dd040a (patch)
treed22ac3913d6889640bca2cdf3c90a286fff2795e
parentf9a3b8206b9235edde322a446fa329f38667306e (diff)
parent03bf97e0893b227812125f7c049fdac254181cb2 (diff)
downloadscala-394da59828b830f639d2418960052655d9dd040a.tar.gz
scala-394da59828b830f639d2418960052655d9dd040a.tar.bz2
scala-394da59828b830f639d2418960052655d9dd040a.zip
Merge pull request #3213 from Ichoran/issue/8014
Fixes SI-8014, regression in Vector ++ TraversableOnce.
-rw-r--r--src/library/scala/collection/immutable/Vector.scala2
-rw-r--r--test/junit/scala/collection/VectorTest.scala51
2 files changed, 52 insertions, 1 deletions
diff --git a/src/library/scala/collection/immutable/Vector.scala b/src/library/scala/collection/immutable/Vector.scala
index b689bfdfd5..c7da447f72 100644
--- a/src/library/scala/collection/immutable/Vector.scala
+++ b/src/library/scala/collection/immutable/Vector.scala
@@ -227,7 +227,7 @@ override def companion: GenericCompanion[Vector] = Vector
val ri = this.reverseIterator
while (ri.hasNext) v = ri.next +: v
v.asInstanceOf[That]
- case _ => super.++(that)
+ case _ => super.++(again)
}
}
}
diff --git a/test/junit/scala/collection/VectorTest.scala b/test/junit/scala/collection/VectorTest.scala
new file mode 100644
index 0000000000..e9c4d44a72
--- /dev/null
+++ b/test/junit/scala/collection/VectorTest.scala
@@ -0,0 +1,51 @@
+package scala.collection.mutable
+
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+import org.junit.Test
+import scala.collection.mutable
+
+@RunWith(classOf[JUnit4])
+/* Test for SI-8014 and ++ in general */
+class VectorTest {
+ val noVec = Vector.empty[Int]
+ val smallVec = Vector.range(0,3)
+ val bigVec = Vector.range(0,64)
+ val smsm = Vector.tabulate(2 * smallVec.length)(i => (i % smallVec.length))
+ val smbig = Vector.tabulate(smallVec.length + bigVec.length)(i =>
+ if (i < smallVec.length) i else i - smallVec.length
+ )
+ val bigsm = Vector.tabulate(smallVec.length + bigVec.length)(i =>
+ if (i < bigVec.length) i else i - bigVec.length
+ )
+ val bigbig = Vector.tabulate(2 * bigVec.length)(i => (i % bigVec.length))
+
+
+ val vecs = List(noVec, smallVec, bigVec)
+ val ans = List(
+ vecs,
+ List(smallVec, smsm, smbig),
+ List(bigVec, bigsm, bigbig)
+ )
+
+ @Test
+ def vectorCat() {
+ val cats = vecs.map(a => vecs.map(a ++ _))
+ assert( cats == ans )
+ }
+
+ @Test
+ def iteratorCat() {
+ def its = vecs.map(_.toList.toIterator)
+ val cats = vecs.map(a => its.map(a ++ _))
+ println(cats)
+ assert( cats == ans )
+ }
+
+ @Test
+ def arrayCat() {
+ val ars = vecs.map(_.toArray)
+ val cats = vecs.map(a => ars.map(a ++ _))
+ assert( cats == ans )
+ }
+}