blob: 11491e3ac541f73ef53c99ecbbe242130d8407bf [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.apache.tools.ant.util;
import java.util.ArrayList;
import java.util.Arrays;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
public class VectorSetTest {
private static final Object O = new Object();
private VectorSet v = new VectorSet();
@Test
public void testAdd() {
assertTrue(v.add(O));
assertFalse(v.add(O));
assertEquals(1, v.size());
}
@Test
public void testAdd2() {
v.add(0, O);
v.add(1, O);
assertEquals(1, v.size());
}
@Test
public void testAddElement() {
v.addElement(O);
v.addElement(O);
assertEquals(1, v.size());
}
@Test
public void testAddAll() {
assertTrue(v.addAll(Arrays.asList(new Object[] {O, O})));
assertEquals(1, v.size());
}
@Test
public void testAddAll2() {
assertTrue(v.addAll(0, Arrays.asList(new Object[] {O, O})));
assertEquals(1, v.size());
}
@Test
public void testClear() {
v.add(O);
v.clear();
assertEquals(0, v.size());
}
@Test
public void testClone() {
v.add(O);
Object o = v.clone();
assertTrue(o instanceof VectorSet);
VectorSet vs = (VectorSet) o;
assertEquals(1, vs.size());
assertTrue(vs.contains(O));
}
@Test
public void testContains() {
assertFalse(v.contains(O));
v.add(O);
assertTrue(v.contains(O));
assertFalse(v.contains(null));
}
@Test
public void testContainsAll() {
assertFalse(v.containsAll(Arrays.asList(new Object[] {O, O})));
v.add(O);
assertTrue(v.containsAll(Arrays.asList(new Object[] {O, O})));
assertFalse(v.containsAll(Arrays.asList(new Object[] {O, null})));
}
@Test
public void testInsertElementAt() {
v.insertElementAt(O, 0);
v.insertElementAt(O, 1);
assertEquals(1, v.size());
}
@Test
public void testRemoveIndex() {
v.add(O);
assertSame(O, v.remove(0));
assertEquals(0, v.size());
try {
v.remove(0);
fail("expected an AIOBE");
} catch (ArrayIndexOutOfBoundsException e) {
//TODO assert exception values
// expected
}
}
@Test
public void testRemoveObject() {
v.add(O);
assertTrue(v.remove(O));
assertEquals(0, v.size());
assertFalse(v.remove(O));
}
@Test
public void testRemoveAtEndWhenSizeEqualsCapacity() {
v = new VectorSet(3, 1);
Object a = new Object();
v.add(a);
Object b = new Object();
v.add(b);
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));
assertSame(b, v.elementAt(1));
}
@Test
public void testRemoveAtFrontWhenSizeEqualsCapacity() {
v = new VectorSet(3, 1);
v.add(O);
Object a = new Object();
v.add(a);
Object b = new Object();
v.add(b);
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));
assertSame(b, v.elementAt(1));
}
@Test
public void testRemoveInMiddleWhenSizeEqualsCapacity() {
v = new VectorSet(3, 1);
Object a = new Object();
v.add(a);
v.add(O);
Object b = new Object();
v.add(b);
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));
assertSame(b, v.elementAt(1));
}
@Test
public void testRemoveAll() {
v.add(O);
assertTrue(v.removeAll(Arrays.asList(new Object[] {O, O})));
assertEquals(0, v.size());
assertFalse(v.removeAll(Arrays.asList(new Object[] {O, O})));
}
@Test
public void testRemoveAllElements() {
v.add(O);
v.removeAllElements();
assertEquals(0, v.size());
}
@Test
public void testRemoveElement() {
v.add(O);
assertTrue(v.removeElement(O));
assertEquals(0, v.size());
assertFalse(v.removeElement(O));
}
@Test
public void testRemoveElementAt() {
v.add(O);
v.removeElementAt(0);
assertEquals(0, v.size());
try {
v.removeElementAt(0);
fail("expected an AIOBE");
} catch (ArrayIndexOutOfBoundsException e) {
//TODO assert exception values
// expected
}
}
@Test
public void testRemoveRange() {
Object a = new Object();
Object b = new Object();
Object c = new Object();
v.addAll(Arrays.asList(new Object[] {O, a, b, c}));
v.removeRange(1, 3);
assertEquals(2, v.size());
assertTrue(v.contains(O));
assertTrue(v.contains(c));
}
@Test
public void testRetainAll() {
Object a = new Object();
Object b = new Object();
Object c = new Object();
v.addAll(Arrays.asList(new Object[] {O, a, b, c}));
assertEquals(0, v.indexOf(O));
assertTrue(v.retainAll(Arrays.asList(new Object[] {c, O})));
assertEquals(2, v.size());
assertTrue(v.contains(O));
assertTrue(v.contains(c));
assertEquals(0, v.indexOf(O));
}
@Test
public void testRetainAllReturnValueAndEmptiness() {
v.add(1);
v.add(2);
v.add(3);
assertTrue(v.retainAll(Arrays.asList(1, 2)));
assertEquals(2, v.size());
assertFalse(v.retainAll(Arrays.asList(1, 2)));
assertEquals(2, v.size());
assertTrue(v.retainAll(Arrays.asList(4, 5)));
assertEquals(0, v.size());
assertFalse(v.retainAll(Arrays.asList(4, 5)));
}
@Test
public void testSet() {
v.add(O);
Object a = new Object();
assertSame(O, v.set(0, a));
assertSame(a, v.get(0));
assertEquals(1, v.size());
}
@Test
public void testSetElementAt() {
v.add(O);
Object a = new Object();
v.setElementAt(a, 0);
assertSame(a, v.get(0));
assertEquals(1, v.size());
}
@Test
public void testRetainAllSpeed() {
int size = 50000;
for (int i = 0; i < size; i++) {
v.add(i);
v.add(i);
}
assertEquals(size, v.size());
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i = size - 4; i < 2 * size; i++) {
list.add(i);
v.add(i);
}
assertTrue(v.retainAll(list));
assertEquals(v.toString(), size + 4, v.size());
}
}