public void TransitiveClosure_IsolatedVertices() { const string vertex1 = "/test"; const string vertex2 = "/test/123"; const string vertex3 = "/test/456"; const string vertex4 = "/test/notlinked"; var edge12 = new EquatableEdge <string>(vertex1, vertex2); var edge23 = new EquatableEdge <string>(vertex2, vertex3); var graph = new BidirectionalGraph <string, EquatableEdge <string> >(); graph.AddVertexRange(new[] { vertex1, vertex2, vertex3, vertex4 }); graph.AddEdgeRange(new[] { edge12, edge23 }); BidirectionalGraph <string, EquatableEdge <string> > result = graph.ComputeTransitiveClosure((u, v) => new EquatableEdge <string>(u, v)); AssertHasVertices(result, new[] { vertex1, vertex2, vertex3, vertex4 }); AssertHasEdges( result, new[] { edge12, new EquatableEdge <string>(vertex1, vertex3), edge23 }); }
public void Test() { var graph = new BidirectionalGraph<int, Edge<int>>(); graph.AddVerticesAndEdgeRange(new[] { new Edge<int>(1, 2) , new Edge<int>(2, 3), new Edge<int>(3, 4), new Edge<int>(3, 5) }); var result = graph.ComputeTransitiveClosure((u, v) => new Edge<int>(u, v)); Assert.AreEqual(9, result.EdgeCount); }
public void Test() { var graph = new BidirectionalGraph <int, Edge <int> >(); graph.AddVerticesAndEdgeRange(new[] { new Edge <int>(1, 2), new Edge <int>(2, 3), new Edge <int>(3, 4), new Edge <int>(3, 5) }); var result = graph.ComputeTransitiveClosure((u, v) => new Edge <int>(u, v)); Assert.AreEqual(9, result.EdgeCount); }
public void TransitiveClosure_ReferenceType() { // Test 1 var graph = new BidirectionalGraph <int, EquatableEdge <int> >(); graph.AddVerticesAndEdgeRange(new[] { new EquatableEdge <int>(1, 2), new EquatableEdge <int>(2, 3) }); BidirectionalGraph <int, EquatableEdge <int> > result = graph.ComputeTransitiveClosure((u, v) => new EquatableEdge <int>(u, v)); AssertHasVertices(result, new[] { 1, 2, 3 }); AssertHasEdges( result, new[] { new EquatableEdge <int>(1, 2), new EquatableEdge <int>(1, 3), new EquatableEdge <int>(2, 3) }); // Test 2 graph = new BidirectionalGraph <int, EquatableEdge <int> >(); graph.AddVerticesAndEdgeRange(new[] { new EquatableEdge <int>(1, 2), new EquatableEdge <int>(2, 3), new EquatableEdge <int>(3, 4), new EquatableEdge <int>(3, 5) }); result = graph.ComputeTransitiveClosure((u, v) => new EquatableEdge <int>(u, v)); AssertHasVertices(result, new[] { 1, 2, 3, 4, 5 }); AssertHasEdges( result, new[] { new EquatableEdge <int>(1, 2), new EquatableEdge <int>(1, 3), new EquatableEdge <int>(1, 4), new EquatableEdge <int>(1, 5), new EquatableEdge <int>(2, 3), new EquatableEdge <int>(2, 4), new EquatableEdge <int>(2, 5), new EquatableEdge <int>(3, 4), new EquatableEdge <int>(3, 5) }); }