Esempio n. 1
0
    def test_un_directed_un_weighted_graph_remove_vertex_v_0(self):
        """
        Test method "remove_vertex".
        """
        # https://reference.wolfram.com/mathematica/ref/VertexDelete.html
        # Create a graph from where a vertex should be removed.
        a_graph = graph.UnDirectedUnWeightedGraph(5)
        v_0 = graph_vertex.UnWeightedGraphVertex(a_graph, 'A')
        v_1 = graph_vertex.UnWeightedGraphVertex(a_graph, 'B')
        v_2 = graph_vertex.UnWeightedGraphVertex(a_graph, 'C')
        v_3 = graph_vertex.UnWeightedGraphVertex(a_graph, 'D')
        v_4 = graph_vertex.UnWeightedGraphVertex(a_graph, 'E')

        # Add vertices to the graph.
        a_graph.add_vertex(v_0)
        a_graph.add_vertex(v_1)
        a_graph.add_vertex(v_2)
        a_graph.add_vertex(v_3)
        a_graph.add_vertex(v_4)

        # Add edges to the graph.
        a_graph.add_edge(v_0, v_1)
        a_graph.add_edge(v_0, v_2)
        a_graph.add_edge(v_0, v_3)
        a_graph.add_edge(v_0, v_4)
        a_graph.add_edge(v_1, v_2)
        a_graph.add_edge(v_1, v_3)
        a_graph.add_edge(v_1, v_4)
        a_graph.add_edge(v_2, v_3)
        a_graph.add_edge(v_2, v_4)
        a_graph.add_edge(v_3, v_4)

        # Create a reference graph used to compare the result after a vertex has been removed.
        g_ref = graph.UnDirectedUnWeightedGraph(4)

        # Create reference vertices.
        v_1_ref = graph_vertex.UnWeightedGraphVertex(g_ref, 'B')
        v_2_ref = graph_vertex.UnWeightedGraphVertex(g_ref, 'C')
        v_3_ref = graph_vertex.UnWeightedGraphVertex(g_ref, 'D')
        v_4_ref = graph_vertex.UnWeightedGraphVertex(g_ref, 'E')

        # Add vertices to the reference graph.
        g_ref.add_vertex(v_1_ref)
        g_ref.add_vertex(v_2_ref)
        g_ref.add_vertex(v_3_ref)
        g_ref.add_vertex(v_4_ref)

        # Add edges to the reference graph.
        g_ref.add_edge(v_1_ref, v_2_ref)
        g_ref.add_edge(v_1_ref, v_3_ref)
        g_ref.add_edge(v_1_ref, v_4_ref)
        g_ref.add_edge(v_2_ref, v_3_ref)
        g_ref.add_edge(v_2_ref, v_4_ref)
        g_ref.add_edge(v_3_ref, v_4_ref)

        # Remove vertex form graph.
        a_graph.remove_vertex(v_0)
        self.assertEqual(g_ref, a_graph)
 def test_graph_edge_not_equal(self):
     """
     Test operator "inequal".
     """
     a_graph = graph.UnDirectedUnWeightedGraph(3)
     vertex1 = graph_vertex.GraphVertex(a_graph, "AA")
     vertex2 = graph_vertex.GraphVertex(a_graph, "BB")
     vertex3 = graph_vertex.GraphVertex(a_graph, "CC")
     a_graph.add_vertex(vertex1)
     a_graph.add_vertex(vertex2)
     a_graph.add_vertex(vertex3)
     a_graph.add_edge(vertex1, vertex2)
     a_graph.add_edge(vertex2, vertex3)
     a_graph.add_edge(vertex1, vertex3)
     e12_g = a_graph.get_edge(vertex1, vertex2)
     e21_g = a_graph.get_edge(vertex2, vertex1)
     e23_g = a_graph.get_edge(vertex2, vertex3)
     e32_g = a_graph.get_edge(vertex3, vertex2)
     e13_g = a_graph.get_edge(vertex1, vertex3)
     e31_g = a_graph.get_edge(vertex3, vertex1)
     test1 = e12_g == self.e12_g1
     test2 = e21_g == self.e21_g1
     test3 = e23_g == self.e23_g1
     test4 = e32_g == self.e32_g1
     test5 = e13_g == self.e13_g1
     test6 = e31_g == self.e31_g1
     test = test1 and test2 and test3 and test4 and test5 and test6
     self.assertFalse(test)
Esempio n. 3
0
    def test_un_directed_un_weighted_graph_classify_edges_acyclic(self):
        """
        Test classify edges - acyclic graph.
        """
        # Create an undirected unweighted acyclic graph
        a_graph = graph.UnDirectedUnWeightedGraph(4)
        v_1 = graph_vertex.UnWeightedGraphVertex(a_graph, 'A')
        v_2 = graph_vertex.UnWeightedGraphVertex(a_graph, 'B')
        v_3 = graph_vertex.UnWeightedGraphVertex(a_graph, 'C')
        v_4 = graph_vertex.UnWeightedGraphVertex(a_graph, 'D')

        a_graph.add_vertex(v_1)
        a_graph.add_vertex(v_2)
        a_graph.add_vertex(v_3)
        a_graph.add_vertex(v_4)

        a_graph.add_edge(v_1, v_2)
        a_graph.add_edge(v_2, v_3)
        a_graph.add_edge(v_2, v_4)

        res = a_graph.classify_edges().get_edges()
        ref = dfs_edge_classification.DFSEdgeClassification(
            a_graph).get_edges()
        e12 = graph_edge.UnDirectedUnWeightedGraphEdge(a_graph, v_1, v_2)
        e23 = graph_edge.UnDirectedUnWeightedGraphEdge(a_graph, v_2, v_3)
        e24 = graph_edge.UnDirectedUnWeightedGraphEdge(a_graph, v_2, v_4)
        ref[e12] = graph_edge.EdgeClassification.TREE_EDGE
        ref[e23] = graph_edge.EdgeClassification.TREE_EDGE
        ref[e24] = graph_edge.EdgeClassification.TREE_EDGE
        self.assertEqual(res, ref)
Esempio n. 4
0
    def test_un_directed_un_weighted_graph_copy(self):
        """
        Test operator "copy".
        """
        a_graph = graph.UnDirectedUnWeightedGraph(5)
        v_1 = graph_vertex.UnWeightedGraphVertex(a_graph, 'A')
        v_2 = graph_vertex.UnWeightedGraphVertex(a_graph, 'B')
        v_3 = graph_vertex.UnWeightedGraphVertex(a_graph, 'C')
        v_4 = graph_vertex.UnWeightedGraphVertex(a_graph, 'D')
        v_5 = graph_vertex.UnWeightedGraphVertex(a_graph, 'E')

        a_graph.add_vertex(v_1)
        a_graph.add_vertex(v_2)
        a_graph.add_vertex(v_3)
        a_graph.add_vertex(v_4)
        a_graph.add_vertex(v_5)

        a_graph.add_edge(v_1, v_2)
        a_graph.add_edge(v_1, v_3)
        a_graph.add_edge(v_1, v_4)
        a_graph.add_edge(v_1, v_5)
        a_graph.add_edge(v_2, v_3)
        a_graph.add_edge(v_2, v_4)
        a_graph.add_edge(v_2, v_5)
        a_graph.add_edge(v_3, v_4)
        a_graph.add_edge(v_3, v_5)
        a_graph.add_edge(v_4, v_5)

        ref = copy.copy(a_graph)
        self.assertEqual(a_graph, ref)
Esempio n. 5
0
    def test_un_directed_un_weighted_graph_is_cyclic_not(self):
        """
        Test method "is_cyclic" - inverted.
        """
        a_graph = graph.UnDirectedUnWeightedGraph(4)
        v_1 = graph_vertex.UnWeightedGraphVertex(a_graph, 'A')
        v_2 = graph_vertex.UnWeightedGraphVertex(a_graph, 'B')
        v_3 = graph_vertex.UnWeightedGraphVertex(a_graph, 'C')
        v_4 = graph_vertex.UnWeightedGraphVertex(a_graph, 'D')

        a_graph.add_vertex(v_1)
        a_graph.add_vertex(v_2)
        a_graph.add_vertex(v_3)
        a_graph.add_vertex(v_4)

        a_graph.add_edge(v_1, v_2)
        a_graph.add_edge(v_2, v_3)
        a_graph.add_edge(v_2, v_4)
        self.assertFalse(a_graph.is_cyclic())
Esempio n. 6
0
    def test_un_directed_un_weighted_graph_remove_edge(self):
        """
        Test method "remove_edge".
        """
        # https://reference.wolfram.com/mathematica/ref/VertexDelete.html
        a_graph = graph.UnDirectedUnWeightedGraph(5)
        v_1 = graph_vertex.UnWeightedGraphVertex(a_graph, 'A')
        v_2 = graph_vertex.UnWeightedGraphVertex(a_graph, 'B')
        v_3 = graph_vertex.UnWeightedGraphVertex(a_graph, 'C')
        v_4 = graph_vertex.UnWeightedGraphVertex(a_graph, 'D')
        v_5 = graph_vertex.UnWeightedGraphVertex(a_graph, 'E')

        a_graph.add_vertex(v_1)
        a_graph.add_vertex(v_2)
        a_graph.add_vertex(v_3)
        a_graph.add_vertex(v_4)
        a_graph.add_vertex(v_5)

        a_graph.add_edge(v_1, v_2)
        a_graph.add_edge(v_1, v_3)
        a_graph.add_edge(v_1, v_4)
        a_graph.add_edge(v_1, v_5)
        a_graph.add_edge(v_2, v_3)
        a_graph.add_edge(v_2, v_4)
        a_graph.add_edge(v_2, v_5)
        a_graph.add_edge(v_3, v_4)
        a_graph.add_edge(v_3, v_5)
        a_graph.add_edge(v_4, v_5)

        a_graph.remove_edge(v_1, v_2)
        a_graph.remove_edge(v_1, v_3)
        a_graph.remove_edge(v_1, v_4)
        a_graph.remove_edge(v_1, v_5)
        a_graph.remove_edge(v_2, v_3)
        a_graph.remove_edge(v_2, v_4)
        a_graph.remove_edge(v_2, v_5)
        a_graph.remove_edge(v_3, v_4)
        a_graph.remove_edge(v_3, v_5)
        a_graph.remove_edge(v_4, v_5)
        ref = []
        res = a_graph.get_edges()
        self.assertEqual(ref, res)
 def setUp(self):
     # Create an empty undirected unweighted graph.
     self.graph1 = graph.UnDirectedUnWeightedGraph(3)
     # Create graph vertices and add them to the graph.
     self.vertex1 = graph_vertex.GraphVertex(self.graph1, "A")
     self.vertex2 = graph_vertex.GraphVertex(self.graph1, "B")
     self.vertex3 = graph_vertex.GraphVertex(self.graph1, "C")
     self.graph1.add_vertex(self.vertex1)
     self.graph1.add_vertex(self.vertex2)
     self.graph1.add_vertex(self.vertex3)
     # Create graph edges and add them to the graph.
     self.graph1.add_edge(self.vertex1, self.vertex2)
     self.graph1.add_edge(self.vertex2, self.vertex3)
     self.graph1.add_edge(self.vertex1, self.vertex3)
     # Extract the edges.
     self.e12_g1 = self.graph1.get_edge(self.vertex1, self.vertex2)
     self.e21_g1 = self.graph1.get_edge(self.vertex2, self.vertex1)
     self.e23_g1 = self.graph1.get_edge(self.vertex2, self.vertex3)
     self.e32_g1 = self.graph1.get_edge(self.vertex3, self.vertex2)
     self.e13_g1 = self.graph1.get_edge(self.vertex1, self.vertex3)
     self.e31_g1 = self.graph1.get_edge(self.vertex3, self.vertex1)
Esempio n. 8
0
    def setUp(self):
        self.g_1 = graph.UnDirectedUnWeightedGraph(7)

        self.v_1 = graph_vertex.UnWeightedGraphVertex(self.g_1, 'A')
        self.v_2 = graph_vertex.UnWeightedGraphVertex(self.g_1, 'B')
        self.v_3 = graph_vertex.UnWeightedGraphVertex(self.g_1, 'C')
        self.v_4 = graph_vertex.UnWeightedGraphVertex(self.g_1, 'D')
        self.v_5 = graph_vertex.UnWeightedGraphVertex(self.g_1, 'E')
        self.v_6 = graph_vertex.UnWeightedGraphVertex(self.g_1, 'F')
        self.v_7 = graph_vertex.UnWeightedGraphVertex(self.g_1, 'G')

        self.g_1.add_vertex(self.v_1)
        self.g_1.add_vertex(self.v_2)
        self.g_1.add_vertex(self.v_3)
        self.g_1.add_vertex(self.v_4)
        self.g_1.add_vertex(self.v_5)
        self.g_1.add_vertex(self.v_6)
        self.g_1.add_vertex(self.v_7)

        self.e12 = graph_edge.UnDirectedUnWeightedGraphEdge(
            self.g_1, self.v_1, self.v_2)
        self.e21 = graph_edge.UnDirectedUnWeightedGraphEdge(
            self.g_1, self.v_2, self.v_1)
        self.e14 = graph_edge.UnDirectedUnWeightedGraphEdge(
            self.g_1, self.v_1, self.v_4)
        self.e41 = graph_edge.UnDirectedUnWeightedGraphEdge(
            self.g_1, self.v_4, self.v_1)
        self.e23 = graph_edge.UnDirectedUnWeightedGraphEdge(
            self.g_1, self.v_2, self.v_3)
        self.e32 = graph_edge.UnDirectedUnWeightedGraphEdge(
            self.g_1, self.v_3, self.v_2)
        self.e24 = graph_edge.UnDirectedUnWeightedGraphEdge(
            self.g_1, self.v_2, self.v_4)
        self.e42 = graph_edge.UnDirectedUnWeightedGraphEdge(
            self.g_1, self.v_4, self.v_2)
        self.e25 = graph_edge.UnDirectedUnWeightedGraphEdge(
            self.g_1, self.v_2, self.v_5)
        self.e52 = graph_edge.UnDirectedUnWeightedGraphEdge(
            self.g_1, self.v_5, self.v_2)
        self.e35 = graph_edge.UnDirectedUnWeightedGraphEdge(
            self.g_1, self.v_3, self.v_5)
        self.e53 = graph_edge.UnDirectedUnWeightedGraphEdge(
            self.g_1, self.v_5, self.v_3)
        self.e45 = graph_edge.UnDirectedUnWeightedGraphEdge(
            self.g_1, self.v_4, self.v_5)
        self.e54 = graph_edge.UnDirectedUnWeightedGraphEdge(
            self.g_1, self.v_5, self.v_4)
        self.e46 = graph_edge.UnDirectedUnWeightedGraphEdge(
            self.g_1, self.v_4, self.v_6)
        self.e64 = graph_edge.UnDirectedUnWeightedGraphEdge(
            self.g_1, self.v_6, self.v_4)
        self.e56 = graph_edge.UnDirectedUnWeightedGraphEdge(
            self.g_1, self.v_5, self.v_6)
        self.e65 = graph_edge.UnDirectedUnWeightedGraphEdge(
            self.g_1, self.v_6, self.v_5)
        self.e57 = graph_edge.UnDirectedUnWeightedGraphEdge(
            self.g_1, self.v_5, self.v_7)
        self.e75 = graph_edge.UnDirectedUnWeightedGraphEdge(
            self.g_1, self.v_7, self.v_5)
        self.e67 = graph_edge.UnDirectedUnWeightedGraphEdge(
            self.g_1, self.v_6, self.v_7)
        self.e76 = graph_edge.UnDirectedUnWeightedGraphEdge(
            self.g_1, self.v_7, self.v_6)

        self.g_1.add_edge(self.v_1, self.v_2)
        self.g_1.add_edge(self.v_1, self.v_4)
        self.g_1.add_edge(self.v_2, self.v_3)
        self.g_1.add_edge(self.v_2, self.v_4)
        self.g_1.add_edge(self.v_2, self.v_5)
        self.g_1.add_edge(self.v_3, self.v_5)
        self.g_1.add_edge(self.v_4, self.v_5)
        self.g_1.add_edge(self.v_4, self.v_6)
        self.g_1.add_edge(self.v_5, self.v_6)
        self.g_1.add_edge(self.v_5, self.v_7)
        self.g_1.add_edge(self.v_6, self.v_7)