示例#1
0
def test_pruned_dag():
    d = DAG()
    d.add_vertex('a')
    d.add_vertex('a1')
    d.add_vertex('a2')
    d.add_vertex('b', predecessors=['a', 'a1'])
    d.add_vertex('c', predecessors=['b', 'a2'])
    d.add_vertex('d', predecessors=['c'])
    d.add_tag('d', 'tag')

    def f(dg, node):
        if node in ('b', 'c'):
            return True
        return False

    d2 = d.prune(f)

    for node, _ in d2:
        preds = d2.get_predecessors(node)
        if node == 'd':
            assert len(preds) == 3
            assert 'a' in preds
            assert 'a1' in preds
            assert 'a2' in preds
            assert d2.get_tag('d') == 'tag'
        elif node.startswith('a'):
            assert len(preds) == 0
        else:
            assert False, 'invalid node'

    # By default prune ensure we keep context unchanged.
    # If we add a tag to 'b' (that would be suppressed) then we expect a
    # DAGError
    d.add_tag('b', 'b_tag')
    with pytest.raises(DAGError):
        d.prune(f)

    # In that last test, check that no error is raised but that tag are
    # preserved
    d4 = d.prune(f, preserve_context=False)
    assert d4.get_tag('d') == 'tag'
示例#2
0
def test_pruned_dag():
    d = DAG()
    d.add_vertex("a")
    d.add_vertex("a1")
    d.add_vertex("a2")
    d.add_vertex("b", predecessors=["a", "a1"])
    d.add_vertex("c", predecessors=["b", "a2"])
    d.add_vertex("d", predecessors=["c"])
    d.add_tag("d", "tag")

    def f(dg, node):
        if node in ("b", "c"):
            return True
        return False

    d2 = d.prune(f)

    for node, _ in d2:
        preds = d2.get_predecessors(node)
        if node == "d":
            assert len(preds) == 3
            assert "a" in preds
            assert "a1" in preds
            assert "a2" in preds
            assert d2.get_tag("d") == "tag"
        elif node.startswith("a"):
            assert len(preds) == 0
        else:
            raise AssertionError("invalid node")

    # By default prune ensure we keep context unchanged.
    # If we add a tag to 'b' (that would be suppressed) then we expect a
    # DAGError
    d.add_tag("b", "b_tag")
    with pytest.raises(DAGError):
        d.prune(f)

    # In that last test, check that no error is raised but that tag are
    # preserved
    d4 = d.prune(f, preserve_context=False)
    assert d4.get_tag("d") == "tag"