Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 4
0
        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)
            });
        }