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)
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)
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)
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())
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)
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)