コード例 #1
0
def test_add():
    """
    add a node to a Graph
    """
    from arbiter.graph import Graph

    graph = Graph()

    assert_equals(graph.nodes, frozenset())
    assert_equals(graph.roots, frozenset())
    assert_false('foo' in graph)

    graph.add('foo')

    assert_equals(graph.nodes, frozenset(('foo',)))
    assert_equals(graph.roots, frozenset(('foo',)))
    assert_true('foo' in graph)
    assert_equals(graph.children('foo'), frozenset())
    assert_equals(graph.parents('foo'), frozenset())
    assert_false(graph.ancestor_of('foo', 'foo'))

    graph.add('bar', ('foo', 'baz'))

    assert_equals(graph.nodes, frozenset(('foo', 'bar', 'baz')))
    assert_equals(graph.roots, frozenset(('foo',)))

    assert_true('foo' in graph)
    assert_true('bar' in graph)
    assert_true('baz' in graph)

    assert_equals(graph.children('foo'), frozenset(('bar',)))
    assert_equals(graph.children('bar'), frozenset())
    assert_equals(graph.children('baz'), frozenset(('bar',)))

    assert_equals(graph.parents('foo'), frozenset())
    assert_equals(graph.parents('bar'), frozenset(('foo', 'baz')))
    assert_equals(graph.parents('baz'), frozenset())

    assert_false(graph.ancestor_of('foo', 'foo'))
    assert_false(graph.ancestor_of('foo', 'bar'))
    assert_false(graph.ancestor_of('foo', 'baz'))

    assert_true(graph.ancestor_of('bar', 'foo'))
    assert_false(graph.ancestor_of('bar', 'bar'))
    assert_true(graph.ancestor_of('bar', 'baz'))

    assert_false(graph.ancestor_of('baz', 'foo'))
    assert_false(graph.ancestor_of('baz', 'bar'))
    assert_false(graph.ancestor_of('baz', 'baz'))

    assert_raises(ValueError, graph.add, 'baz', ('bar',))
    assert_raises(ValueError, graph.add, 'ouroboros', ('ouroboros',))
    assert_raises(ValueError, graph.add, 'foo')

    assert_equals(graph.nodes, frozenset(('foo', 'bar', 'baz')))
    assert_equals(graph.roots, frozenset(('foo',)))
コード例 #2
0
def test_naming():
    """
    Node names just need to be hashable.
    """
    from arbiter.graph import Graph, Strategy

    graph = Graph()

    for name in (1, float('NaN'), 0, None, '', frozenset(), (), False, sum):
        graph.add('child1', frozenset((name,)))

        graph.add(name)

        assert_true(name in graph)
        assert_equals(graph.nodes, frozenset((name, 'child1')))
        assert_equals(graph.roots, frozenset((name,)))
        assert_equals(graph.children(name), frozenset(('child1',)))
        assert_equals(graph.parents(name), frozenset())
        assert_false(graph.ancestor_of(name, name))

        graph.add('child2', frozenset((name,)))
        assert_equals(
            graph.children(name),
            frozenset(('child1', 'child2'))
        )

        graph.remove(name)
        graph.remove('child1')
        graph.remove('child2')

        assert_equals(graph.nodes, frozenset())

    graph.add(None)
    graph.add('', parents=((),))
    graph.add((), parents=(frozenset(),))
    graph.add(frozenset())

    assert_equals(graph.nodes, frozenset((None, '', (), frozenset())))
    assert_equals(graph.roots, frozenset((None, frozenset())))

    graph.remove((), strategy=Strategy.remove)

    assert_equals(graph.nodes, frozenset((None, frozenset())))
    assert_equals(graph.roots, frozenset((None, frozenset())))

    assert_raises(TypeError, graph.add, [])
    assert_raises(TypeError, graph.add, 'valid', parents=([],))