def test_adjacency_matrix(self): dg = DirectedGraph("A", "B", "C", "D") dg.add_new_edge("A", "B") dg.add_new_edge("B", "C") dg.add_new_edge("C", "D") assert dg.adjacency_matrix == [[0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1], [0, 0, 0, 0]]
def test_traverse(self): vertexes_names = [] def traverse_visit_callback(vertex): vertexes_names.append(vertex.name) dg = DirectedGraph("A", "B", "C", "D") dg.add_new_edge("A", "B") dg.add_new_edge("B", "C") dg.add_new_edge("C", "D") # bfs dg.bfs_traverse("A", traverse_visit_callback) assert vertexes_names == ["A", "B", "C", "D"] vertexes_names = [] # dfs dg.dfs_traverse("A", traverse_visit_callback) assert vertexes_names == ["A", "B", "C", "D"]
def test_create(self): dg = DirectedGraph() dg.extend_vertexes("A", "B", "C", "D") dg.add_new_edge("A", "B") dg.add_new_edge("B", "C") dg.add_new_edge("C", "D") assert [v.name for v in dg.vertexes] == ["A", "B", "C", "D"] assert dg.adjacency_dict == { vt("A"): [vt("B")], vt("B"): [vt("C")], vt("C"): [vt("D")], vt("D"): [], } with pytest.raises(exceptions.VertexNotExistError): dg.get_vertex_by_name("E") with pytest.raises(exceptions.VertexNotExistError): dg.add_new_edge("E", "B")
def test_topological_sort(self): dg = DirectedGraph() dg.extend_vertexes("A", "B", "C", "D") dg.add_new_edge("A", "B") dg.add_new_edge("B", "C") dg.add_new_edge("C", "D") assert dg.topological_sort() == [vt("A"), vt("B"), vt("C"), vt("D")] dg = DirectedGraph("A", "B", "C") dg.add_new_edge("A", "B") dg.add_new_edge("B", "C") dg.add_new_edge("C", "A") with pytest.raises(RuntimeError, match="存在环"): dg.topological_sort() dg = DirectedGraph("A", "B", "C", "D") dg.add_new_edge("A", "B") dg.add_new_edge("A", "D") dg.add_new_edge("B", "C") dg.add_new_edge("D", "C") result = dg.topological_sort() assert result == [ vt("A"), vt("B"), vt("D"), vt("C") ] or result == [vt("A"), vt("D"), vt("B"), vt("C")]