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 }
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 }