forked from armandnaessens/algoritmen
-
Notifications
You must be signed in to change notification settings - Fork 0
/
test.py
157 lines (127 loc) · 4.32 KB
/
test.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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
from binarytree import BinaryTree
from bktree import BKTree
from redblacktree import RedBlackTree
from metrics import levenshtein_distance_DP
from metrics import levenshtein_distance_recursive
import pickle
def test_binarytree():
test_passed = True
test_database = pickle.load( open( 'testdatabase.p', 'rb' ) )
test_database = test_database['binarytree']
keys = test_database['keys']
result = test_database['result']
BT = BinaryTree()
for key in keys:
BT.insert(key,None)
nodes = []
nodes.append(BT._root)
nodes_checked = 0
while len(nodes) > 0:
node = nodes.pop()
if not node is None:
nodes_checked += 1
nodes.append(node._left)
nodes.append(node._right)
target = result[node._key]
if node._left is None:
if not target['l'] is None:
test_passed = False
else:
if not node._left._key == target['l']:
test_passed = False
if node._right is None:
if not target['r'] is None:
test_passed = False
else:
if not node._right._key == target['r']:
test_passed = False
BT = BinaryTree()
BT.insert('1','a')
BT.insert('1','b')
BT.insert('1','c')
if len(BT.get('1')) != 3:
test_passed = False
return test_passed
def test_bktree():
test_passed = True
test_database = pickle.load( open( 'testdatabase.p', 'rb' ) )
test_database = test_database['bktree']
keys = test_database['keys']
result_target = test_database['result']
query = test_database['query']
BKT = BKTree(levenshtein_distance_DP)
for key in keys:
BKT.insert(key)
result = BKT.get(query)
for (word,distance) in result:
encounter = 0
for (word_target,distance_target) in result_target:
if word == word_target:
if not distance == distance_target:
test_passed = False
encounter +=1
if not encounter == 1:
test_passed = False
return test_passed
def test_redblacktree():
test_passed = True
test_database = pickle.load( open( 'testdatabase.p', 'rb' ) )
test_database = test_database['redblacktree']
keys = test_database['keys']
result = test_database['result']
RBT = RedBlackTree()
for key in keys:
RBT.insert(key,None)
nodes = []
nodes.append(RBT._root)
nodes_checked = 0
while len(nodes) > 0:
node = nodes.pop()
if not node is None:
nodes_checked += 1
nodes.append(node._left)
nodes.append(node._right)
target = result[node._key]
if node._parent is None:
if not target['p'] is None:
test_passed = False
else:
if not node._parent._key == target['p']:
test_passed = False
if node._left is None:
if not target['l'] is None:
test_passed = False
else:
if not node._left._key == target['l']:
test_passed = False
if node._right is None:
if not target['r'] is None:
test_passed = False
else:
if not node._right._key == target['r']:
test_passed = False
if not node._black == target['b']:
test_passed = False
RBT = RedBlackTree()
RBT.insert('1','a')
RBT.insert('1','b')
RBT.insert('1','c')
if len(RBT.get('1')) != 3:
test_passed = False
return test_passed
def test_levenshtein_distance_DP():
return test_levenshtein(levenshtein_distance_DP)
def test_levenshtein_distance_recursive():
return test_levenshtein(levenshtein_distance_recursive)
def test_levenshtein(fnc):
test_passed = True
test_database = pickle.load( open( 'testdatabase.p', 'rb' ) )
test_database = test_database['levenshtein']
strings1 = test_database['strings1']
strings2 = test_database['strings2']
distances = test_database['distances']
N = test_database['N']
for i in range(N):
if distances[i] != fnc(strings1[i],strings2[i]):
test_passed = False
return test_passed