public void TraverseDfs_ReportsTheCycles_InDirectedGraphs([NotNull] string relationships, string expected) { var graph = new LiteralGraph(relationships, true); var result = new List <string>(); graph.TraverseDfs('A', True, True, (from, to) => { result.Add($"{from.Vertex}~{to.Vertex}"); return(true); }); Assert.AreEqual(expected, string.Join(",", result)); }
public void TraverseDfs_MarksNodesWithCorrectExitTimes([NotNull] string relationships, string expected) { var graph = new LiteralGraph(relationships, true); var result = new List <string>(); graph.TraverseDfs('A', True, node => { result.Add($"{node.Vertex}{node.ExitTime}"); return(true); }, (from, to) => true); Assert.AreEqual(expected, string.Join(",", result)); }
public void TraverseDfs_ReturnsProperSequence_ForDirectedGraph([NotNull] string relationships, string expected) { var graph = new LiteralGraph(relationships, true); var result = new List <string>(); graph.TraverseDfs('A', True, node => { Assert.IsNotNull(node); result.Add($"{node.Parent?.Vertex}>{node.Vertex}"); return(true); }, (from, to) => true); Assert.AreEqual(expected, string.Join(",", result)); }
public void TraverseDfs_InterruptsOnCycle([NotNull] string relationships, char killVertex, string expected) { var graph = new LiteralGraph(relationships, true); var result = new List <string>(); graph.TraverseDfs('A', True, node => { Assert.IsNotNull(node); result.Add($"{node.Parent?.Vertex}>{node.Vertex}"); return(true); }, (from, to) => to.Vertex != killVertex); Assert.AreEqual(expected, string.Join(",", result)); }
public void TraverseDfs_SelectsTheExpectedEdges_ForDirectedGraph([NotNull] string relationships, string expected) { var graph = new LiteralGraph(relationships, true); var result = new List <string>(); graph.TraverseDfs('A', node => { Assert.IsNotNull(node); result.Add(node.EntryEdge != null ? $"{node.EntryEdge}" : "()"); return(true); }, True, (from, to) => true); var actual = string.Join(",", result); Assert.AreEqual(expected, actual); }
public void TraverseDfs_ThrowsException_ForNullVisitationHandler() { var graph = new LiteralGraph("A>1>B", true); Assert.Throws <ArgumentNullException>(() => graph.TraverseDfs('A', null, True, (node, dfsNode) => true)); }
public void TraverseDfs_ThrowsException_ForNullCycleHandler() { var graph = new LiteralGraph("A>1>B", true); Assert.Throws <ArgumentNullException>(() => graph.TraverseDfs('A', True, True, null)); }
public void TraverseDfs_ThrowsException_ForInvalidVertex() { var graph = new LiteralGraph("A>1>B", true); Assert.Throws <ArgumentException>(() => graph.TraverseDfs('Z', True, True, (node, dfsNode) => true)); }