Graph class.
예제 #1
0
        public void ChildVertexTest()
        {
            Vertex.Reset();
            Graph g = new Graph();
            var vertex1 = new Vertex();
            g.AddVertex(vertex1); // 1
            g.AddVertex(new Vertex()); // 2
            g.AddVertex(new Vertex()); // 3
            g.AddVertex(new Vertex()); // 4
            g.AddVertex(new Vertex()); // 5

            g.AddEdge(new Edge { ParentId = 1, ChildId = 5 });
            g.AddEdge(new Edge { ParentId = 1, ChildId = 2 });
            g.AddEdge(new Edge { ParentId = 2, ChildId = 3 });

            var children = g.GetChildren(vertex1).ToArray();
            Assert.Equal(2, children.Length);

            Assert.True(children.Select(e => e.Id).ToArray().Contains(5));
            Assert.True(children.Select(e => e.Id).ToArray().Contains(2));

        }
예제 #2
0
        public void OutEdgesVertexTest()
        {
            Vertex.Reset();
            Graph g = new Graph();
            var vertex1 = new Vertex();
            g.AddVertex(vertex1); // 1
            g.AddVertex(new Vertex()); // 2
            g.AddVertex(new Vertex()); // 3
            g.AddVertex(new Vertex()); // 4
            g.AddVertex(new Vertex()); // 5

            g.AddEdge(new Edge { ParentId = 1, ChildId = 5 });
            g.AddEdge(new Edge { ParentId = 1, ChildId = 2 });
            g.AddEdge(new Edge { ParentId = 2, ChildId = 3 });

            var edges = g.GetOutEdges(vertex1).ToArray();
            Assert.Equal(2, edges.Length);

            Assert.True(edges.Select(e => e.ParentId).Distinct().Count() == 1);
            Assert.Equal(1, edges.Select(e => e.ParentId).Distinct().First());
            Assert.True(edges.Select(e => e.ChildId).Contains(5));
            Assert.True(edges.Select(e => e.ChildId).Contains(2));

        }
예제 #3
0
        public void NotEqualsTest()
        {
            Vertex.Reset();
            Graph g1 = new Graph();
            g1.AddVertex(new Vertex()); // 1
            g1.AddVertex(new Vertex()); // 2
            g1.AddVertex(new Vertex()); // 3
            g1.AddVertex(new Vertex()); // 4
            g1.AddVertex(new Vertex()); // 5

            g1.AddEdge(new Edge { ParentId = 4, ChildId = 5 });
            g1.AddEdge(new Edge { ParentId = 1, ChildId = 2 });
            g1.AddEdge(new Edge { ParentId = 2, ChildId = 3 });
            g1.AddEdge(new Edge { ParentId = 3, ChildId = 1 });

            Vertex.Reset();
            Graph g2 = new Graph();
            g2.AddVertex(new Vertex()); // 1
            g2.AddVertex(new Vertex()); // 2
            g2.AddVertex(new Vertex()); // 3
            g2.AddVertex(new Vertex()); // 4
            g2.AddVertex(new Vertex()); // 5

            g2.AddEdge(new Edge { ParentId = 1, ChildId = 5 });
            g2.AddEdge(new Edge { ParentId = 1, ChildId = 2 });
            g2.AddEdge(new Edge { ParentId = 2, ChildId = 3 });
            g2.AddEdge(new Edge { ParentId = 3, ChildId = 1 });

            Assert.False(g1.Equals(g2));
        }
예제 #4
0
        public void RemoveEdgeTest()
        {
            Vertex.Reset();
            Graph g = new Graph();
            g.AddVertex(new Vertex()); // 1
            g.AddVertex(new Vertex()); // 2
            g.AddVertex(new Vertex()); // 3
            g.AddVertex(new Vertex()); // 4
            g.AddVertex(new Vertex()); // 5

            var edge = new Edge { ParentId = 1, ChildId = 5 };
            g.AddEdge(edge);
            g.AddEdge(new Edge { ParentId = 1, ChildId = 2 });
            g.AddEdge(new Edge { ParentId = 2, ChildId = 3 });
            g.AddEdge(new Edge { ParentId = 3, ChildId = 1 });

            g.RemoveEdge(edge);

            Assert.Equal(0, g.GetEdges().Where(e => e.ParentId == 1 && e.ChildId == 5).Count());

        }
예제 #5
0
        public void RemoveVertexTest()
        {
            Vertex.Reset();
            Graph g = new Graph();
            var vertex1 = new Vertex();
            g.AddVertex(vertex1); // 1
            g.AddVertex(new Vertex()); // 2
            g.AddVertex(new Vertex()); // 3
            g.AddVertex(new Vertex()); // 4
            g.AddVertex(new Vertex()); // 5

            g.AddEdge(new Edge { ParentId = 1, ChildId = 5 });
            g.AddEdge(new Edge { ParentId = 1, ChildId = 2 });
            g.AddEdge(new Edge { ParentId = 2, ChildId = 3 });
            g.AddEdge(new Edge { ParentId = 3, ChildId = 1 });

            g.RemoveVertex(vertex1);

            Assert.Equal(0, g.GetVertices().Where(v => v.Id == 1).Count());
            Assert.Equal(0, g.GetEdges().Where(e => e.ParentId == 1 || e.ChildId == 1).Count());
        }
예제 #6
0
        public void ParentVertexTest()
        {
            Vertex.Reset();
            Graph g = new Graph();
            var vertex1 = new Vertex();
            g.AddVertex(vertex1); // 1
            g.AddVertex(new Vertex()); // 2
            g.AddVertex(new Vertex()); // 3
            g.AddVertex(new Vertex()); // 4
            g.AddVertex(new Vertex()); // 5

            g.AddEdge(new Edge { ParentId = 5, ChildId = 1 });
            g.AddEdge(new Edge { ParentId = 2, ChildId = 1 });
            g.AddEdge(new Edge { ParentId = 2, ChildId = 3 });

            var parents = g.GetParents(vertex1).ToArray();
            Assert.Equal(2, parents.Length);

            Assert.True(parents.Select(e => e.Id).ToArray().Contains(5));
            Assert.True(parents.Select(e => e.Id).ToArray().Contains(2));
        }