package com.limegroup.gnutella.util;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import junit.framework.Test;
public class MultiIteratorTest extends BaseTestCase {
public MultiIteratorTest(String name) {
super(name);
}
public static Test suite() {
return buildTestSuite(MultiIteratorTest.class);
}
public void testSeqTraversal() throws Exception {
List l1 = new ArrayList();
for (int i =0;i < 10; i++)
l1.add(new Integer(i));
List l2 = new ArrayList();
for (int i = 10;i < 20; i++)
l2.add(new Integer(i));
List l3 = new ArrayList();
for (int i = 20;i < 30; i++)
l3.add(new Integer(i));
List control = new ArrayList();
control.addAll(l1);
control.addAll(l2);
control.addAll(l3);
List test = new ArrayList();
for(Iterator iter = new MultiIterator(
new Iterator[]{l1.iterator(),
Collections.EMPTY_LIST.iterator(),
l2.iterator(),
Collections.EMPTY_LIST.iterator(),
l3.iterator(),
Collections.EMPTY_LIST.iterator()});
iter.hasNext();)
test.add(iter.next());
assertEquals(control.size(),test.size());
for(int i = 0; i < control.size();i++)
assertEquals(control.get(i),test.get(i));
}
public void testRRTraversal() throws Exception {
List l1 = new ArrayList();
for (int i =0;i < 10; i++)
l1.add(new Integer(i));
List l2 = new ArrayList();
for (int i = 10;i < 20; i++)
l2.add(new Integer(i));
List l3 = new ArrayList();
for (int i = 20;i < 30; i++)
l3.add(new Integer(i));
List control = new ArrayList();
for(int i = 0; i < 10; i++) {
control.add(l1.get(i));
control.add(l2.get(i));
control.add(l3.get(i));
}
List test = new ArrayList();
for(Iterator iter = new MultiRRIterator(
new Iterator[]{l1.iterator(),
l2.iterator(),
l3.iterator(),
Collections.EMPTY_LIST.iterator()});
iter.hasNext();)
test.add(iter.next());
assertEquals(control.size(),test.size());
for(int i = 0; i < control.size();i++)
assertEquals(control.get(i),test.get(i));
}
public void testRRRemoval() throws Exception {
List l1 = new ArrayList();
for (int i =0;i < 10; i++)
l1.add(new Integer(i));
List l2 = new ArrayList();
for (int i = 10;i < 20; i++)
l2.add(new Integer(i));
List l3 = new ArrayList();
for (int i = 20;i < 30; i++)
l3.add(new Integer(i));
int j = 6;
for(Iterator iter = new MultiRRIterator(
new Iterator[]{l1.iterator(),
l2.iterator(),
l3.iterator(),
Collections.EMPTY_LIST.iterator()});
iter.hasNext() && j > 0;) {
iter.next();
iter.remove();
j--;
}
assertEquals(8,l1.size());
for (int i = 2; i < 10; i++)
assertTrue(l1.contains(new Integer(i)));
assertEquals(8,l2.size());
for (int i = 12; i < 20; i++)
assertTrue(l2.contains(new Integer(i)));
assertEquals(8,l3.size());
for (int i = 22; i < 30; i++)
assertTrue(l3.contains(new Integer(i)));
}
}