package ch.akuhn.util;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import org.junit.Test;
public class CycleDetectorTest {
static class CD extends CycleDetector<Integer> {
private Map<Integer,Collection<Integer>> data = new TreeMap<Integer,Collection<Integer>>();
@Override
public Collection<Integer> getChildren(Integer key) {
return data.get(key);
}
public CD node(Integer i, Integer... is) {
data.put(i, Arrays.asList(is));
return (CD) this.put(i);
}
}
@Test
public void cycleOfOne() {
CD cd = new CD().node(1, 1);
List<Integer> cycle = cd.getCycle();
assertNotNull(cycle);
assertEquals(1, cycle.size());
}
@Test
public void cycleOfThree() {
CD cd = new CD().node(1, 2).node(2, 3).node(3, 1);
List<Integer> cycle = cd.getCycle();
assertNotNull(cycle);
assertEquals(3, cycle.size());
}
@Test
public void emptyGraph() {
CD cd = new CD();
assertEquals(null, cd.getCycle());
}
@Test
public void hasCycle() {
CD cd = new CD().node(1, 2).node(2);
assertEquals(false, cd.hasCycle());
cd = new CD().node(1, 2).node(2, 1);
assertEquals(true, cd.hasCycle());
}
@Test
public void noCycle() {
CD cd = new CD().node(1, 2, 3, 4).node(2, 3).node(3, 4).node(4);
List<Integer> cycle = cd.getCycle();
assertNull(cycle);
}
@Test
public void someCycle() {
CD cd = new CD().node(1, 2, 3, 4).node(2, 3).node(3, 4).node(4, 2);
List<Integer> cycle = cd.getCycle();
assertNotNull(cycle);
}
}