package aQute.libg.tarjan;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import aQute.lib.collections.MultiMap;
import junit.framework.TestCase;
public class TestTarjan extends TestCase {
public void testTarjan() throws Exception {
MultiMap<String,String> g = mkGraph("A{BC}B{A}C{DE}D{C}E{D}");
System.err.println(g);
Collection< ? extends Collection<String>> scc = Tarjan.tarjan(g);
assertEquals(2, scc.size());
for (Collection<String> set : scc) {
if (set.size() == 3)
assertEquals(new HashSet<String>(Arrays.asList("E", "C", "D")), set);
else if (set.size() == 2)
assertEquals(new HashSet<String>(Arrays.asList("B", "A")), set);
else
fail();
}
}
private MultiMap<String,String> mkGraph(String string) {
MultiMap<String,String> map = new MultiMap<String,String>();
String key = null;
for (int i = 0; i < string.length(); i++) {
char c = string.charAt(i);
switch (c) {
case '{' :
break;
case '}' :
key = null;
break;
default :
if (key == null) {
key = c + "";
map.put(key, new ArrayList<String>());
} else
map.add(key, c + "");
}
}
return map;
}
}