Exemplo n.º 1
0
    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]]
Exemplo n.º 2
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"]
Exemplo n.º 3
0
    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")
Exemplo n.º 4
0
    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")]