public void ShortestPathSearcher_Integration_CumulativeWeight()
        {
            string vertexA = "A", vertexB = "B", vertexC = "C";

            // Graph A-B=2, A-C=3, B-C=4
            AdjacencyList <string, int> graph = new AdjacencyList <string, int>();

            graph.AddVertex(vertexA);
            graph.AddVertex(vertexB);
            graph.AddVertex(vertexC);
            graph.AddEdge(vertexA, vertexB, 2);
            graph.AddEdge(vertexA, vertexC, 3);
            graph.AddEdge(vertexB, vertexC, 4);

            ShortestPathSearcher <string, int> searcher = new ShortestPathSearcher <string, int>(graph, vertexB, vertexC, (i) => i)
            {
                PathWeightCalculation = PathWeightCalculationType.Cumulative
            };
            IEnumerable <EdgeDescriptor <string, int> > path = searcher.FindShortestPath();

            Assert.IsNotNull(path);
            Assert.AreEqual(2, path.Count());
            EdgeDescriptor <string, int> edge1 = path.First();

            Assert.AreEqual("A", edge1.Vertex1);
            Assert.AreEqual("B", edge1.Vertex2);
            Assert.AreEqual(2, edge1.Edge);
            EdgeDescriptor <string, int> edge2 = path.Last();

            Assert.AreEqual("A", edge2.Vertex1);
            Assert.AreEqual("C", edge2.Vertex2);
            Assert.AreEqual(3, edge2.Edge);
        }
        public void ShortestPathSearcher_Integration_DefaultAggregativeWeight()
        {
            string vertexA = "A", vertexB = "B", vertexC = "C", vertexD = "D";

            // Graph A-B, A-C, B-D, B-A
            AdjacencyList <string, int> graph = new AdjacencyList <string, int>();

            graph.AddVertex(vertexA);
            graph.AddVertex(vertexB);
            graph.AddVertex(vertexC);
            graph.AddVertex(vertexD);
            graph.AddEdge(vertexA, vertexB, 10);
            graph.AddEdge(vertexB, vertexA, 5);
            graph.AddEdge(vertexA, vertexC, 20);
            graph.AddEdge(vertexB, vertexD, 10);

            ShortestPathSearcher <string, int>          searcher = new ShortestPathSearcher <string, int>(graph, vertexA, vertexD, (i) => i);
            IEnumerable <EdgeDescriptor <string, int> > path = searcher.FindShortestPath();

            Assert.IsNotNull(path);
            Assert.AreEqual(2, path.Count());
            EdgeDescriptor <string, int> firstDesc = path.First();

            Assert.AreEqual("B", firstDesc.Vertex1);
            Assert.AreEqual("A", firstDesc.Vertex2);
            Assert.AreEqual(5, firstDesc.Edge);
            EdgeDescriptor <string, int> lastDesc = path.Last();

            Assert.AreEqual("B", lastDesc.Vertex1);
            Assert.AreEqual("D", lastDesc.Vertex2);
            Assert.AreEqual(10, lastDesc.Edge);
        }