package org.rdfhdt.hdt.iterator;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.rdfhdt.hdt.iterator.utils.MultiMerge;
import org.rdfhdt.hdt.iterator.utils.ReducerLeft;
import org.rdfhdt.hdt.iterator.utils.SortedReduceIterator;
public class MultiMergeTest {
List<Integer> listA, listB, listC, listOut, listOutB;
private List<Integer> getList(int[] ints) {
List<Integer> intList = new ArrayList<Integer>();
for (int index = 0; index < ints.length; index++)
{
intList.add(ints[index]);
}
return intList;
}
@Before
public void setUp() throws Exception {
int[] intsA = {1, 4, 6};
int[] intsB = {2, 4,7};
int[] intsC = {2,4,5, 9, 12};
Integer[] intsExpected = {1,2,2,4,4,4,5,6,7,9,12 };
Integer[] intsExpectedB = {1,2,4,5,6,7,9,12 };
listA=getList(intsA);
listB=getList(intsB);
listC=getList(intsC);
listOut=Arrays.asList(intsExpected);
listOutB=Arrays.asList(intsExpectedB);
}
private static class IntegerComparator implements Comparator<Integer>{
@Override
public int compare(Integer o1, Integer o2) {
return Integer.compare(o1, o2);
}
}
@Test
public void testCase() {
List<Iterator<Integer>> list = new ArrayList<>();
list.add(listA.iterator());
list.add(listB.iterator());
list.add(listC.iterator());
Iterator<Integer> it = new MultiMerge<Integer>(list.iterator(), new IntegerComparator());
it = new SortedReduceIterator<>(it, new ReducerLeft<Integer>());
Iterator<Integer> itE = listOutB.iterator();
while(it.hasNext()) {
assertEquals(itE.hasNext(), it.hasNext());
int val = it.next();
int valE = itE.next();
System.out.println(val);
assertEquals(val, valE);
}
assertEquals(itE.hasNext(), it.hasNext());
}
}