diff options
author | Mark Zitnik <mark.zitnik@gmail.com> | 2015-01-18 18:34:15 +0200 |
---|---|---|
committer | Mark Zitnik <mark.zitnik@gmail.com> | 2015-01-18 18:34:15 +0200 |
commit | fb043761806f8ef2c7a662f15ba5ac5731426dbf (patch) | |
tree | fbda68065784bdffb3595ec6a2c13b4fda1e2775 | |
parent | d395e52eb1aad201746d978e31a350756d846614 (diff) | |
download | scala-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.scala | 2 | ||||
-rw-r--r-- | test/junit/scala/collection/immutable/VectorTest.scala | 20 |
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 )) + } +} |