public void BasicAdjacencyGraph_GetPathBetweenTwoNodes_Normal()
        {
            var a = new GraphNode <string>("A");
            var b = new GraphNode <string>("B");
            var c = new GraphNode <string>("C");
            var d = new GraphNode <string>("D");
            var e = new GraphNode <string>("E");

            var stringGraph = new BasicAdjacencyGraph <string>();

            stringGraph.AddEdge(a, b, 6, 6);
            stringGraph.AddEdge(a, d, 1, 1);
            stringGraph.AddEdge(b, d, 2, 2);
            stringGraph.AddEdge(b, e, 2, 2);
            stringGraph.AddEdge(b, c, 5, 5);
            stringGraph.AddEdge(c, e, 5, 5);
            stringGraph.AddEdge(d, e, 1, 1);

            List <GraphNode <string> > nodeList = new List <GraphNode <string> >();

            Assert.DoesNotThrow(() => nodeList = (List <GraphNode <string> >)stringGraph.GetPathBetweenTwoNodes(a, b));
            Assert.AreEqual(3, nodeList.Count);
            Assert.AreEqual("A", nodeList.Last().Data);
            Assert.AreEqual("B", nodeList.First().Data);
            Assert.AreEqual("D", nodeList[1].Data);

            Assert.DoesNotThrow(() => nodeList = (List <GraphNode <string> >)stringGraph.GetPathBetweenTwoNodes(a, c));
            Assert.AreEqual(4, nodeList.Count);
            var secondPath = new[] { "C", "E", "D", "A" };

            for (int index = 0; index < nodeList.Count; ++index)
            {
                Assert.AreEqual(secondPath[index], nodeList[index].Data);
            }
        }
        public void BasicAdjacencyGraph_MinimumCostBetweenTwoNodes_DestinationNodeNodeHasNoNeighbours()
        {
            var a = new GraphNode <string>("A");
            var b = new GraphNode <string>("B");
            var c = new GraphNode <string>("C");
            var d = new GraphNode <string>("D");
            var e = new GraphNode <string>("E");

            var stringGraph = new BasicAdjacencyGraph <string>();

            stringGraph.AddEdge(a, d, 1, 1);
            stringGraph.AddEdge(c, e, 5, 5);
            stringGraph.AddEdge(d, e, 1, 1);

            Assert.Throws <ConstraintException>(() => stringGraph.MinimumCostBetweenTwoNodes(a, b));
        }
        public void BasicAdjacencyGraph_GetAllGraphNodes_Normal()
        {
            var a = new GraphNode <string>("A");
            var b = new GraphNode <string>("B");
            var c = new GraphNode <string>("C");
            var d = new GraphNode <string>("D");
            var e = new GraphNode <string>("E");

            var stringGraph = new BasicAdjacencyGraph <string>();

            stringGraph.AddEdge(a, b, 6, 6);
            stringGraph.AddEdge(a, d, 1, 1);
            stringGraph.AddEdge(b, d, 2, 2);
            stringGraph.AddEdge(b, e, 2, 2);
            stringGraph.AddEdge(b, c, 5, 5);
            stringGraph.AddEdge(c, e, 5, 5);
            stringGraph.AddEdge(d, e, 1, 1);
            Assert.AreEqual(5, stringGraph.GetAllGraphNodes().Count);
        }
        public void BasicAdjacencyGraph_MinimumCostBetweenTwoNodes_NullDestination()
        {
            var a = new GraphNode <string>("A");
            var b = new GraphNode <string>("B");
            var c = new GraphNode <string>("C");
            var d = new GraphNode <string>("D");
            var e = new GraphNode <string>("E");

            var stringGraph = new BasicAdjacencyGraph <string>();

            stringGraph.AddEdge(a, b, 6, 6);
            stringGraph.AddEdge(a, d, 1, 1);
            stringGraph.AddEdge(b, d, 2, 2);
            stringGraph.AddEdge(b, e, 2, 2);
            stringGraph.AddEdge(b, c, 5, 5);
            stringGraph.AddEdge(c, e, 5, 5);
            stringGraph.AddEdge(d, e, 1, 1);

            Assert.Throws <ArgumentNullException>(() => stringGraph.MinimumCostBetweenTwoNodes(a, null));
        }
        public void BasicAdjacencyGraph_FindNode_ContentNotFound()
        {
            var a = new GraphNode <string>("A");
            var b = new GraphNode <string>("B");
            var c = new GraphNode <string>("C");
            var d = new GraphNode <string>("D");
            var e = new GraphNode <string>("E");

            var stringGraph = new BasicAdjacencyGraph <string>();

            stringGraph.AddEdge(a, b, 6, 6);
            stringGraph.AddEdge(a, d, 1, 1);
            stringGraph.AddEdge(b, d, 2, 2);
            stringGraph.AddEdge(b, e, 2, 2);
            stringGraph.AddEdge(b, c, 5, 5);
            stringGraph.AddEdge(c, e, 5, 5);
            stringGraph.AddEdge(d, e, 1, 1);
            var foundNode = stringGraph.FindNode(x => x == "Fail");

            Assert.Null(foundNode);
        }
        public void BasicAdjacencyGraph_MinimumCostBetweenTwoNodes_DisconnectedGraph()
        {
            var a = new GraphNode <string>("A");
            var b = new GraphNode <string>("B");
            var c = new GraphNode <string>("C");
            var d = new GraphNode <string>("D");
            var e = new GraphNode <string>("E");
            var f = new GraphNode <string>("F");

            var stringGraph = new BasicAdjacencyGraph <string>();

            stringGraph.AddEdge(a, b, 6, 6);
            stringGraph.AddEdge(a, d, 1, 1);
            stringGraph.AddEdge(b, d, 2, 2);
            stringGraph.AddEdge(b, e, 2, 2);
            stringGraph.AddEdge(d, e, 1, 1);
            stringGraph.AddEdge(c, f, 1, 1);


            Assert.Throws <ConstraintException>(() => stringGraph.MinimumCostBetweenTwoNodes(a, c));
        }
        public void BasicAdjacencyGraph_MinimumCostBetweenTwoNodes_SecondSearch()
        {
            var a = new GraphNode <string>("A");
            var b = new GraphNode <string>("B");
            var c = new GraphNode <string>("C");
            var d = new GraphNode <string>("D");
            var e = new GraphNode <string>("E");

            var stringGraph = new BasicAdjacencyGraph <string>();

            stringGraph.AddEdge(a, b, 6, 6);
            stringGraph.AddEdge(a, d, 1, 1);
            stringGraph.AddEdge(b, d, 2, 2);
            stringGraph.AddEdge(b, e, 2, 2);
            stringGraph.AddEdge(b, c, 5, 5);
            stringGraph.AddEdge(c, e, 5, 5);
            stringGraph.AddEdge(d, e, 1, 1);

            stringGraph.MinimumCostBetweenTwoNodes(a, b); // First search which builds the cache around A
            Assert.AreEqual(1, stringGraph.MinimumCostBetweenTwoNodes(d, e));
        }
        public void BasicAdjacencyGraph_MinimumCostBetweenTwoNodes_Normal()
        {
            var a = new GraphNode <string>("A");
            var b = new GraphNode <string>("B");
            var c = new GraphNode <string>("C");
            var d = new GraphNode <string>("D");
            var e = new GraphNode <string>("E");

            var stringGraph = new BasicAdjacencyGraph <string>();

            stringGraph.AddEdge(a, b, 6, 6);
            stringGraph.AddEdge(a, d, 1, 1);
            stringGraph.AddEdge(b, d, 2, 2);
            stringGraph.AddEdge(b, e, 2, 2);
            stringGraph.AddEdge(b, c, 5, 5);
            stringGraph.AddEdge(c, e, 5, 5);
            stringGraph.AddEdge(d, e, 1, 1);

            Assert.AreEqual(3, stringGraph.MinimumCostBetweenTwoNodes(a, b));
            Assert.AreEqual(1, stringGraph.MinimumCostBetweenTwoNodes(a, d));
            Assert.AreEqual(7, stringGraph.MinimumCostBetweenTwoNodes(a, c));
        }
 public void BasicAdjacencyGraph_Constructor_Normal()
 {
     _testBasicAdjacencyGraph = new BasicAdjacencyGraph <int>();
 }
 public void Setup()
 {
     _testBasicAdjacencyGraph = new BasicAdjacencyGraph <int>();
 }