Esempio n. 1
0
        public void Merge_Throws()
        {
            var graph1 = new BidirectionalGraph <int, Edge <int> >();

            Assert.Throws <VertexNotFoundException>(
                () => graph1.MergeVertex(1, (source, target) => new Edge <int>(source, target)));

            var graph2 = new BidirectionalGraph <TestVertex, Edge <TestVertex> >();

            Assert.Throws <ArgumentNullException>(
                // ReSharper disable AssignNullToNotNullAttribute
                () => graph2.MergeVertex(null, (source, target) => new Edge <TestVertex>(source, target)));
            Assert.Throws <ArgumentNullException>(
                () => graph2.MergeVertex(new TestVertex("1"), null));
            Assert.Throws <ArgumentNullException>(
                () => graph2.MergeVertex(null, null));
            // ReSharper restore AssignNullToNotNullAttribute
        }
Esempio n. 2
0
 public static void MergeVertices <T>(this BidirectionalGraph <T, Edge <T> > reducedGraph, T reducedVertex, IEnumerable <T> vertices)
 {
     reducedGraph.AddVertex(reducedVertex);
     foreach (var vertex in vertices)
     {
         reducedGraph.AddEdge(new Edge <T>(reducedVertex, vertex));
         reducedGraph.AddEdge(new Edge <T>(vertex, reducedVertex));
         reducedGraph.MergeVertex(vertex, (s, t) => new Edge <T>(s, t));
     }
 }
Esempio n. 3
0
        public void Merge_Test(
            [NotNull] IEnumerable <int> setupVertices,
            [NotNull, ItemNotNull] IEnumerable <EquatableEdge <int> > setupEdges,
            int vertexToMerge,
            int expectedEdgesAdded,
            int expectedEdgesRemoved,
            [NotNull, ItemNotNull] IEnumerable <EquatableEdge <int> > expectedEdges)
        {
            int verticesAdded   = 0;
            int edgesAdded      = 0;
            int verticesRemoved = 0;
            int edgesRemoved    = 0;

            var graph = new BidirectionalGraph <int, EquatableEdge <int> >();

            int[] verticesArray = setupVertices.ToArray();
            graph.AddVertexRange(verticesArray);
            graph.AddEdgeRange(setupEdges);

            graph.VertexAdded += v =>
            {
                Assert.IsNotNull(v);
                ++verticesAdded;
            };
            graph.VertexRemoved += v =>
            {
                Assert.IsNotNull(v);
                // ReSharper disable once AccessToModifiedClosure
                ++verticesRemoved;
            };
            graph.EdgeAdded += e =>
            {
                Assert.IsNotNull(e);
                // ReSharper disable once AccessToModifiedClosure
                ++edgesAdded;
            };
            graph.EdgeRemoved += e =>
            {
                Assert.IsNotNull(e);
                // ReSharper disable once AccessToModifiedClosure
                ++edgesRemoved;
            };

            graph.MergeVertex(vertexToMerge, (source, target) => new EquatableEdge <int>(source, target));
            CheckCounters();
            AssertHasVertices(graph, verticesArray.Except(new[] { vertexToMerge }));
            AssertHasEdges(graph, expectedEdges);

            #region Local function

            void CheckCounters()
            {
                Assert.AreEqual(0, verticesAdded);
                Assert.AreEqual(1, verticesRemoved);
                Assert.AreEqual(expectedEdgesAdded, edgesAdded);
                Assert.AreEqual(expectedEdgesRemoved, edgesRemoved);
                verticesRemoved = 0;
                edgesAdded      = 0;
                edgesRemoved    = 0;
            }

            #endregion
        }
Esempio n. 4
0
 public void Ignore(V vertex)
 {
     graph.MergeVertex(vertex, (s, t) => new Edge <V>(s, t));
 }