package org.limewire.collection;
import java.util.ArrayList;
import java.util.List;
import java.util.NoSuchElementException;
import junit.framework.Test;
import org.limewire.util.BaseTestCase;
@SuppressWarnings("unchecked")
public class ListPartitionerTest extends BaseTestCase {
public ListPartitionerTest(String name) {
super(name);
}
public static Test suite() {
return buildTestSuite(ListPartitionerTest.class);
}
public void testEmpty() throws Exception {
ListPartitioner l = new ListPartitioner(new ArrayList(), 10);
for (int i = 0; i < 10; i++)
assertTrue(l.getPartition(i).isEmpty());
try {
l.getPartition(11);
fail("should have thrown NSEX");
} catch (NoSuchElementException expected){}
}
public void testPartitionsAppear() throws Exception {
List list = new ArrayList();
ListPartitioner partitioner = new ListPartitioner(list, 5);
// add one element - the first and last partition should
// be the same and have 1 element
// (the objects themselves are not the same since a new sublist is created every time)
Object o = new Object();
list.add(o);
List zero = partitioner.getPartition(0);
List first = partitioner.getFirstPartition();
List last = partitioner.getLastPartition();
assertEquals(1, zero.size());
assertEquals(1, first.size());
assertEquals(1, last.size());
assertSame(o, zero.get(0));
assertSame(o, first.get(0));
assertSame(o, last.get(0));
// the rest empty
for (int i = 1; i < 5; i++)
assertTrue(partitioner.getPartition(i).isEmpty());
// add a second object, an new partition should appear
Object o2 = new Object();
list.add(o2);
zero = partitioner.getPartition(0);
first = partitioner.getFirstPartition();
last = partitioner.getLastPartition();
List one = partitioner.getPartition(1);
assertEquals(1, zero.size());
assertEquals(1, one.size());
assertEquals(1, first.size());
assertEquals(1, last.size());
assertSame(o, zero.get(0));
assertSame(o, first.get(0));
assertSame(o2, one.get(0));
assertSame(o2, last.get(0));
// the rest empty
for (int i = 2; i < 5; i++)
assertTrue(partitioner.getPartition(i).isEmpty());
}
public void testPartitionsResize() throws Exception {
List list = new ArrayList();
ListPartitioner partitioner = new ListPartitioner(list, 5);
// add 50 objects - each partition should have 10
for (int i = 0; i < 50; i++)
list.add(new Object());
for (int i = 1; i < 5; i++)
assertEquals(10,partitioner.getPartition(i).size());
// remove all objects from one of the partitions
List partition = partitioner.getPartition(1);
partition.clear();
// all partitions will hold 8 objects after re-creation
for (int i = 1; i < 5; i++)
assertEquals(8,partitioner.getPartition(i).size());
}
public void testLastPartitionExtends() throws Exception {
List list = new ArrayList();
ListPartitioner partitioner = new ListPartitioner(list, 2);
// 2 partitions, 1 object in first, 2 in the second
list.add(new Object());
list.add(new Object());
list.add(new Object());
assertEquals(1, partitioner.getPartition(0).size());
assertEquals(2, partitioner.getPartition(1).size());
// with 5 objects there will be 2 in the first and 3 in the second
list.add(new Object());
list.add(new Object());
assertEquals(2, partitioner.getPartition(0).size());
assertEquals(3, partitioner.getPartition(1).size());
}
}