/
test_node.py
121 lines (83 loc) · 3.59 KB
/
test_node.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
from node import Node
import unittest
class NodeTester(unittest.TestCase):
def test_init(self):
startdata = 100
root = Node(startdata)
self.assertEqual(root.getheight(), 0)
self.assertEqual(root.getdata(), startdata)
self.assertIsNone(root.getleft())
self.assertIsNone(root.getright())
def test_setting_leaf_nodes(self):
parent_data = 10
parent = Node(parent_data)
self.assertEqual(parent.getheight(), 0)
left_child = Node(5)
right_child = Node(20)
parent.setleft(left_child)
self.assertEqual(parent.getheight(), 1)
parent.setright(right_child)
self.assertEqual(parent.getheight(), 1)
parent.setleft(None)
self.assertEqual(parent.getheight(), 1)
parent.setright(None)
self.assertEqual(parent.getheight(), 0)
# Parent no longer has any children nodes
# Left child node gets two children added
left_gchild = Node(4)
right_gchild = Node(6)
left_child.setleft(left_gchild)
left_child.setright(right_gchild)
self.assertEqual(left_child.getheight(), 1)
# Parent gets left_child as its child
parent.setleft(left_child)
self.assertEqual(parent.getheight(), left_child.getheight() + 1)
def test_determineheight(self):
left_child = Node(5)
self.assertEqual(left_child.getheight(), 0)
left_child.height = 4
self.assertEqual(left_child.getheight(), 4)
right_child = Node(20)
self.assertEqual(right_child.getheight(), 0)
parent = Node(10)
parent.setright(right_child)
self.assertEqual(parent.getheight(), 1)
parent.setleft(left_child)
self.assertEqual(parent.getheight(), left_child.getheight() + 1)
left_child = None
parent.setleft(None)
self.assertEqual(parent.getheight(), right_child.getheight() + 1)
left_child = Node(5)
parent.setleft(left_child)
self.assertEqual(parent.getheight(), left_child.getheight() + 1)
self.assertEqual(parent.getheight(), right_child.getheight() + 1)
# These will be the children of left_child
left_gchild = Node(15)
right_gchild = Node(25)
left_child.setleft(left_gchild)
left_child.setleft(right_gchild)
self.assertEqual(left_child.getheight(), left_gchild.getheight() + 1)
# Parent height will be unchanged despite child's height changing
# Until the parent calls determineheight() function
self.assertEqual(parent.getheight(), right_child.getheight() + 1)
self.assertNotEqual(parent.getheight(), left_child.getheight() + 1)
# Now call determineheight() on parent. It will not have the height of
# left_child height plus 1
parent.determineheight()
self.assertEqual(parent.getheight(), left_child.getheight() + 1)
self.assertNotEqual(parent.getheight(), right_child.getheight() + 1)
def test_equality(self):
data = 10
original = Node(data)
duplicate = Node(data)
self.assertEqual(original, duplicate)
left_child = Node(5)
original.setleft(left_child)
self.assertNotEqual(original, duplicate)
duplicate.setleft(left_child)
self.assertEqual(original, duplicate)
# Demonstrate that nodes equal despite having different left and right children
duplicate.setleft(None)
right_child = left_child
duplicate.setright(right_child)
self.assertEqual(original, duplicate)