package net.varkhan.data.diff;
import junit.framework.TestCase;
import net.varkhan.base.containers.Iterable;
import net.varkhan.base.containers.Iterator;
import net.varkhan.base.containers.array.Arrays;
import net.varkhan.base.containers.list.List;
import java.util.Comparator;
//import java.util.Iterator;
public class EugeneMyersDiffTest extends TestCase {
public void testInvoke() throws Exception {
List<String> ls1=Arrays.asList("a", "b", "c", "d", "e");
List<String> ls2=Arrays.asList("a", "b", "x", "c", "y", "z");
Diff<String,List<String>,Object> differ=new EugeneMyersDiff<String,List<String>,Object>(
new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if(o1==null&&o2==null) return 0;
if(o1==null) return +1;
if(o2==null) return -1;
else return o1.compareTo(o2);
}
}
);
Iterable<Diff.Block<String>> diffs=differ.invoke(ls1, ls2, null);
assertIteratorEquals(
"diff("+ls1.toString()+"<>"+ls2.toString()+")",
Arrays.asList(
new DiffBlock<String>(null, 2, 2, null, 2, 3),
new DiffBlock<String>(null, 3, 5, null, 4, 6)
).iterator(),
diffs.iterator()
);
}
protected <T> void assertIteratorEquals(String mes, Iterator<? extends T> exp, Iterator<? extends T> act) {
int i=0;
while(exp.hasNext() && act.hasNext()) {
assertEquals(mes+" ["+(i++)+"]==",exp.next(),act.next());
}
assertEquals(mes+" ["+i+"]--", false, exp.hasNext());
assertEquals(mes+" ["+i+"]++", false, act.hasNext());
}
}