def test_un_directed_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.UnDirectedGraph(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.UnDirectedGraph(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_un_directed_graph_copy(self): """ Test operator "copy". """ a_graph = graph.UnDirectedGraph(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)
def test_un_directed_graph_classify_edges_acyclic(self): """ Test method "classify_edges" - acyclic graph. """ # Create an undirected acyclic graph a_graph = graph.UnDirectedGraph(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.UnDirectedGraphEdge(a_graph, v_1, v_2) e23 = graph_edge.UnDirectedGraphEdge(a_graph, v_2, v_3) e24 = graph_edge.UnDirectedGraphEdge(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)
def test_un_directed_graph_has_vertex_not(self): """ Test method "has_vertex" - inverted. """ a_graph = graph.UnDirectedGraph(1) a_vertex = graph_vertex.UnWeightedGraphVertex(a_graph, 'BB') self.assertFalse(a_graph.has_vertex(a_vertex))
def test_un_directed_graph_has_vertex(self): """ Test method "has_vertex". """ a_graph = graph.UnDirectedGraph(1) a_vertex = graph_vertex.UnWeightedGraphVertex(a_graph, 'A') a_graph.add_vertex(a_vertex) self.assertTrue(a_graph.has_vertex(a_vertex))
def setUp(self): self.g_1 = graph.UnDirectedGraph(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.UnDirectedGraphEdge(self.g_1, self.v_1, self.v_2) self.e21 = graph_edge.UnDirectedGraphEdge(self.g_1, self.v_2, self.v_1) self.e14 = graph_edge.UnDirectedGraphEdge(self.g_1, self.v_1, self.v_4) self.e41 = graph_edge.UnDirectedGraphEdge(self.g_1, self.v_4, self.v_1) self.e23 = graph_edge.UnDirectedGraphEdge(self.g_1, self.v_2, self.v_3) self.e32 = graph_edge.UnDirectedGraphEdge(self.g_1, self.v_3, self.v_2) self.e24 = graph_edge.UnDirectedGraphEdge(self.g_1, self.v_2, self.v_4) self.e42 = graph_edge.UnDirectedGraphEdge(self.g_1, self.v_4, self.v_2) self.e25 = graph_edge.UnDirectedGraphEdge(self.g_1, self.v_2, self.v_5) self.e52 = graph_edge.UnDirectedGraphEdge(self.g_1, self.v_5, self.v_2) self.e35 = graph_edge.UnDirectedGraphEdge(self.g_1, self.v_3, self.v_5) self.e53 = graph_edge.UnDirectedGraphEdge(self.g_1, self.v_5, self.v_3) self.e45 = graph_edge.UnDirectedGraphEdge(self.g_1, self.v_4, self.v_5) self.e54 = graph_edge.UnDirectedGraphEdge(self.g_1, self.v_5, self.v_4) self.e46 = graph_edge.UnDirectedGraphEdge(self.g_1, self.v_4, self.v_6) self.e64 = graph_edge.UnDirectedGraphEdge(self.g_1, self.v_6, self.v_4) self.e56 = graph_edge.UnDirectedGraphEdge(self.g_1, self.v_5, self.v_6) self.e65 = graph_edge.UnDirectedGraphEdge(self.g_1, self.v_6, self.v_5) self.e57 = graph_edge.UnDirectedGraphEdge(self.g_1, self.v_5, self.v_7) self.e75 = graph_edge.UnDirectedGraphEdge(self.g_1, self.v_7, self.v_5) self.e67 = graph_edge.UnDirectedGraphEdge(self.g_1, self.v_6, self.v_7) self.e76 = graph_edge.UnDirectedGraphEdge(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)
def test_un_directed_graph_is_cyclic_not(self): """ Test method "is_cyclic" - inverted. """ a_graph = graph.UnDirectedGraph(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())
def setUp(self): # Create an undirected cyclic graph self.g_undirected_cyclic = graph.UnDirectedGraph(4) self.a_g_undirected_cyclic = graph_vertex.UnWeightedGraphVertex(self.g_undirected_cyclic, 'a') self.b_g_undirected_cyclic = graph_vertex.UnWeightedGraphVertex(self.g_undirected_cyclic, 'b') self.c_g_undirected_cyclic = graph_vertex.UnWeightedGraphVertex(self.g_undirected_cyclic, 'c') self.d_g_undirected_cyclic = graph_vertex.UnWeightedGraphVertex(self.g_undirected_cyclic, 'd') self.g_undirected_cyclic.add_vertex(self.a_g_undirected_cyclic) self.g_undirected_cyclic.add_vertex(self.b_g_undirected_cyclic) self.g_undirected_cyclic.add_vertex(self.c_g_undirected_cyclic) self.g_undirected_cyclic.add_vertex(self.d_g_undirected_cyclic) self.g_undirected_cyclic.add_edge(self.a_g_undirected_cyclic, self.b_g_undirected_cyclic) self.g_undirected_cyclic.add_edge(self.b_g_undirected_cyclic, self.c_g_undirected_cyclic) self.g_undirected_cyclic.add_edge(self.a_g_undirected_cyclic, self.c_g_undirected_cyclic) self.classification_undirected_cyclic = self.g_undirected_cyclic.classify_edges() # Create a directed cyclic graph (Cormen page 542) self.g_directed_cyclic = graph.DirectedGraph(6) self.u_g_directed_cyclic = graph_vertex.UnWeightedGraphVertex(self.g_directed_cyclic, 'u') self.v_g_directed_cyclic = graph_vertex.UnWeightedGraphVertex(self.g_directed_cyclic, 'v') self.w_g_directed_cyclic = graph_vertex.UnWeightedGraphVertex(self.g_directed_cyclic, 'w') self.x_g_directed_cyclic = graph_vertex.UnWeightedGraphVertex(self.g_directed_cyclic, 'x') self.y_g_directed_cyclic = graph_vertex.UnWeightedGraphVertex(self.g_directed_cyclic, 'y') self.z_g_directed_cyclic = graph_vertex.UnWeightedGraphVertex(self.g_directed_cyclic, 'z') self.g_directed_cyclic.add_vertex(self.u_g_directed_cyclic) self.g_directed_cyclic.add_vertex(self.v_g_directed_cyclic) self.g_directed_cyclic.add_vertex(self.w_g_directed_cyclic) self.g_directed_cyclic.add_vertex(self.x_g_directed_cyclic) self.g_directed_cyclic.add_vertex(self.y_g_directed_cyclic) self.g_directed_cyclic.add_vertex(self.z_g_directed_cyclic) self.g_directed_cyclic.add_edge(self.u_g_directed_cyclic, self.v_g_directed_cyclic) self.g_directed_cyclic.add_edge(self.u_g_directed_cyclic, self.x_g_directed_cyclic) self.g_directed_cyclic.add_edge(self.v_g_directed_cyclic, self.y_g_directed_cyclic) self.g_directed_cyclic.add_edge(self.w_g_directed_cyclic, self.y_g_directed_cyclic) self.g_directed_cyclic.add_edge(self.w_g_directed_cyclic, self.z_g_directed_cyclic) self.g_directed_cyclic.add_edge(self.x_g_directed_cyclic, self.v_g_directed_cyclic) self.g_directed_cyclic.add_edge(self.y_g_directed_cyclic, self.x_g_directed_cyclic) self.g_directed_cyclic.add_edge(self.z_g_directed_cyclic, self.z_g_directed_cyclic) self.classification_directed_cyclic = self.g_directed_cyclic.classify_edges()