Skip to content

Commit 6ab65fc

Browse files
committed
benchmark test added
1 parent e84e9cd commit 6ab65fc

File tree

3 files changed

+29
-194
lines changed

3 files changed

+29
-194
lines changed

pydatastructs/linear_data_structures/tests/benchmarks/test_algorithms.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,6 @@ def test_quick_sort():
4141
def test_bubble_sort():
4242
_test_common_sort(bubble_sort, size=2000)
4343

44-
@pytest.mark.xfail
45-
def test_intro_sort():
46-
_test_common_sort(intro_sort, size=2000)
4744

4845
@pytest.mark.xfail
4946
def test_selection_sort():
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import random, timeit, functools, os, pytest
2+
from pydatastructs.trees.binary_trees import (BinarySearchTree)
3+
from pydatastructs.utils.misc_util import Backend
4+
import random
5+
6+
@pytest.mark.xfail
7+
def test_BST_insert(**kwargs):
8+
cpp = Backend.CPP
9+
repeat = 2
10+
number = 2
11+
12+
size = int(os.environ.get("PYDATASTRUCTS_BENCHMARK_SIZE", "1000"))
13+
size = kwargs.get("size", size)
14+
15+
def f(backend):
16+
BST = BinarySearchTree
17+
b = BST(backend=backend)
18+
for node in range(-1000,1000):
19+
b.insert(node, node)
20+
21+
backend_dict = {"backend": Backend.PYTHON}
22+
timer_python = timeit.Timer(functools.partial(f, **backend_dict))
23+
python_backend = min(timer_python.repeat(repeat, number))
24+
25+
backend_dict = {"backend": Backend.CPP}
26+
timer_cpp = timeit.Timer(functools.partial(f, **backend_dict))
27+
cpp_backend = min(timer_cpp.repeat(repeat, number))
28+
29+
assert cpp_backend < python_backend

pydatastructs/trees/tests/test_binary_trees.py

Lines changed: 0 additions & 191 deletions
Original file line numberDiff line numberDiff line change
@@ -7,197 +7,6 @@
77
from pydatastructs.utils.misc_util import Backend
88
import random
99

10-
################### C++ Backend Tests below ###################
11-
12-
def test_cpp_BinaryTree():
13-
b = BinaryTree(1,100,backend=Backend.CPP)
14-
assert raises(NotImplementedError, b.insert)
15-
assert raises(NotImplementedError, b.delete)
16-
assert raises(NotImplementedError, b.search)
17-
assert str(b) == "[(None, 1, 100, None)]"
18-
19-
def test_cpp_BST1():
20-
b = BinarySearchTree(1,100, backend=Backend.CPP)
21-
assert str(b) == "[(None, 1, 100, None)]"
22-
assert b.search(1) == 0
23-
assert b.search(1,parent=False) == 0
24-
assert b.search(1,parent=True) == (0, None)
25-
assert b.search(2) is None
26-
b.insert(1)
27-
assert str(b) == "[(None, 1, None, None)]"
28-
b.insert(1,100)
29-
assert str(b) == "[(None, 1, 100, None)]"
30-
b.insert(20,200)
31-
b.insert(30,300)
32-
b.insert(40,400)
33-
assert str(b) == "[(None, 1, 100, 1), (None, 20, 200, 2), (None, 30, 300, 3), (None, 40, 400, None)]"
34-
b.insert(0,9)
35-
assert str(b) == "[(4, 1, 100, 1), (None, 20, 200, 2), (None, 30, 300, 3), (None, 40, 400, None), (None, 0, 9, None)]"
36-
37-
def test_cpp_BST2():
38-
BST = BinarySearchTree
39-
b = BST(8, 8, backend=Backend.CPP)
40-
41-
##### insert() and delete() tests #####
42-
b.delete(8)
43-
b.insert(8, 8)
44-
b.insert(3, 3)
45-
b.insert(10, 10)
46-
b.insert(1, 1)
47-
b.insert(6, 6)
48-
b.insert(4, 4)
49-
b.insert(7, 7)
50-
b.insert(14, 14)
51-
b.insert(13, 13)
52-
# Explicit check for the __str__ method of Binary Trees Class
53-
assert str(b) == \
54-
("[(1, 8, 8, 2), (3, 3, 3, 4), (None, 10, 10, 7), (None, 1, 1, None), "
55-
"(5, 6, 6, 6), (None, 4, 4, None), (None, 7, 7, None), (8, 14, 14, None), "
56-
"(None, 13, 13, None)]")
57-
58-
##### BinaryTreeTraversal pre_order test #####
59-
trav = BinaryTreeTraversal(b, backend=Backend.CPP)
60-
p = trav.depth_first_search(order="pre_order")
61-
assert [node.key for node in p] == [8, 3, 1, 6, 4, 7, 10, 14, 13]
62-
63-
##### _simple_path() test #####
64-
path = b._simple_path(1,0)
65-
assert path[0] == 0
66-
assert path[1] == 1
67-
assert path[2] == 3
68-
69-
##### search() and delete() tests #####
70-
assert b.search(10) == 2
71-
assert b.search(-1) is None
72-
assert b.delete(13) is True
73-
assert b.delete(13) is None
74-
assert b.search(13) is None
75-
assert b.delete(10) is True
76-
assert b.search(10) is None
77-
assert b.delete(3) is True
78-
assert b.search(3) is None
79-
assert b.delete(13) is None
80-
assert str(b) == "[(1, 8, 8, 7), (3, 4, 4, 4), '', (None, 1, 1, None), (None, 6, 6, 6), '', (None, 7, 7, None), (None, 14, 14, None)]"
81-
82-
b.delete(7)
83-
b.delete(6)
84-
assert b.delete(1, balancing_info=True) == 1
85-
b.delete(4)
86-
assert str(b) == "[(None, 8, 8, 2), '', (None, 14, 14, None)]"
87-
88-
bc = BST(1, 1, backend=Backend.CPP)
89-
assert bc.insert(1, 2) is None
90-
assert bc.delete(1, balancing_info=True) is None
91-
92-
b2 = BST(-8, 8, backend=Backend.CPP)
93-
b2.insert(-3, 3)
94-
b2.insert(-10, 10)
95-
b2.insert(-1, 1)
96-
b2.insert(-6, 6)
97-
b2.insert(-4, 4)
98-
b2.insert(-7, 7)
99-
b2.insert(-14, 14)
100-
b2.insert(-13, 13)
101-
assert str(b2) == "[(2, -8, 8, 1), (4, -3, 3, 3), (7, -10, 10, None), (None, -1, 1, None), (6, -6, 6, 5), (None, -4, 4, None), (None, -7, 7, None), (None, -14, 14, 8), (None, -13, 13, None)]"
102-
b2.delete(-13)
103-
assert str(b2) == "[(2, -8, 8, 1), (4, -3, 3, 3), (7, -10, 10, None), (None, -1, 1, None), (6, -6, 6, 5), (None, -4, 4, None), (None, -7, 7, None), (None, -14, 14, None)]"
104-
b2.delete(-10)
105-
b2.delete(-3)
106-
b2.delete(-13)
107-
assert str(b2) == "[(7, -8, 8, 1), (4, -1, 1, None), '', '', (6, -6, 6, 5), (None, -4, 4, None), (None, -7, 7, None), (None, -14, 14, None)]"
108-
109-
bl1 = BST(backend=Backend.CPP)
110-
nodes = [50, 30, 90, 70, 100, 60, 80, 55, 20, 40, 15, 10, 16, 17, 18]
111-
for node in nodes:
112-
bl1.insert(node, node)
113-
assert str(bl1) == "[(1, 50, 50, 2), (8, 30, 30, 9), (3, 90, 90, 4), (5, 70, 70, 6), (None, 100, 100, None), (7, 60, 60, None), (None, 80, 80, None), (None, 55, 55, None), (10, 20, 20, None), (None, 40, 40, None), (11, 15, 15, 12), (None, 10, 10, None), (None, 16, 16, 13), (None, 17, 17, 14), (None, 18, 18, None)]"
114-
115-
##### lowest common ancestor _lca2_() tests #####
116-
assert bl1.lowest_common_ancestor(80, 55, 2) == 70
117-
assert bl1.lowest_common_ancestor(60, 70, 2) == 70
118-
assert bl1.lowest_common_ancestor(18, 18, 2) == 18
119-
assert bl1.lowest_common_ancestor(40, 90, 2) == 50
120-
121-
assert bl1.lowest_common_ancestor(18, 10, 2) == 15
122-
assert bl1.lowest_common_ancestor(55, 100, 2) == 90
123-
assert bl1.lowest_common_ancestor(16, 80, 2) == 50
124-
assert bl1.lowest_common_ancestor(30, 55, 2) == 50
125-
126-
assert raises(ValueError, lambda: bl1.lowest_common_ancestor(60, 200, 2))
127-
assert raises(ValueError, lambda: bl1.lowest_common_ancestor(200, 60, 2))
128-
assert raises(ValueError, lambda: bl1.lowest_common_ancestor(-3, 4, 2))
129-
130-
bl2 = BST(backend=Backend.CPP)
131-
nodes = [50, 30, 90, 70, 100, 60, 80, 55, 20, 40, 15, 10, 16, 17, 18]
132-
for node in nodes:
133-
bl2.insert(node, node)
134-
assert str(bl2) == "[(1, 50, 50, 2), (8, 30, 30, 9), (3, 90, 90, 4), (5, 70, 70, 6), (None, 100, 100, None), (7, 60, 60, None), (None, 80, 80, None), (None, 55, 55, None), (10, 20, 20, None), (None, 40, 40, None), (11, 15, 15, 12), (None, 10, 10, None), (None, 16, 16, 13), (None, 17, 17, 14), (None, 18, 18, None)]"
135-
136-
##### lowest common ancestor _lca1_() tests #####
137-
assert bl2.lowest_common_ancestor(80, 55, 1) == 70
138-
assert bl2.lowest_common_ancestor(60, 70, 1) == 70
139-
assert bl2.lowest_common_ancestor(18, 18, 1) == 18
140-
assert bl2.lowest_common_ancestor(40, 90, 1) == 50
141-
142-
assert bl2.lowest_common_ancestor(18, 10, 1) == 15
143-
assert bl2.lowest_common_ancestor(55, 100, 1) == 90
144-
assert bl2.lowest_common_ancestor(16, 80, 1) == 50
145-
assert bl2.lowest_common_ancestor(30, 55, 1) == 50
146-
147-
assert raises(ValueError, lambda: bl2.lowest_common_ancestor(60, 200, 1))
148-
assert raises(ValueError, lambda: bl2.lowest_common_ancestor(200, 60, 1))
149-
assert raises(ValueError, lambda: bl2.lowest_common_ancestor(-3, 4, 1))
150-
151-
##### rank() tests #####
152-
assert bl2.rank(18) == 5
153-
assert bl2.rank(10) == 1
154-
rank_list = [2, 2, 4, 4, 5, 4, 5, 3, 2, 3, 2, 1, 3, 4, 5]
155-
for i,node in enumerate(nodes):
156-
assert bl2.rank(node) == rank_list[i]
157-
assert bl2.rank(200) is None
158-
159-
##### select() tests #####
160-
select_list = [10, 50, 55, 90, 100]
161-
for i in range(5):
162-
assert bl2.select(i+1).key == select_list[i]
163-
164-
b3 = BST(backend=Backend.CPP)
165-
b3.insert(10, 10)
166-
b3.insert(18, 18)
167-
b3.insert(7, 7)
168-
169-
##### upper_bound() tests #####
170-
assert b3.upper_bound(9) == 10
171-
assert b3.upper_bound(7) == 10
172-
assert b3.upper_bound(-1) == 7
173-
assert b3.upper_bound(20) is None
174-
175-
##### lower_bound() tests #####
176-
assert b3.lower_bound(9) == 10
177-
assert b3.lower_bound(7) == 7
178-
assert b3.lower_bound(-1) == 7
179-
assert b3.lower_bound(20) is None
180-
181-
182-
def test_cpp_BST_speed():
183-
BST = BinarySearchTree
184-
import time
185-
b = BST()
186-
t1 = time.time()
187-
for node in range(-1000,1000):
188-
b.insert(node, node)
189-
t2 = time.time()
190-
b2 = BST(backend=Backend.CPP)
191-
t3 = time.time()
192-
for node in range(-1000,1000):
193-
b2.insert(node, node)
194-
t4 = time.time()
195-
print("Time taken by Python backend: ",t2-t1,"s")
196-
print("Time taken by C++ backend: ",t4-t3,"s")
197-
198-
199-
################### Python Tests below ###################
200-
20110
def _test_BinarySearchTree(backend):
20211
BST = BinarySearchTree
20312
b = BST(8, 8, backend=backend)

0 commit comments

Comments
 (0)