diff options
author | Josh Suereth <joshua.suereth@gmail.com> | 2012-09-10 16:13:51 -0400 |
---|---|---|
committer | Josh Suereth <joshua.suereth@gmail.com> | 2012-09-14 09:53:02 -0400 |
commit | f3fd018f145ffc02de03744259ba585d8152483f (patch) | |
tree | 6d7f80d910542cb50daceb1e3b52ea3145409d3d /test/files/run/t4813.scala | |
parent | 76d4e9a8071f9e102106696664376b7f70622582 (diff) | |
download | scala-f3fd018f145ffc02de03744259ba585d8152483f.tar.gz scala-f3fd018f145ffc02de03744259ba585d8152483f.tar.bz2 scala-f3fd018f145ffc02de03744259ba585d8152483f.zip |
Fix SI-4813 - Clone doesn't work on LinkedList.
* Added extensive test for clone across all standard mutable collections
* Fixed clone implementations when needed so they work.
Diffstat (limited to 'test/files/run/t4813.scala')
-rw-r--r-- | test/files/run/t4813.scala | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/test/files/run/t4813.scala b/test/files/run/t4813.scala new file mode 100644 index 0000000000..6d48ca8758 --- /dev/null +++ b/test/files/run/t4813.scala @@ -0,0 +1,37 @@ +import collection.mutable._ +import reflect._ + + +object Test extends App { + def runTest[T, U](col: T)(clone: T => U)(mod: T => Unit)(implicit ct: ClassTag[T]): Unit = { + val cloned = clone(col) + assert(cloned == col, s"cloned should be equal to original. $cloned != $col") + mod(col) + assert(cloned != col, s"cloned should not modify when original does: $ct") + } + + // Seqs + runTest(ArrayBuffer(1,2,3))(_.clone) { buf => buf transform (_ + 1) } + runTest(ArraySeq(1,2,3))(_.clone) { buf => buf transform (_ + 1) } + runTest(Buffer(1,2,3))(_.clone) { buf => buf transform (_ + 1) } + runTest(DoubleLinkedList(1,2,3))(_.clone) { buf => buf transform (_ + 1) } + runTest(IndexedSeq(1,2,3))(_.clone) { buf => buf transform (_ + 1) } + runTest(LinearSeq(1,2,3))(_.clone) { buf => buf transform (_ + 1) } + runTest(LinkedList(1,2,3))(_.clone) { buf => buf transform (_ + 1) } + runTest(ListBuffer(1,2,3))(_.clone) { buf => buf transform (_ + 1) } + runTest(MutableList(1,2,3))(_.clone) { buf => buf transform (_ + 1) } + runTest(Queue(1,2,3))(_.clone) { buf => buf transform (_ + 1) } + runTest(Stack(1,2,3))(_.clone) { buf => buf transform (_ + 1) } + + // Sets + runTest(BitSet(1,2,3))(_.clone) { buf => buf add 4 } + runTest(HashSet(1,2,3))(_.clone) { buf => buf add 4 } + runTest(Set(1,2,3))(_.clone) { buf => buf add 4 } + runTest(SortedSet(1,2,3))(_.clone) { buf => buf add 4 } + runTest(TreeSet(1,2,3))(_.clone) { buf => buf add 4 } + + // Maps + runTest(HashMap(1->1,2->2,3->3))(_.clone) { buf => buf put (4,4) } + runTest(WeakHashMap(1->1,2->2,3->3))(_.clone) { buf => buf put (4,4) } +} + |