Skip to content

Commit a6ad1d1

Browse files
committed
RedBlackTrees C++ backend benchmark test
1 parent d70191e commit a6ad1d1

File tree

1 file changed

+50
-2
lines changed

1 file changed

+50
-2
lines changed

pydatastructs/trees/tests/benchmarks/test_binary_trees.py

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import timeit, functools, os, pytest
2-
from pydatastructs.trees.binary_trees import (BinarySearchTree)
2+
from pydatastructs.trees.binary_trees import (BinarySearchTree, RedBlackTree)
33
from pydatastructs.utils.misc_util import Backend
44

55
@pytest.mark.xfail
@@ -22,7 +22,55 @@ def g(backend, tree):
2222
for node in range(-1000, 1000):
2323
tree.search(node)
2424
def h(backend, tree):
25-
for node in range(2000):
25+
for node in range(-1000, 1000):
26+
tree.delete(node)
27+
28+
kwds_dict_PY = {"backend": Backend.PYTHON, "tree":b1}
29+
kwds_dict_CPP = {"backend": Backend.CPP, "tree":b2}
30+
31+
timer_python = timeit.Timer(functools.partial(f, **kwds_dict_PY))
32+
python_insert = min(timer_python.repeat(repeat, number))
33+
34+
timer_cpp = timeit.Timer(functools.partial(f, **kwds_dict_CPP))
35+
cpp_insert = min(timer_cpp.repeat(repeat, number))
36+
assert cpp_insert < python_insert
37+
38+
timer_python = timeit.Timer(functools.partial(g, **kwds_dict_PY))
39+
python_search = min(timer_python.repeat(repeat, number))
40+
41+
timer_cpp = timeit.Timer(functools.partial(g, **kwds_dict_CPP))
42+
cpp_search = min(timer_cpp.repeat(repeat, number))
43+
assert cpp_search < python_search
44+
45+
timer_python = timeit.Timer(functools.partial(h, **kwds_dict_PY))
46+
python_delete = min(timer_python.repeat(repeat, number))
47+
48+
timer_cpp = timeit.Timer(functools.partial(h, **kwds_dict_CPP))
49+
cpp_delete = min(timer_cpp.repeat(repeat, number))
50+
assert cpp_delete < python_delete
51+
52+
@pytest.mark.xfail
53+
def test_RedBlackTree(**kwargs):
54+
cpp = Backend.CPP
55+
repeat = 1
56+
number = 1
57+
58+
size = int(os.environ.get("PYDATASTRUCTS_BENCHMARK_SIZE", "1000"))
59+
size = kwargs.get("size", size)
60+
61+
RBT = RedBlackTree
62+
b1 = RBT(backend=Backend.PYTHON)
63+
b2 = RBT(backend=Backend.CPP)
64+
65+
def f(backend, tree):
66+
for node in range(-1000,1000):
67+
tree.insert(node, node)
68+
69+
def g(backend, tree):
70+
for node in range(-1000, 1000):
71+
tree.search(node)
72+
def h(backend, tree):
73+
for node in range(-1000, 1000):
2674
tree.delete(node)
2775

2876
kwds_dict_PY = {"backend": Backend.PYTHON, "tree":b1}

0 commit comments

Comments
 (0)