Browse Source

VectorSet#remove doesn't work if the vector is at its capacity

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@910989 13f79535-47bb-0310-9956-ffa450edef68
master
Stefan Bodewig 15 years ago
parent
commit
0f8c5ae4bf
2 changed files with 46 additions and 2 deletions
  1. +4
    -2
      src/main/org/apache/tools/ant/util/VectorSet.java
  2. +42
    -0
      src/tests/junit/org/apache/tools/ant/util/VectorSetTest.java

+ 4
- 2
src/main/org/apache/tools/ant/util/VectorSet.java View File

@@ -153,8 +153,10 @@ public final class VectorSet extends Vector {
// shouldn't trust it
if (set.remove(o)) {
int index = indexOf(o);
System.arraycopy(elementData, index + 1, elementData, index,
size() - index);
if (index < elementData.length - 1) {
System.arraycopy(elementData, index + 1, elementData, index,
elementData.length - index - 1);
}
elementCount--;
return true;
}


+ 42
- 0
src/tests/junit/org/apache/tools/ant/util/VectorSetTest.java View File

@@ -109,6 +109,48 @@ public class VectorSetTest extends TestCase {
assertFalse(v.remove(O));
}

public void testRemoveAtEndWhenSizeEqualsCapacity() {
v = new VectorSet(3, 1);
Object a = new Object();
v.add(a);
v.add(new Object());
v.add(O);
assertEquals(3, v.size());
assertEquals(3, v.capacity());
assertTrue(v.remove(O));
assertEquals(2, v.size());
assertFalse(v.remove(O));
assertSame(a, v.elementAt(0));
}

public void testRemoveAtFrontWhenSizeEqualsCapacity() {
v = new VectorSet(3, 1);
v.add(O);
Object a = new Object();
v.add(a);
v.add(new Object());
assertEquals(3, v.size());
assertEquals(3, v.capacity());
assertTrue(v.remove(O));
assertEquals(2, v.size());
assertFalse(v.remove(O));
assertSame(a, v.elementAt(0));
}

public void testRemoveInMiddleWhenSizeEqualsCapacity() {
v = new VectorSet(3, 1);
Object a = new Object();
v.add(a);
v.add(O);
v.add(new Object());
assertEquals(3, v.size());
assertEquals(3, v.capacity());
assertTrue(v.remove(O));
assertEquals(2, v.size());
assertFalse(v.remove(O));
assertSame(a, v.elementAt(0));
}

public void testRemoveAll() {
v.add(O);
assertTrue(v.removeAll(Arrays.asList(new Object[] {O, O})));


Loading…
Cancel
Save