/// <summary> /// Tests all actions for adjacencygraph and filtered graph. /// </summary> public void Test() { // The all action algorithms AdjacencyGraph g = GraphProvider.Fsm(); Console.WriteLine("Graph: {0} vertices, {1} edges, {2} eulerian trails", g.VerticesCount, g.EdgesCount, EulerianTrailAlgorithm.ComputeEulerianPathCount(g) ); // do layout EulerianTrailAlgorithm euler = CreateEulerianTrail(g); EdgeCollection temps = euler.AddTemporaryEdges(g); Console.WriteLine("Added {0} temporary edges", temps.Count); foreach (NamedEdge ne in temps) { ne.Name = "temporary"; } euler.Compute(); euler.RemoveTemporaryEdges(g); Console.WriteLine("Circuit: {0} edges", euler.Circuit.Count); foreach (NamedEdge e in euler.Circuit) { Console.WriteLine("{0}->{1} ({2})", (NamedVertex)e.Source, (NamedVertex)e.Target, e.Name ); } Console.WriteLine("Trails:"); foreach (EdgeCollection ec in euler.Trails( Traversal.FirstVertexIf(g.Vertices, new NameEqualPredicate("S0"))) ) { foreach (IEdge edge in ec) { Console.WriteLine("{0}->{1}, {2}", ((NamedVertex)edge.Source).Name, ((NamedVertex)edge.Target).Name, ((NamedEdge)edge).Name ); } Console.WriteLine(); } Console.WriteLine("Testing AdjacencyGraph"); TestAllActions(GraphProvider.Fsm(), @"../EdgeDfs"); // testing on filtered graph Console.WriteLine("Testing FilteredVertexAndEdgeListGraph"); TestAllActions(GraphProvider.FilteredFsm(), @"../FilteredEdgeDfs"); }
/// <summary> /// Executes edge dfs /// </summary> /// <param name="g"></param> public void TestAllActions(IVertexAndEdgeListGraph g, string path) { // Testing dfs all apth DepthFirstSearchAlgorithm dfs = new DepthFirstSearchAlgorithm(g); PredecessorRecorderVisitor visv = new PredecessorRecorderVisitor(); dfs.RegisterPredecessorRecorderHandlers(visv); IVertex s0 = Traversal.FirstVertexIf(g.Vertices, new NameEqualPredicate("S0")); dfs.Compute(s0); Console.WriteLine("vertex paths"); foreach (EdgeCollection ec in visv.AllPaths()) { foreach (IEdge edge in ec) { Console.WriteLine("{0}->{1}, {2}", ((NamedVertex)edge.Source).Name, ((NamedVertex)edge.Target).Name, ((NamedEdge)edge).Name ); } Console.WriteLine(); } // end of dfs test GraphvizAlgorithm gw = RenderActions(g, path); // The all action algorithms EdgeDepthFirstSearchAlgorithm edfs = CreateEdgeDfs(g); // add tracer AlgorithmTracerVisitor vis = AddTracer(edfs, path); // add predecessor recorder EdgePredecessorRecorderVisitor erec = AddPredecessorRecorder(edfs); // computing all actions edfs.Compute(s0); // display end path edges OutputEndPathEdges(erec); // display all actions path OutputAllActions(erec, gw, path); }