diff options
author | Rex Kerr <ichoran@gmail.com> | 2014-11-28 19:24:02 -0800 |
---|---|---|
committer | Rex Kerr <ichoran@gmail.com> | 2015-07-19 13:58:50 -0700 |
commit | 23203f72c763ac847de763573731310989e84b2a (patch) | |
tree | f4be90db72a10878fac591a5b370aa6a39c810e4 /src/library/scala/collection/mutable/ArrayBuffer.scala | |
parent | 8f0c4b42617903ef974e25ff45250a34e93f40e7 (diff) | |
download | scala-23203f72c763ac847de763573731310989e84b2a.tar.gz scala-23203f72c763ac847de763573731310989e84b2a.tar.bz2 scala-23203f72c763ac847de763573731310989e84b2a.zip |
SI-8554 Two-arg remove throws exception on large count
ListBuffer now throws exceptions like other buffers do when trying to index out of range.
Also harmonized the order of testing (`count < 0` tested before `n` in range).
Test in scala-collection-laws (gated by SI8554 flag). Also modified test in run/t6634.scala
Diffstat (limited to 'src/library/scala/collection/mutable/ArrayBuffer.scala')
-rw-r--r-- | src/library/scala/collection/mutable/ArrayBuffer.scala | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/library/scala/collection/mutable/ArrayBuffer.scala b/src/library/scala/collection/mutable/ArrayBuffer.scala index 011fd415ee..167e04ccbd 100644 --- a/src/library/scala/collection/mutable/ArrayBuffer.scala +++ b/src/library/scala/collection/mutable/ArrayBuffer.scala @@ -149,13 +149,16 @@ class ArrayBuffer[A](override protected val initialSize: Int) /** Removes the element on a given index position. It takes time linear in * the buffer size. * - * @param n the index which refers to the first element to delete. - * @param count the number of elements to delete - * @throws IndexOutOfBoundsException if `n` is out of bounds. + * @param n the index which refers to the first element to remove. + * @param count the number of elements to remove. + * @throws IndexOutOfBoundsException if the index `n` is not in the valid range + * `0 <= n <= length - count` (with `count > 0`). + * @throws IllegalArgumentException if `count < 0`. */ override def remove(n: Int, count: Int) { - require(count >= 0, "removing negative number of elements") - if (n < 0 || n > size0 - count) throw new IndexOutOfBoundsException(n.toString) + if (count < 0) throw new IllegalArgumentException("removing negative number of elements: " + count.toString) + else if (count == 0) return // Did nothing + if (n < 0 || n > size0 - count) throw new IndexOutOfBoundsException("at " + n.toString + " deleting " + count.toString) copy(n + count, n, size0 - (n + count)) reduceToSize(size0 - count) } |