private WeightedGraph <Char> MockWeightedGraph()
        {
            var graph = new WeightedGraph <Char>();

            var a = new CharWeightedNode('A');
            var b = new CharWeightedNode('B');
            var c = new CharWeightedNode('C');
            var d = new CharWeightedNode('D');
            var e = new CharWeightedNode('E');
            var g = new CharWeightedNode('G');

            graph.AddNode(a);
            graph.AddNode(b);
            graph.AddNode(c);
            graph.AddNode(d);
            graph.AddNode(e);
            graph.AddNode(g);

            graph.AddUndirectedEdge(a, b, 20);
            graph.AddUndirectedEdge(a, e, 8);
            graph.AddUndirectedEdge(b, c, 18);
            graph.AddUndirectedEdge(b, d, 21);
            graph.AddUndirectedEdge(c, d, 15);
            graph.AddUndirectedEdge(c, e, 30);
            graph.AddUndirectedEdge(d, e, 12);

            return(graph);
        }
        public void TestExpandingEdges()
        {
            var graph = new WeightedGraph <Char>((oldEdge, newEdge) => newEdge > oldEdge);

            var a = new CharWeightedNode('A');
            var b = new CharWeightedNode('B');

            graph.AddNode(a);
            graph.AddNode(b);

            graph.AddUndirectedEdge(a, b, 10);
            Assert.AreEqual(10, a.Cost(b));

            graph.UpdateUndirectedEdge(a, b, 20);
            Assert.AreEqual(20, a.Cost(b));

            graph.UpdateUndirectedEdge(a, b, 6);
            Assert.AreEqual(20, a.Cost(b));
        }
        public void TestUndirectedUnion()
        {
            var addition = new WeightedGraph <Char>();

            var a = new CharWeightedNode('A');
            var c = new CharWeightedNode('C');
            var f = new CharWeightedNode('F');
            var h = new CharWeightedNode('H');

            addition.AddNode(a);
            addition.AddNode(c);
            addition.AddNode(f);
            addition.AddNode(h);

            addition.AddUndirectedEdge(a, c, 11);
            addition.AddUndirectedEdge(a, h, 7);
            addition.AddUndirectedEdge(c, h, 14);

            var graph = MockWeightedGraph();

            graph.UndirectedUnion(addition);

            var bfs = "";

            graph.BFS(node => bfs += node.Content);
            Assert.AreEqual("ABECHDGF", bfs);

            var edges  = graph.UndirectedEdges();
            var actual = $"{edges.Length} edges";

            foreach (var edge in edges)
            {
                actual += $", {edge.Item1.Content.ToString()}-{edge.Item3.ToString()}-{edge.Item2.Content.ToString()}";
            }
            var expected = "10 edges, A-20-B, A-8-E, A-11-C, A-7-H, B-18-C, B-21-D, C-15-D, C-30-E, C-14-H, D-12-E";

            Assert.AreEqual(expected, actual);
        }