package datastructures.graph; import esl.datastructures.graph.*; import esl.datastructures.graph.sample.DAG; import esl.datastructures.graph.sample.DAGEdge; import esl.datastructures.graph.sample.DAGNode; import org.apache.log4j.Logger; import org.junit.Test; import test.TestBase; public class DAGTraverserTest extends TestBase { private Logger logger = Logger.getLogger(DAGTraverserTest.class); public DAGTraverserTest() { super(); } @Test public void createGraphAndDFSTraverseTest() { final Graph<DAGNode, DAGEdge> graph = new DAG(); TraversalContext traversalContext = new TraversalContext(); traversalContext.setCx(""); DAGNode a = graph.getStartNode(); DAGNode b = graph.createNode("B"); DAGNode c = graph.createNode("C"); DAGNode d = graph.createNode("D"); DAGNode e = graph.createNode("E"); DAGNode f = graph.createNode("F"); DAGNode g = graph.createNode("G"); graph.createEdge("l1", a, b); graph.createEdge("l2", a, c); graph.createEdge("l3", a, e); graph.createEdge("l4", b, d); graph.createEdge("l5", b, f); graph.createEdge("l6", c, g); graph.createEdge("l7", c, f); graph.createEdge("l8", e, f); DFSTraverser<DAGNode, DAGEdge> traverser = new DFSTraverser<DAGNode, DAGEdge>(); traverser.setTraversalContext(traversalContext); traverser.setNodeVisitorCallback(new NodeVisitor() { @Override public void visit(Node node, TraversalContext context) { context.setCx(context.getCx() + " -> " + node.name()); logger.info("[Visiting] " + node.name()); } }); traverser.setEdgeVisitorCallback(new EdgeVisitor() { @Override public void visit(Edge edge, TraversalContext context) { if (edge.label() != null) logger.info("[Traversing] " + edge.label()); logger.info("[Traversing] Edge from " + graph.getOriginNode((DAGEdge) edge).name() + " to " + graph.getDestinationNode((DAGEdge) edge).name()); } }); traverser.start(graph); logger.info("Done " + traversalContext.getCx()); } }