public void TestEveryEdge()
        {
            var graph = new AmortizedGraph <Char>((oldEdge, newEdge) => true);

            var a = new CharAmortizedNode('A');
            var b = new CharAmortizedNode('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(15, a.Cost(b));

            graph.UpdateUndirectedEdge(a, b, 6);
            Assert.AreEqual(12, a.Cost(b));
        }
        public void TestContractingEdges()
        {
            var graph = new AmortizedGraph <Char>((oldEdge, newEdge) => oldEdge > newEdge);

            var a = new CharAmortizedNode('A');
            var b = new CharAmortizedNode('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(10, a.Cost(b));

            graph.UpdateUndirectedEdge(a, b, 6);
            Assert.AreEqual(8, a.Cost(b));
        }
        private AmortizedGraph <Char> MockAmortizedGraph()
        {
            var graph = new AmortizedGraph <Char>();

            var a = new CharAmortizedNode('A');
            var b = new CharAmortizedNode('B');
            var c = new CharAmortizedNode('C');
            var d = new CharAmortizedNode('D');
            var e = new CharAmortizedNode('E');
            var g = new CharAmortizedNode('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, 18);
            graph.AddUndirectedEdge(b, c, 10);
            graph.AddUndirectedEdge(b, d, 21);
            graph.AddUndirectedEdge(c, d, 15);
            graph.AddUndirectedEdge(c, e, 30);
            graph.AddUndirectedEdge(d, e, 17);

            return(graph);
        }