Skip to content

Commit 7450fac

Browse files
committed
Replaced the tesing techniques that need manual string input
1 parent 3f3faad commit 7450fac

File tree

1 file changed

+139
-84
lines changed

1 file changed

+139
-84
lines changed

pydatastructs/trees/tests/test_binary_trees.py

Lines changed: 139 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,13 @@ def test_BinarySearchTree():
1919
b.insert(7, 7)
2020
b.insert(14, 14)
2121
b.insert(13, 13)
22-
assert str(b) == \
23-
("[(1, 8, 8, 2), (3, 3, 3, 4), (None, 10, 10, 7), (None, 1, 1, None), "
24-
"(5, 6, 6, 6), (None, 4, 4, None), (None, 7, 7, None), (8, 14, 14, None), "
25-
"(None, 13, 13, None)]")
22+
23+
trav = BinaryTreeTraversal(b)
24+
in_order = trav.depth_first_search(order='in_order')
25+
pre_order = trav.depth_first_search(order='pre_order')
26+
assert [node.key for node in in_order] == [1, 3, 4, 6, 7, 8, 10, 13, 14]
27+
assert [node.key for node in pre_order] == [8, 3, 1, 6, 4, 7, 10, 14, 13]
28+
2629
assert b.search(10) == 2
2730
assert b.search(-1) is None
2831
assert b.delete(13) is True
@@ -32,16 +35,25 @@ def test_BinarySearchTree():
3235
assert b.delete(3) is True
3336
assert b.search(3) is None
3437
assert b.delete(13) is None
35-
assert str(b) == \
36-
("[(1, 8, 8, 7), (3, 4, 4, 4), '', (None, 1, 1, None), "
37-
"(None, 6, 6, 6), '', (None, 7, 7, None), (None, 14, 14, None)]")
38+
39+
in_order = trav.depth_first_search(order='in_order')
40+
pre_order = trav.depth_first_search(order='pre_order')
41+
assert [node.key for node in in_order] == [1, 4, 6, 7, 8, 14]
42+
assert [node.key for node in pre_order] == [8, 4, 1, 6, 7, 14]
43+
3844
b.delete(7)
3945
b.delete(6)
4046
b.delete(1)
4147
b.delete(4)
42-
assert str(b) == "[(None, 8, 8, 2), '', (None, 14, 14, None)]"
48+
49+
in_order = trav.depth_first_search(order='in_order')
50+
pre_order = trav.depth_first_search(order='pre_order')
51+
assert [node.key for node in in_order] == [8, 14]
52+
assert [node.key for node in pre_order] == [8, 14]
53+
4354
bc = BST(1, 1)
4455
assert bc.insert(1, 2) is None
56+
4557
b = BST(-8, 8)
4658
b.insert(-3, 3)
4759
b.insert(-10, 10)
@@ -102,32 +114,20 @@ def test_BinaryTreeTraversal():
102114
b.insert('H', 'H')
103115
trav = BTT(b)
104116
pre = trav.depth_first_search(order='pre_order')
105-
assert [str(n) for n in pre] == \
106-
["(1, 'F', 'F', 3)", "(2, 'B', 'B', 4)", "(None, 'A', 'A', None)",
107-
"(5, 'D', 'D', 6)", "(None, 'C', 'C', None)", "(None, 'E', 'E', None)",
108-
"(None, 'G', 'G', 7)", "(8, 'I', 'I', None)", "(None, 'H', 'H', None)"]
117+
assert [node.key for node in pre] == ['F', 'B', 'A', 'D', 'C', 'E', 'G', 'I', 'H']
118+
109119
ino = trav.depth_first_search()
110-
assert [str(n) for n in ino] == \
111-
["(None, 'A', 'A', None)", "(2, 'B', 'B', 4)", "(None, 'C', 'C', None)",
112-
"(5, 'D', 'D', 6)", "(None, 'E', 'E', None)", "(1, 'F', 'F', 3)",
113-
"(None, 'G', 'G', 7)", "(None, 'H', 'H', None)", "(8, 'I', 'I', None)"]
120+
assert [node.key for node in ino] == ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']
121+
114122
out = trav.depth_first_search(order='out_order')
115-
assert [str(n) for n in out] == \
116-
["(8, 'I', 'I', None)", "(None, 'H', 'H', None)", "(None, 'G', 'G', 7)",
117-
"(1, 'F', 'F', 3)", "(None, 'E', 'E', None)", "(5, 'D', 'D', 6)",
118-
"(None, 'C', 'C', None)", "(2, 'B', 'B', 4)", "(None, 'A', 'A', None)"]
123+
assert [node.key for node in out] == ['I', 'H', 'G', 'F', 'E', 'D', 'C', 'B', 'A']
124+
119125
post = trav.depth_first_search(order='post_order')
120-
assert [str(n) for n in post] == \
121-
["(None, 'A', 'A', None)", "(None, 'C', 'C', None)",
122-
"(None, 'E', 'E', None)", "(5, 'D', 'D', 6)", "(2, 'B', 'B', 4)",
123-
"(None, 'H', 'H', None)", "(8, 'I', 'I', None)", "(None, 'G', 'G', 7)",
124-
"(1, 'F', 'F', 3)"]
126+
assert [node.key for node in post] == ['A', 'C', 'E', 'D', 'B', 'H', 'I', 'G', 'F']
127+
125128
bfs = trav.breadth_first_search()
126-
assert [str(n) for n in bfs] == \
127-
["(1, 'F', 'F', 3)", "(2, 'B', 'B', 4)", "(None, 'G', 'G', 7)",
128-
"(None, 'A', 'A', None)", "(5, 'D', 'D', 6)", "(8, 'I', 'I', None)",
129-
"(None, 'C', 'C', None)", "(None, 'E', 'E', None)",
130-
"(None, 'H', 'H', None)"]
129+
assert [node.key for node in bfs] == ['F', 'B', 'G', 'A', 'D', 'I', 'C', 'E', 'H']
130+
131131
assert raises(NotImplementedError, lambda: trav.breadth_first_search(strategy='iddfs'))
132132
assert raises(NotImplementedError, lambda: trav.depth_first_search(order='in_out_order'))
133133
assert raises(TypeError, lambda: BTT(1))
@@ -143,32 +143,49 @@ def test_AVLTree():
143143
a.insert('H', 'H')
144144
a.insert('I', 'I')
145145
a.insert('A', 'A')
146-
assert str(a) == ("[(None, 'M', 'M', None), (8, 'N', 'N', 6), "
147-
"(None, 'O', 'O', None), (4, 'L', 'L', 0), "
148-
"(None, 'K', 'K', None), (None, 'Q', 'Q', None), "
149-
"(2, 'P', 'P', 5), (9, 'H', 'H', None), "
150-
"(7, 'I', 'I', 3), (None, 'A', 'A', None)]")
146+
147+
trav = BinaryTreeTraversal(a)
148+
in_order = trav.depth_first_search(order='in_order')
149+
pre_order = trav.depth_first_search(order='pre_order')
150+
assert [node.key for node in in_order] == ['A', 'H', 'I', 'K', 'L', 'M', 'N', 'O', 'P', 'Q']
151+
assert [node.key for node in pre_order] == ['N', 'I', 'H', 'A', 'L', 'K', 'M', 'P', 'O', 'Q']
152+
151153
assert [a.balance_factor(n) for n in a.tree if n is not None] == \
152154
[0, -1, 0, 0, 0, 0, 0, -1, 0, 0]
153155
a1 = AVLTree(1, 1)
154156
a1.insert(2, 2)
155157
a1.insert(3, 3)
156158
a1.insert(4, 4)
157159
a1.insert(5, 5)
158-
assert str(a1) == ("[(None, 1, 1, None), (0, 2, 2, 3), (None, 3, 3, None), "
159-
"(2, 4, 4, 4), (None, 5, 5, None)]")
160+
161+
trav = BinaryTreeTraversal(a1)
162+
in_order = trav.depth_first_search(order='in_order')
163+
pre_order = trav.depth_first_search(order='pre_order')
164+
assert [node.key for node in in_order] == [1, 2, 3, 4, 5]
165+
assert [node.key for node in pre_order] == [2, 1, 4, 3, 5]
166+
160167
a3 = AVLTree(-1, 1)
161168
a3.insert(-2, 2)
162169
a3.insert(-3, 3)
163170
a3.insert(-4, 4)
164171
a3.insert(-5, 5)
165-
assert str(a3) == ("[(None, -1, 1, None), (3, -2, 2, 0), "
166-
"(None, -3, 3, None), (4, -4, 4, 2), "
167-
"(None, -5, 5, None)]")
172+
173+
trav = BinaryTreeTraversal(a3)
174+
in_order = trav.depth_first_search(order='in_order')
175+
pre_order = trav.depth_first_search(order='pre_order')
176+
assert [node.key for node in in_order] == [-5, -4, -3, -2, -1]
177+
assert [node.key for node in pre_order] == [-2, -4, -5, -3, -1]
178+
168179
a2 = AVLTree()
169180
a2.insert(1, 1)
170181
a2.insert(1, 1)
171-
assert str(a2) == "[(None, 1, 1, None)]"
182+
183+
trav = BinaryTreeTraversal(a2)
184+
in_order = trav.depth_first_search(order='in_order')
185+
pre_order = trav.depth_first_search(order='pre_order')
186+
assert [node.key for node in in_order] == [1]
187+
assert [node.key for node in pre_order] == [1]
188+
172189
a3 = AVLTree()
173190
a3.tree = ArrayForTrees(TreeNode, 0)
174191
for i in range(7):
@@ -180,9 +197,13 @@ def test_AVLTree():
180197
a3.tree[2].left = 3
181198
a3.tree[2].right = 4
182199
a3._left_right_rotate(0, 1)
183-
assert str(a3) == ("[(4, 0, 0, 6), (5, 1, 1, 3), (1, 2, 2, 0), "
184-
"(None, 3, 3, None), (None, 4, 4, None), "
185-
"(None, 5, 5, None), (None, 6, 6, None)]")
200+
201+
trav = BinaryTreeTraversal(a3)
202+
in_order = trav.depth_first_search(order='in_order')
203+
pre_order = trav.depth_first_search(order='pre_order')
204+
assert [node.key for node in in_order] == [5, 1, 3, 2, 4, 0, 6]
205+
assert [node.key for node in pre_order] == [2, 1, 5, 3, 0, 4, 6]
206+
186207
a4 = AVLTree()
187208
a4.tree = ArrayForTrees(TreeNode, 0)
188209
for i in range(7):
@@ -194,9 +215,12 @@ def test_AVLTree():
194215
a4.tree[3].left = 5
195216
a4.tree[3].right = 6
196217
a4._right_left_rotate(0, 2)
197-
assert str(a4) == ("[(1, 0, 0, 5), (None, 1, 1, None), (6, 2, 2, 4), "
198-
"(0, 3, 3, 2), (None, 4, 4, None), (None, 5, 5, None), "
199-
"(None, 6, 6, None)]")
218+
219+
trav = BinaryTreeTraversal(a4)
220+
in_order = trav.depth_first_search(order='in_order')
221+
pre_order = trav.depth_first_search(order='pre_order')
222+
assert [node.key for node in in_order] == [1, 0, 5, 3, 6, 2, 4]
223+
assert [node.key for node in pre_order] == [3,0,1,5,2,6,4]
200224

201225
a5 = AVLTree(is_order_statistic=True)
202226
a5.tree = ArrayForTrees(TreeNode, [
@@ -280,11 +304,13 @@ def test_select_rank(expected_output):
280304
a5.delete(9)
281305
a5.delete(13)
282306
a5.delete(20)
283-
assert str(a5) == ("[(7, 10, 10, 5), (None, 5, 5, None), "
284-
"(0, 17, 17, 6), (None, 2, 2, None), '', "
285-
"(8, 12, 12, 9), (10, 30, 30, 13), (3, 3, 3, 1), "
286-
"(None, 11, 11, None), (None, 15, 15, None), "
287-
"(None, 18, 18, None), '', '', (None, 33, 33, None)]")
307+
308+
trav = BinaryTreeTraversal(a5)
309+
in_order = trav.depth_first_search(order='in_order')
310+
pre_order = trav.depth_first_search(order='pre_order')
311+
assert [node.key for node in in_order] == [2, 3, 5, 10, 11, 12, 15, 17, 18, 30, 33]
312+
assert [node.key for node in pre_order] == [17, 10, 3, 2, 5, 12, 11, 15, 30, 18, 33]
313+
288314
test_select_rank([2, 3, 5, 10, 11, 12, 15, 17, 18, 30, 33])
289315
a5.delete(10)
290316
a5.delete(17)
@@ -333,20 +359,20 @@ def test_CartesianTree():
333359
tree.insert(6, 42, 6)
334360
tree.insert(8, 49, 8)
335361
tree.insert(2, 99, 2)
336-
assert str(tree) == \
337-
("[(1, 3, 1, 3, 3), (2, 1, 6, 1, 9), "
338-
"(None, 0, 9, 0, None), (4, 5, 11, 5, 5), "
339-
"(None, 4, 14, 4, None), (6, 9, 17, 9, None), "
340-
"(7, 7, 22, 7, 8), (None, 6, 42, 6, None), "
341-
"(None, 8, 49, 8, None), (None, 2, 99, 2, None)]")
362+
363+
trav = BinaryTreeTraversal(tree)
364+
in_order = trav.depth_first_search(order='in_order')
365+
pre_order = trav.depth_first_search(order='pre_order')
366+
assert [node.key for node in in_order] == [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
367+
assert [node.key for node in pre_order] == [3, 1, 0, 2, 5, 4, 9, 7, 6, 8]
368+
342369
tree.insert(1.5, 4, 1.5)
343-
assert str(tree) == \
344-
("[(10, 3, 1, 3, 3), (2, 1, 6, 1, None), "
345-
"(None, 0, 9, 0, None), (4, 5, 11, 5, 5), "
346-
"(None, 4, 14, 4, None), (6, 9, 17, 9, None), "
347-
"(7, 7, 22, 7, 8), (None, 6, 42, 6, None), "
348-
"(None, 8, 49, 8, None), (None, 2, 99, 2, None), "
349-
"(1, 1.5, 4, 1.5, 9)]")
370+
371+
in_order = trav.depth_first_search(order='in_order')
372+
pre_order = trav.depth_first_search(order='pre_order')
373+
assert [node.key for node in in_order] == [0, 1, 1.5, 2, 3, 4, 5, 6, 7, 8, 9]
374+
assert [node.key for node in pre_order] == [3, 1.5, 1, 0, 2, 5, 4, 9, 7, 6, 8]
375+
350376
k = tree.search(1.5)
351377
assert tree.tree[tree.tree[k].parent].key == 3
352378
tree.delete(1.5)
@@ -391,10 +417,13 @@ def test_issue_234():
391417
assert tree.tree[3].parent == 5
392418
assert tree.tree[2].right != 3
393419
assert tree.tree[tree.tree[5].parent].right == 5
394-
assert str(tree) == ("[(2, 5, 5, 1), (None, 5.5, 5.5, None), "
395-
"(4, 4.5, 4.5, 5), (None, 4.6, 4.6, 6), "
396-
"(None, 4.4, 4.4, None), (None, 4.55, 4.55, 3), "
397-
"(None, 4.65, 4.65, None)]")
420+
421+
trav = BinaryTreeTraversal(tree)
422+
in_order = trav.depth_first_search(order='in_order')
423+
pre_order = trav.depth_first_search(order='pre_order')
424+
assert [node.key for node in in_order] == [4.4, 4.5, 4.55, 4.6, 4.65, 5, 5.5]
425+
assert [node.key for node in pre_order] == [5, 4.5, 4.4, 4.55, 4.6, 4.65, 5.5]
426+
398427
assert tree.tree[tree.tree[3].parent].right == 3
399428
tree._left_rotate(5, 3)
400429
assert str(tree) == original_tree
@@ -412,30 +441,56 @@ def test_SplayTree():
412441
t.insert(20, 20)
413442
t.insert(55, 55)
414443

415-
assert str(t) == ("[(None, 100, 100, None), (None, 50, 50, None), "
416-
"(0, 200, 200, None), (None, 40, 40, 1), (5, 30, 30, 3), "
417-
"(None, 20, 20, None), (4, 55, 55, 2)]")
444+
trav = BinaryTreeTraversal(t)
445+
in_order = trav.depth_first_search(order='in_order')
446+
pre_order = trav.depth_first_search(order='pre_order')
447+
assert [node.key for node in in_order] == [20, 30, 40, 50, 55, 100, 200]
448+
assert [node.key for node in pre_order] == [55, 30, 20, 40, 50, 200, 100]
449+
418450
t.delete(40)
419-
assert str(t) == ("[(None, 100, 100, None), '', (0, 200, 200, None), "
420-
"(4, 50, 50, 6), (5, 30, 30, None), (None, 20, 20, None), "
421-
"(None, 55, 55, 2)]")
451+
452+
in_order = trav.depth_first_search(order='in_order')
453+
pre_order = trav.depth_first_search(order='pre_order')
454+
assert [node.key for node in in_order] == [20, 30, 50, 55, 100, 200]
455+
assert [node.key for node in pre_order] == [50, 30, 20, 55, 200, 100]
456+
422457
t.delete(150)
423-
assert str(t) == ("[(None, 100, 100, None), '', (0, 200, 200, None), (4, 50, 50, 6), "
424-
"(5, 30, 30, None), (None, 20, 20, None), (None, 55, 55, 2)]")
458+
459+
in_order = trav.depth_first_search(order='in_order')
460+
pre_order = trav.depth_first_search(order='pre_order')
461+
assert [node.key for node in in_order] == [20, 30, 50, 55, 100, 200]
462+
assert [node.key for node in pre_order] == [50, 30, 20, 55, 200, 100]
425463

426464
t1 = SplayTree(1000, 1000)
427465
t1.insert(2000, 2000)
428-
assert str(t1) == ("[(None, 1000, 1000, None), (0, 2000, 2000, None)]")
466+
467+
trav = BinaryTreeTraversal(t1)
468+
in_order = trav.depth_first_search(order='in_order')
469+
pre_order = trav.depth_first_search(order='pre_order')
470+
assert [node.key for node in in_order] == [1000, 2000]
471+
assert [node.key for node in pre_order] == [2000, 1000]
429472

430473
t.join(t1)
431-
assert str(t) == ("[(None, 100, 100, None), '', (6, 200, 200, 8), (4, 50, 50, None), "
432-
"(5, 30, 30, None), (None, 20, 20, None), (3, 55, 55, 0), (None, 1000, 1000, None), "
433-
"(7, 2000, 2000, None), '']")
474+
475+
trav = BinaryTreeTraversal(t)
476+
in_order = trav.depth_first_search(order='in_order')
477+
pre_order = trav.depth_first_search(order='pre_order')
478+
assert [node.key for node in in_order] == [20, 30, 50, 55, 100, 200, 1000, 2000]
479+
assert [node.key for node in pre_order] == [200, 55, 50, 30, 20, 100, 2000, 1000]
434480

435481
s = t.split(200)
436-
assert str(s) == ("[(1, 2000, 2000, None), (None, 1000, 1000, None)]")
437-
assert str(t) == ("[(None, 100, 100, None), '', (6, 200, 200, None), (4, 50, 50, None), "
438-
"(5, 30, 30, None), (None, 20, 20, None), (3, 55, 55, 0), '', '', '']")
482+
483+
trav = BinaryTreeTraversal(s)
484+
in_order = trav.depth_first_search(order='in_order')
485+
pre_order = trav.depth_first_search(order='pre_order')
486+
assert [node.key for node in in_order] == [1000, 2000]
487+
assert [node.key for node in pre_order] == [2000, 1000]
488+
489+
trav = BinaryTreeTraversal(t)
490+
in_order = trav.depth_first_search(order='in_order')
491+
pre_order = trav.depth_first_search(order='pre_order')
492+
assert [node.key for node in in_order] == [20, 30, 50, 55, 100, 200]
493+
assert [node.key for node in pre_order] == [200, 55, 50, 30, 20, 100]
439494

440495
def test_RedBlackTree():
441496
tree = RedBlackTree()

0 commit comments

Comments
 (0)