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

            // ReSharper disable AssignNullToNotNullAttribute
            Assert.Throws <ArgumentNullException>(() => graph.MergeVerticesIf(null, (source, target) => new Edge <int>(source, target)));
            Assert.Throws <ArgumentNullException>(() => graph.MergeVerticesIf(vertex => true, null));
            Assert.Throws <ArgumentNullException>(() => graph.MergeVerticesIf(null, null));
            // ReSharper restore AssignNullToNotNullAttribute
        }
Esempio n. 2
0
        public void MergeIf_Test(
            [NotNull] IEnumerable <int> setupVertices,
            [NotNull, ItemNotNull] IEnumerable <EquatableEdge <int> > setupEdges,
            [NotNull, InstantHandle] VertexPredicate <int> vertexPredicate,
            int expectedVerticesRemoved,
            int expectedEdgesAdded,
            int expectedEdgesRemoved,
            [NotNull] IEnumerable <int> expectedVertices,
            [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> >();

            graph.AddVertexRange(setupVertices);
            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.MergeVerticesIf(vertexPredicate, (source, target) => new EquatableEdge <int>(source, target));
            CheckCounters();
            AssertHasVertices(graph, expectedVertices);
            EquatableEdge <int>[] edges = expectedEdges.ToArray();
            if (!edges.Any())
            {
                AssertNoEdge(graph);
            }
            else
            {
                AssertHasEdges(graph, edges);
            }

            #region Local function

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

            #endregion
        }