final Node root = (Node)obj[0];
final Map obj2node = (Map)obj[1];
final Node ln = (Node)obj2node.get(root.getObject().toString() + ".0");
final Node rn = (Node)obj2node.get(root.getObject().toString() + ".1");
CountingWalker walker = new CountingWalker() {
private int m_mode = 0;
public int visit(Graphable element, GraphTraversal traversal) {
element.setCount(getCount());
super.visit(element, traversal); //set count
if (m_mode == 0) {
if (element != root) {
m_mode++;
return(GraphTraversal.KILL_BRANCH);
}
}
else if (m_mode == 1) {
assertTrue(
(ln.isVisited() && element == rn) ||
(rn.isVisited() && element == ln)
);
m_mode++;
}
return(GraphTraversal.CONTINUE);
}
};
DepthFirstIterator iterator = createIterator();
BasicGraphTraversal traversal = new BasicGraphTraversal(
builder().getGraph(), walker, iterator
);
traversal.init();
iterator.setSource(root);
traversal.traverse();
//ensure that subnodes of first visited after root are not visited
final String id = (ln.getCount() < rn.getCount()) ?
ln.getObject().toString() :
rn.getObject().toString();
GraphVisitor visitor = new GraphVisitor() {
public int visit(Graphable component) {
String eid = component.getObject().toString();
if (eid.length() <= id.length()) assertTrue(component.isVisited());
else if (eid.startsWith(id)) assertTrue(!component.isVisited());
else assertTrue(component.isVisited());
return(0);
}
};
builder().getGraph().visitNodes(visitor);
assertTrue(walker.getCount() == (int)Math.pow(2,k)+1);
traversal.traverse();
builder().getGraph().visitNodes(visitor);
assertTrue(walker.getCount() == (int)Math.pow(2,k)+1);
}