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 }
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)); } }
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 }
public void Ignore(V vertex) { graph.MergeVertex(vertex, (s, t) => new Edge <V>(s, t)); }