summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Zitnik <mark.zitnik@gmail.com>2015-01-18 18:34:15 +0200
committerMark Zitnik <mark.zitnik@gmail.com>2015-01-18 18:34:15 +0200
commitfb043761806f8ef2c7a662f15ba5ac5731426dbf (patch)
treefbda68065784bdffb3595ec6a2c13b4fda1e2775
parentd395e52eb1aad201746d978e31a350756d846614 (diff)
downloadscala-fb043761806f8ef2c7a662f15ba5ac5731426dbf.tar.gz
scala-fb043761806f8ef2c7a662f15ba5ac5731426dbf.tar.bz2
scala-fb043761806f8ef2c7a662f15ba5ac5731426dbf.zip
SI-9072 Vector ++ concatenation of parallel collection cause inconsistent results
-rw-r--r--src/library/scala/collection/immutable/Vector.scala2
-rw-r--r--test/junit/scala/collection/immutable/VectorTest.scala20
2 files changed, 21 insertions, 1 deletions
diff --git a/src/library/scala/collection/immutable/Vector.scala b/src/library/scala/collection/immutable/Vector.scala
index c7da447f72..47a623a616 100644
--- a/src/library/scala/collection/immutable/Vector.scala
+++ b/src/library/scala/collection/immutable/Vector.scala
@@ -215,7 +215,7 @@ override def companion: GenericCompanion[Vector] = Vector
import Vector.{Log2ConcatFaster, TinyAppendFaster}
if (that.isEmpty) this.asInstanceOf[That]
else {
- val again = if (!that.isTraversableAgain) that.toVector else that
+ val again = if (!that.isTraversableAgain) that.toVector else that.seq
again.size match {
// Often it's better to append small numbers of elements (or prepend if RHS is a vector)
case n if n <= TinyAppendFaster || n < (this.size >> Log2ConcatFaster) =>
diff --git a/test/junit/scala/collection/immutable/VectorTest.scala b/test/junit/scala/collection/immutable/VectorTest.scala
new file mode 100644
index 0000000000..e7edba3e43
--- /dev/null
+++ b/test/junit/scala/collection/immutable/VectorTest.scala
@@ -0,0 +1,20 @@
+package scala.collection.immutable
+
+import org.junit.{Assert, Test}
+import org.junit.runner.RunWith
+import org.junit.runners.JUnit4
+
+@RunWith(classOf[JUnit4])
+class VectorTest {
+ /**
+ * Test Vector ++ with a small parallel collection concatenation (SI-9072).
+ *
+ */
+ @Test
+ def testPlusPlus(): Unit = {
+ val smallVec = (0 to 1)
+ val smallParVec = smallVec.par
+ val testElementsSize = (0 to 1000).map( _ => Vector.empty ++ smallParVec )
+ Assert.assertTrue(testElementsSize.forall( v => v.size == 2 ))
+ }
+}