public void ProtectedEdgesPropertyIsCorrect()
        {
            GraphProtectedMethods_TESTS g = new GraphProtectedMethods_TESTS();

            TestGraphs.Add(g);

            g.AddEdge("n1", "n2");
            g.AddEdge("n2", "n3");
            g.AddEdge("n3", "n4");
            g.AddEdge("n4", "n2");

            Assert.IsTrue(g.EdgesAsNodes.Any(t => t.Item1.Id == "n1" && t.Item2.Id == "n2"));
            Assert.IsTrue(g.EdgesAsNodes.Any(t => t.Item1.Id == "n2" && t.Item2.Id == "n3"));
            Assert.IsTrue(g.EdgesAsNodes.Any(t => t.Item1.Id == "n3" && t.Item2.Id == "n4"));
            Assert.IsTrue(g.EdgesAsNodes.Any(t => t.Item1.Id == "n2" && t.Item2.Id == "n4"));

            Assert.IsFalse(
                g.EdgesAsNodes.Any(
                    t => (t.Item1.Id == "n1" && t.Item2.Id == "n3") || (t.Item1.Id == "n3" && t.Item2.Id == "n1")));
            Assert.IsFalse(
                g.EdgesAsNodes.Any(
                    t => (t.Item1.Id == "n1" && t.Item2.Id == "n4") || (t.Item1.Id == "n4" && t.Item2.Id == "n1")));

            Assert.IsTrue(AllGraphsHaveNoZeroDegreeNodes());
        }
        public void ProtectedAddEdgeThrowsExceptionWhenAddingNodesAndAddToGraphIsFalse()
        {
            GraphProtectedMethods_TESTS g = new GraphProtectedMethods_TESTS();

            g.AddEdge("n1", "n2");
            g.AddEdge("n2", "n3");

            GraphNode n4 = NewGraphNode("n4");

            g.AddEdge(n4, g.Nodes.First(n => n.Id == "n3"), false);
        }
        public void ProtectedAddEdgeAddsEdgeToExistingNodes()
        {
            GraphProtectedMethods_TESTS g = new GraphProtectedMethods_TESTS();

            TestGraphs.Add(g);

            g.AddEdge("n1", "n2");
            g.AddEdge("n2", "n3");

            g.AddEdge(g.Nodes.First(n => n.Id == "n1"), g.Nodes.First(n => n.Id == "n3"));
            Assert.IsTrue(g.Nodes.First(n => n.Id == "n3").Neighbors.Any(n => n.Id == "n1"));

            Assert.IsTrue(AllGraphsHaveNoZeroDegreeNodes());
        }
        public void ProtectedRemoveEdgeReturnsCorrectValue()
        {
            GraphProtectedMethods_TESTS graph = new GraphProtectedMethods_TESTS();

            TestGraphs.Add(graph);

            Node n1 = graph.NewGraphNode("n1");
            Node n2 = graph.NewGraphNode("n2");

            graph.AddEdge(n1, n2);

            Assert.IsTrue(graph.Nodes.All(n => n.Degree == 1));

            Assert.IsTrue(graph.RemoveEdge(n1, n2));
            Assert.IsFalse(graph.RemoveEdge(n1, n2));

            Assert.IsTrue(AllGraphsHaveNoZeroDegreeNodes());
        }
        public void ProtectedRemoveEdgeRemovesCorrectly()
        {
            GraphProtectedMethods_TESTS graph = new GraphProtectedMethods_TESTS();

            TestGraphs.Add(graph);

            graph.AddEdge("n1", "n2", true);
            graph.AddEdge("n2", "n3", true);
            graph.AddEdge("n1", "n3");

            Assert.IsTrue(graph.Nodes.All(n => n.Degree == 2));

            Node n1 = graph.Nodes.First(n => n.Id == "n1");
            Node n2 = graph.Nodes.First(n => n.Id == "n2");
            Node n3 = graph.Nodes.First(n => n.Id == "n3");

            graph.RemoveEdge(n1, n3);

            Assert.AreEqual("1,1,2", String.Join(",", graph.Nodes.Select(n => n.Degree).OrderBy(n => n)));
            Assert.IsTrue(AllGraphsHaveNoZeroDegreeNodes());
        }
        public void ProtectedAddEdgeAddsNodesToGraph()
        {
            GraphProtectedMethods_TESTS g = new GraphProtectedMethods_TESTS();

            TestGraphs.Add(g);

            g.AddEdge("n1", "n2");
            g.AddEdge("n2", "n3");

            Node n4 = new Node("n4", g);

            g.AddEdge(n4, g.Nodes.First(n => n.Id == "n2"), true);
            Assert.IsTrue(g.Nodes.First(n => n.Id == "n2").Neighbors.Any(n => n.Id == "n4"),
                          "Connecting one existing node with one new one failed.");

            Node n5 = new Node("n5", g);
            Node n6 = new Node("n6", g);

            g.AddEdge(n5, n6, true);
            Assert.IsTrue(g.Nodes.First(n => n.Id == "n5").Neighbors.Any(n => n.Id == "n6"),
                          "Connecting two new nodes and adding to graph failed.");

            Assert.IsTrue(AllGraphsHaveNoZeroDegreeNodes());
        }