protected static void RemoveEdge_Throws_Clusters_Test <TVertex, TEdge>(
     [NotNull] ClusteredAdjacencyGraph <TVertex, TEdge> graph)
     where TEdge : class, IEdge <TVertex>
 {
     // ReSharper disable once AssignNullToNotNullAttribute
     Assert.Throws <ArgumentNullException>(() => graph.RemoveEdge(null));
 }
Exemplo n.º 2
0
        public void RemovingClusterEdge()
        {
            var graph          = new AdjacencyGraph <int, IEdge <int> >();
            var clusteredGraph = new ClusteredAdjacencyGraph <int, IEdge <int> >(graph);
            ClusteredAdjacencyGraph <int, IEdge <int> > cluster1 = clusteredGraph.AddCluster();
            ClusteredAdjacencyGraph <int, IEdge <int> > cluster2 = cluster1.AddCluster();
            ClusteredAdjacencyGraph <int, IEdge <int> > cluster3 = cluster2.AddCluster();

            cluster3.AddVertex(5);
            cluster3.AddVertex(6);

            var edge = new TaggedEdge <int, int>(5, 6, 1);

            cluster1.RemoveEdge(edge);

            Assert.IsFalse(ContainsEdgeParent(cluster2, edge));
        }
        protected static void RemoveEdge_EquatableEdge_Clusters_Test(
            [NotNull] ClusteredAdjacencyGraph <int, EquatableEdge <int> > graph)
        {
            var edge12                     = new EquatableEdge <int>(1, 2);
            var edge13                     = new EquatableEdge <int>(1, 3);
            var edge13Bis                  = new EquatableEdge <int>(1, 3);
            var edge14                     = new EquatableEdge <int>(1, 4);
            var edge24                     = new EquatableEdge <int>(2, 4);
            var edge31                     = new EquatableEdge <int>(3, 1);
            var edge33                     = new EquatableEdge <int>(3, 3);
            var edgeNotInGraph             = new EquatableEdge <int>(3, 4);
            var edgeWithVertexNotInGraph1  = new EquatableEdge <int>(2, 10);
            var edgeWithVertexNotInGraph2  = new EquatableEdge <int>(10, 2);
            var edgeWithVerticesNotInGraph = new EquatableEdge <int>(10, 11);
            var edgeEquatable              = new EquatableEdge <int>(1, 2);

            graph.AddVerticesAndEdgeRange(new[] { edge12, edge13, edge13Bis, edge14, edge24, edge31, edge33 });

            Assert.IsFalse(graph.RemoveEdge(edgeNotInGraph));
            Assert.IsFalse(graph.RemoveEdge(edgeWithVertexNotInGraph1));
            Assert.IsFalse(graph.RemoveEdge(edgeWithVertexNotInGraph2));
            Assert.IsFalse(graph.RemoveEdge(edgeWithVerticesNotInGraph));

            Assert.IsTrue(graph.RemoveEdge(edgeEquatable));
            AssertHasVertices(graph, new[] { 1, 2, 3, 4 });
            AssertHasEdges(graph, new[] { edge13, edge13Bis, edge14, edge24, edge31, edge33 });

            Assert.IsTrue(graph.RemoveEdge(edge13Bis));
            AssertHasVertices(graph, new[] { 1, 2, 3, 4 });
            AssertHasEdges(graph, new[] { edge13, edge14, edge24, edge31, edge33 });

            Assert.IsTrue(graph.RemoveEdge(edge31));
            AssertHasVertices(graph, new[] { 1, 2, 3, 4 });
            AssertHasEdges(graph, new[] { edge13, edge14, edge24, edge33 });

            Assert.IsTrue(graph.RemoveEdge(edge13));
            Assert.IsTrue(graph.RemoveEdge(edge14));
            Assert.IsTrue(graph.RemoveEdge(edge24));
            Assert.IsTrue(graph.RemoveEdge(edge33));
            AssertHasVertices(graph, new[] { 1, 2, 3, 4 });
            AssertNoEdge(graph);
        }
Exemplo n.º 4
0
        protected static void RemoveEdge_Clusters_Test(
            ClusteredAdjacencyGraph <int, Edge <int> > graph)
        {
            var edge12                     = new Edge <int>(1, 2);
            var edge13                     = new Edge <int>(1, 3);
            var edge13Bis                  = new Edge <int>(1, 3);
            var edge14                     = new Edge <int>(1, 4);
            var edge24                     = new Edge <int>(2, 4);
            var edge31                     = new Edge <int>(3, 1);
            var edge33                     = new Edge <int>(3, 3);
            var edgeNotInGraph             = new Edge <int>(3, 4);
            var edgeWithVertexNotInGraph1  = new Edge <int>(2, 10);
            var edgeWithVertexNotInGraph2  = new Edge <int>(10, 2);
            var edgeWithVerticesNotInGraph = new Edge <int>(10, 11);
            var edgeNotEquatable           = new Edge <int>(1, 2);

            graph.AddVerticesAndEdgeRange(new[] { edge12, edge13, edge13Bis, edge14, edge24, edge31, edge33 });

            Assert.IsFalse(graph.RemoveEdge(edgeNotInGraph));
            Assert.IsFalse(graph.RemoveEdge(edgeWithVertexNotInGraph1));
            Assert.IsFalse(graph.RemoveEdge(edgeWithVertexNotInGraph2));
            Assert.IsFalse(graph.RemoveEdge(edgeWithVerticesNotInGraph));
            Assert.IsFalse(graph.RemoveEdge(edgeNotEquatable));

            Assert.IsTrue(graph.RemoveEdge(edge13Bis));
            AssertHasVertices(graph, new[] { 1, 2, 3, 4 });
            AssertHasEdges(graph, new[] { edge12, edge13, edge14, edge24, edge31, edge33 });

            Assert.IsTrue(graph.RemoveEdge(edge31));
            AssertHasVertices(graph, new[] { 1, 2, 3, 4 });
            AssertHasEdges(graph, new[] { edge12, edge13, edge14, edge24, edge33 });

            Assert.IsTrue(graph.RemoveEdge(edge12));
            Assert.IsTrue(graph.RemoveEdge(edge13));
            Assert.IsTrue(graph.RemoveEdge(edge14));
            Assert.IsTrue(graph.RemoveEdge(edge24));
            Assert.IsTrue(graph.RemoveEdge(edge33));
            AssertHasVertices(graph, new[] { 1, 2, 3, 4 });
            AssertNoEdge(graph);


            // With cluster
            graph.AddVerticesAndEdgeRange(new[] { edge12, edge13, edge14, edge24, edge31 });
            AssertHasEdges(graph, new[] { edge12, edge13, edge14, edge24, edge31 });

            ClusteredAdjacencyGraph <int, Edge <int> > cluster1 = graph.AddCluster();
            ClusteredAdjacencyGraph <int, Edge <int> > cluster2 = graph.AddCluster();
            ClusteredAdjacencyGraph <int, Edge <int> > cluster3 = graph.AddCluster();

            cluster1.AddVerticesAndEdgeRange(new[] { edge12, edge13 });
            AssertHasEdges(cluster1, new[] { edge12, edge13 });

            cluster2.AddVerticesAndEdgeRange(new[] { edge12, edge14, edge24 });
            AssertHasEdges(cluster2, new[] { edge12, edge14, edge24 });

            cluster3.AddVerticesAndEdge(edge12);
            AssertHasEdges(cluster3, new[] { edge12 });


            graph.RemoveEdge(edge12);
            AssertHasEdges(graph, new[] { edge13, edge14, edge24, edge31 });
            AssertHasEdges(cluster1, new[] { edge13 });
            AssertHasEdges(cluster2, new[] { edge14, edge24 });
            AssertNoEdge(cluster3);

            graph.RemoveEdge(edge13);
            AssertHasEdges(graph, new[] { edge14, edge24, edge31 });
            AssertNoEdge(cluster1);
            AssertHasEdges(cluster2, new[] { edge14, edge24 });
            AssertNoEdge(cluster3);

            graph.RemoveEdge(edge24);
            AssertHasEdges(graph, new[] { edge14, edge31 });
            AssertNoEdge(cluster1);
            AssertHasEdges(cluster2, new[] { edge14 });
            AssertNoEdge(cluster3);

            graph.RemoveEdge(edge14);
            AssertHasEdges(graph, new[] { edge31 });
            AssertNoEdge(cluster1);
            AssertNoEdge(cluster2);
            AssertNoEdge(cluster3);
        }