Ejemplo n.º 1
0
def test_delete_2_works_on_node_with_one_right_child_left_side():
    """Test the delete_2 method deletes a node with a right child."""
    from bst import BST
    tree = BST([10, 6, 8, 9, 12, 16, 14])
    tree.delete_2(6)
    in_order_gen = tree.in_order()
    assert [n for n in in_order_gen] == [8, 9, 10, 12, 14, 16]
Ejemplo n.º 2
0
    def test_add(self):
        bst = BST()
        bst.add(10)
        assert bst.root.val == 10
        assert bst.is_empty() is False
        assert bst.size == 1
        assert bst.levels == 1
        assert bst.serialize() == '10'
        assert bst.level_order() == [[10]]
        assert bst.pre_order() == [10]
        assert bst.in_order() == [10]
        assert bst.post_order() == [10]
        assert bst == BST(serialize='10')

        bst.add(1)
        assert bst.root.val == 10
        assert bst.is_empty() is False
        assert bst.size == 2
        assert bst.levels == 2
        assert bst.serialize() == '10,1,#'
        assert bst.level_order() == [[10], [1]]
        assert bst.pre_order() == [10, 1]
        assert bst.in_order() == [1, 10]
        assert bst.post_order() == [1, 10]

        bst.add(20)
        assert bst.root.val == 10
        assert bst.is_empty() is False
        assert bst.size == 3
        assert bst.levels == 2
        assert bst.serialize() == '10,1,20'
        assert bst.level_order() == [[10], [1, 20]]
        assert bst.pre_order() == [10, 1, 20]
        assert bst.in_order() == [1, 10, 20]
        assert bst.post_order() == [1, 20, 10]

        bst.add(5)
        bst.add(15)
        assert bst.root.val == 10
        assert bst.is_empty() is False
        assert bst.size == 5
        assert bst.levels == 3
        assert bst.serialize() == '10,1,20,#,5,15,#'
        assert bst.level_order() == [[10], [1, 20], [5, 15]]
        assert bst.pre_order() == [10, 1, 5, 20, 15]
        assert bst.in_order() == [1, 5, 10, 15, 20]
        assert bst.post_order() == [5, 1, 15, 20, 10]
Ejemplo n.º 3
0
def test_in_order_sample_tree():
    """Check for the correct output of iot on a sample tree."""
    tree = BST(SAMPLE_TREE)
    gen = tree.in_order()
    output = []
    for i in range(10):
        output.append(next(gen))
    assert output == [1, 10, 11, 12, 16, 20, 27, 28, 30, 42]
Ejemplo n.º 4
0
def test_in_order_right_imba():
    """Check for the correct output of iot on a right-imbalanced tree."""
    tree = BST(RIGHT_IMBALANCED)
    gen = tree.in_order()
    output = []
    for i in range(6):
        output.append(next(gen))
    assert output == [1, 2, 3, 4, 5, 6]
Ejemplo n.º 5
0
def test_in_order_solo():
    """Test running in-order on a tree with one Node."""
    from bst import BST
    b = BST([20])
    in_ord = b.in_order()
    in_ord_list = []
    for ii in in_ord:
        in_ord_list.append(ii)
    assert in_ord_list == [20]
Ejemplo n.º 6
0
def test_in_order_empty():
    """Test an empty Node returns empty list."""
    from bst import BST
    b = BST()
    in_ord = b.in_order()
    in_ord_list = []
    for ii in in_ord:
        in_ord_list.append(ii)
    assert in_ord_list == []
Ejemplo n.º 7
0
def test_delete_2():
    b = BST()
    a = [17, 31, 9, 4, 2, 7, 18, 1, 13, 55, 8, 16, 21, 32]
    for el in a:
        b.insert(el)
    assert b._root._data == a[0]
    b.delete_node(a[4])
    a.pop(4)
    tester = []
    for i in b.in_order(b._root):
        tester.append(i._data)
    assert tester == sorted(a)
Ejemplo n.º 8
0
 def test_empty_tree(self):
     bst = BST()
     assert bst.root is None
     assert bst.is_empty() is True
     assert bst.size == 0
     assert bst.levels == 0
     assert bst.__repr__() == "BST(serialize='')"
     assert bst.serialize() == ''
     assert bst.level_order() == []
     assert bst.pre_order() == []
     assert bst.in_order() == []
     assert bst.post_order() == []
     assert bst == BST()
Ejemplo n.º 9
0
class SymbolTable:
    def __init__(self):
        self.__bst = BST()

    def add(self, value):
        return self.__bst.add(value)

    def get(self, value):
        return self.__bst.find(value)

    def getRoot(self):
        return self.__bst.getRoot()

    def setRoot(self, root):
        return self.__bst.setRoot(root)

    def getPosition(self, value):
        return self.__bst.findPosition(value)

    def getIndex(self, value):
        return self.__bst.findIndex(value)

    def __str__(self):
        return self.__bst.in_order()
Ejemplo n.º 10
0
def test_in_order_traversal():
    """Returns a generator of values in the tree using in-order traversal"""
    import types
    bintree = BST()
    with pytest.raises(TypeError):
        bintree.in_order(1)  # No args/kwargs
    with pytest.raises(TypeError):
        bintree.in_order(None)

    assert isinstance(bintree.in_order(), types.GeneratorType)

    testlist = []
    for i in xrange(30):
        testval = random.random()
        bintree.insert(testval)
        testlist.append(testval)

    assert bintree.size() == 30
    ordered_generator = bintree.in_order()
    testlist.sort()

    for number in ordered_generator:
        assert number == testlist.pop(0)
Ejemplo n.º 11
0
def test_in_order_traversal_empty_bst():
    '''Test appropreat error when in order is called on nothing.'''
    bst = BST()
    with pytest.raises(StopIteration) as message:
        next(bst.in_order())
    assert "Nothing to traverse." in str(message)