Exemple #1
0
def test_tree_validate():

    class TestNode(Node):
        def __setattr__(self, attr, value):
            object.__setattr__(self, attr, value)

    root = Node(1)
    root.validate()  # Should pass

    root = Node(1)
    root.left = Node(2)
    root.validate()  # Should pass

    root = Node(1)
    root.left = Node(2)
    root.right = Node(3)
    root.validate()  # Should pass

    root = Node(1)
    root.left = Node(2)
    root.right = Node(3)
    root.left.left = Node(4)
    root.left.right = Node(5)
    root.left.right.left = Node(6)
    root.validate()  # Should pass

    root = TestNode(1)
    root.left = 'not_a_node'
    with pytest.raises(InvalidNodeTypeError) as err:
        root.validate()
    assert str(err.value) == 'Invalid node instance at index 1'

    root = TestNode(1)
    root.right = TestNode(2)
    root.right.value = 'not_an_integer'
    with pytest.raises(InvalidNodeValueError) as err:
        root.validate()
    assert str(err.value) == 'Invalid node value at index 2'

    root = TestNode(1)
    root.left = TestNode(2)
    root.left.right = root
    with pytest.raises(CyclicNodeReferenceError) as err:
        root.validate()
    assert str(err.value) == 'Cyclic node reference at index 4'
def test_tree_validate():
    class TestNode(Node):
        def __setattr__(self, attr, value):
            object.__setattr__(self, attr, value)

    root = Node(1)
    root.validate()  # Should pass

    root = Node(1)
    root.left = Node(2)
    root.validate()  # Should pass

    root = Node(1)
    root.left = Node(2)
    root.right = Node(3)
    root.validate()  # Should pass

    root = Node(1)
    root.left = Node(2)
    root.right = Node(3)
    root.left.left = Node(4)
    root.left.right = Node(5)
    root.left.right.left = Node(6)
    root.validate()  # Should pass

    root = TestNode(1)
    root.left = "not_a_node"
    with pytest.raises(NodeTypeError) as err:
        root.validate()
    assert str(err.value) == "invalid node instance at index 1"

    root = TestNode(1)
    root.right = TestNode(2)
    root.right.val = "not_an_integer"
    with pytest.raises(NodeValueError) as err:
        root.validate()
    assert str(err.value) == "invalid node value at index 2"

    root = TestNode(1)
    root.left = TestNode(2)
    root.left.right = root
    with pytest.raises(NodeReferenceError) as err:
        root.validate()
    assert str(
        err.value) == "cyclic reference at Node(1) (level-order index 4)"