flat-tree implementation coming down the tubes
This commit is contained in:
0
test/__init__.py
Normal file
0
test/__init__.py
Normal file
15
test/conftest.py
Normal file
15
test/conftest.py
Normal file
@ -0,0 +1,15 @@
|
||||
import pytest
|
||||
|
||||
from flat_tree.accessor import FlatTreeAccessor
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def tree():
|
||||
return FlatTreeAccessor()
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def FlatTreeIterator():
|
||||
from flat_tree.iterator import FlatTreeIterator
|
||||
|
||||
return FlatTreeIterator
|
120
test/test_accessor.py
Normal file
120
test/test_accessor.py
Normal file
@ -0,0 +1,120 @@
|
||||
import pytest
|
||||
|
||||
|
||||
def test_index(tree):
|
||||
assert tree.index(0, 0) == 0
|
||||
assert tree.index(0, 1) == 2
|
||||
assert tree.index(0, 2) == 4
|
||||
|
||||
|
||||
def test_depth(tree):
|
||||
assert tree.depth(5) == 1
|
||||
assert tree.depth(3) == 2
|
||||
assert tree.depth(4) == 0
|
||||
|
||||
|
||||
def test_offset(tree):
|
||||
assert tree.offset(0) == 0
|
||||
assert tree.offset(1) == 0
|
||||
assert tree.offset(2) == 1
|
||||
assert tree.offset(3) == 0
|
||||
assert tree.offset(4) == 2
|
||||
|
||||
assert isinstance(tree.offset(0), int)
|
||||
|
||||
|
||||
def test_parent(tree):
|
||||
assert tree.index(1, 0) == 1
|
||||
assert tree.index(1, 1) == 5
|
||||
assert tree.index(2, 0) == 3
|
||||
|
||||
assert tree.parent(0) == 1
|
||||
assert tree.parent(2) == 1
|
||||
assert tree.parent(1) == 3
|
||||
|
||||
|
||||
def test_sibling(tree):
|
||||
assert tree.sibling(0) == 2
|
||||
assert tree.sibling(2) == 0
|
||||
assert tree.sibling(1) == 5
|
||||
assert tree.sibling(5) == 1
|
||||
|
||||
|
||||
def test_children(tree):
|
||||
assert tree.children(0) == []
|
||||
assert tree.children(1) == [0, 2]
|
||||
assert tree.children(3) == [1, 5]
|
||||
assert tree.children(9) == [8, 10]
|
||||
|
||||
|
||||
def test_count(tree):
|
||||
assert tree.count(0) == 1
|
||||
assert tree.count(1) == 3
|
||||
assert tree.count(3) == 7
|
||||
assert tree.count(5) == 3
|
||||
assert tree.count(23) == 15
|
||||
assert tree.count(27) == 7
|
||||
|
||||
|
||||
def test_spans(tree):
|
||||
assert tree.spans(0) == [0, 0]
|
||||
assert tree.spans(1) == [0, 2]
|
||||
assert tree.spans(3) == [0, 6]
|
||||
assert tree.spans(23) == [16, 30]
|
||||
assert tree.spans(27) == [24, 30]
|
||||
|
||||
|
||||
def test_left_span(tree):
|
||||
assert tree.left_span(0) == 0
|
||||
assert tree.left_span(1) == 0
|
||||
assert tree.left_span(3) == 0
|
||||
assert tree.left_span(23) == 16
|
||||
assert tree.left_span(27) == 24
|
||||
|
||||
|
||||
def test_right_span(tree):
|
||||
assert tree.right_span(0) == 0
|
||||
assert tree.right_span(1) == 2
|
||||
assert tree.right_span(3) == 6
|
||||
assert tree.right_span(23) == 30
|
||||
assert tree.right_span(27) == 30
|
||||
|
||||
|
||||
def test_full_roots(tree):
|
||||
assert tree.full_roots(0) == []
|
||||
assert tree.full_roots(2) == [0]
|
||||
assert tree.full_roots(8) == [3]
|
||||
assert tree.full_roots(20) == [7, 17]
|
||||
assert tree.full_roots(18) == [7, 16]
|
||||
assert tree.full_roots(16) == [7]
|
||||
|
||||
with pytest.raises(ValueError):
|
||||
tree.full_roots(1)
|
||||
|
||||
|
||||
def test_left_child(tree):
|
||||
assert tree.left_child(0) == -1
|
||||
assert tree.left_child(1) == 0
|
||||
assert tree.left_child(3) == 1
|
||||
|
||||
|
||||
def test_right_child(tree):
|
||||
assert tree.right_child(0) == -1
|
||||
assert tree.right_child(1) == 2
|
||||
assert tree.right_child(3) == 5
|
||||
|
||||
|
||||
def test_parent_big_index(tree):
|
||||
assert tree.parent(10000000000) == 10000000001
|
||||
|
||||
|
||||
def test_child_parent_child(tree):
|
||||
child = 0
|
||||
|
||||
for _ in range(50):
|
||||
child = tree.parent(child)
|
||||
assert child == 1125899906842623
|
||||
|
||||
for _ in range(50):
|
||||
child = tree.left_child(child)
|
||||
assert child == 0
|
23
test/test_iterator.py
Normal file
23
test/test_iterator.py
Normal file
@ -0,0 +1,23 @@
|
||||
def test_iter_from_leaf(FlatTreeIterator):
|
||||
tree_iter = FlatTreeIterator()
|
||||
|
||||
assert tree_iter.index == 0
|
||||
assert tree_iter.parent() == 1
|
||||
assert tree_iter.parent() == 3
|
||||
assert tree_iter.parent() == 7
|
||||
assert tree_iter.right_child() == 11
|
||||
assert tree_iter.left_child() == 9
|
||||
assert tree_iter.next() == 13
|
||||
assert tree_iter.left_span() == 12
|
||||
|
||||
|
||||
def test_iter_not_from_leaf(FlatTreeIterator):
|
||||
tree_iter = FlatTreeIterator(index=1)
|
||||
|
||||
assert tree_iter.index == 1
|
||||
assert tree_iter.parent() == 3
|
||||
assert tree_iter.parent() == 7
|
||||
assert tree_iter.right_child() == 11
|
||||
assert tree_iter.left_child() == 9
|
||||
assert tree_iter.next() == 13
|
||||
assert tree_iter.left_span() == 12
|
9
test/test_version.py
Normal file
9
test/test_version.py
Normal file
@ -0,0 +1,9 @@
|
||||
"""Version test module."""
|
||||
|
||||
|
||||
def test_version_fails_gracefully(mocker):
|
||||
target = 'pkg_resources.get_distribution'
|
||||
with mocker.patch(target, side_effect=Exception()):
|
||||
from flat_tree.__init__ import __version__
|
||||
|
||||
assert __version__ == 'unknown'
|
Reference in New Issue
Block a user