Пример #1
0
        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));
        }
Пример #2
0
        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));
        }
Пример #3
0
        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));
        }
Пример #4
0
        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));
        }
Пример #5
0
        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);
        }
Пример #6
0
        public void TraverseDfs_ThrowsException_ForNullVisitationHandler()
        {
            var graph = new LiteralGraph("A>1>B", true);

            Assert.Throws <ArgumentNullException>(() => graph.TraverseDfs('A', null, True, (node, dfsNode) => true));
        }
Пример #7
0
        public void TraverseDfs_ThrowsException_ForNullCycleHandler()
        {
            var graph = new LiteralGraph("A>1>B", true);

            Assert.Throws <ArgumentNullException>(() => graph.TraverseDfs('A', True, True, null));
        }
Пример #8
0
        public void TraverseDfs_ThrowsException_ForInvalidVertex()
        {
            var graph = new LiteralGraph("A>1>B", true);

            Assert.Throws <ArgumentException>(() => graph.TraverseDfs('Z', True, True, (node, dfsNode) => true));
        }