Skip to content

Commit b541817

Browse files
committedNov 28, 2020
Add test for ThreadedBinaryTree
1 parent 06f499e commit b541817

File tree

1 file changed

+197
-0
lines changed

1 file changed

+197
-0
lines changed
 
+197
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,197 @@
1+
import 'package:algorithms/trees/threaded_binary_tree.dart';
2+
import 'package:test/test.dart';
3+
4+
void main() {
5+
late ThreadedBinaryTree<String> empty, singleNode, multipleNodes;
6+
7+
setUp(() {
8+
empty = ThreadedBinaryTree();
9+
singleNode = ThreadedBinaryTree.withSingleValue('@');
10+
multipleNodes = ThreadedBinaryTree.fromList(
11+
['f', 'b', 'g', 'a', 'd', 'i', 'c', 'e', 'h']);
12+
/*---------------------------------------------
13+
multipleNodes:
14+
f
15+
/ \
16+
b g
17+
/ \ \
18+
a d i
19+
/ \ /
20+
c e h
21+
https://en.wikipedia.org/wiki/File:Threaded_tree.svg
22+
---------------------------------------------*/
23+
});
24+
25+
test('Test empty tree', () {
26+
expect(empty.isEmpty, isTrue);
27+
expect(singleNode.isEmpty, isFalse);
28+
expect(multipleNodes.isEmpty, isFalse);
29+
});
30+
31+
test('Test single node', () {
32+
expect(singleNode.root!.value, equals('@'));
33+
expect(multipleNodes.root!.value, equals('f'));
34+
});
35+
36+
test('Nullify', () {
37+
var test = ThreadedBinaryTree<int>.fromList([1, 2, 3]);
38+
test.nullify();
39+
expect(test.isEmpty, isTrue);
40+
});
41+
42+
test('Check contains', () {
43+
expect(empty.contains(''), isFalse);
44+
expect(singleNode.contains('@'), isTrue);
45+
expect(singleNode.contains(''), isFalse);
46+
expect(multipleNodes.contains('nope'), isFalse);
47+
48+
for (var i in ['f', 'b', 'g', 'a', 'd', 'i', 'c', 'e', 'h']) {
49+
expect(multipleNodes.contains(i), isTrue);
50+
}
51+
});
52+
53+
group('Traversal', () {
54+
test('Pre-order', () {
55+
expect(empty.preOrder(), <String>[]);
56+
expect(singleNode.preOrder(), <String>['@']);
57+
expect(multipleNodes.preOrder(),
58+
equals(<String>['f', 'b', 'a', 'd', 'c', 'e', 'g', 'i', 'h']));
59+
});
60+
61+
test('Post-order', () {
62+
expect(empty.postOrder(), <String>[]);
63+
expect(singleNode.postOrder(), <String>['@']);
64+
expect(multipleNodes.postOrder(),
65+
equals(<String>['a', 'c', 'e', 'd', 'b', 'h', 'i', 'g', 'f']));
66+
});
67+
68+
test('In-order', () {
69+
expect(empty.inOrder(), <String>[]);
70+
expect(singleNode.inOrder(), <String>['@']);
71+
expect(multipleNodes.inOrder(),
72+
equals(<String>['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']));
73+
});
74+
});
75+
76+
test('Add node', () {
77+
var test = ThreadedBinaryTree<int>();
78+
var list = test.inOrder();
79+
80+
test.add(50);
81+
expect(
82+
test.inOrder(),
83+
equals(list
84+
..add(50)
85+
..sort()));
86+
87+
test.add(60);
88+
expect(
89+
test.inOrder(),
90+
equals(list
91+
..add(60)
92+
..sort()));
93+
94+
test.add(70);
95+
expect(
96+
test.inOrder(),
97+
equals(list
98+
..add(70)
99+
..sort()));
100+
101+
test.add(40);
102+
expect(
103+
test.inOrder(),
104+
equals(list
105+
..add(40)
106+
..sort()));
107+
108+
test.add(55);
109+
expect(
110+
test.inOrder(),
111+
equals(list
112+
..add(55)
113+
..sort()));
114+
115+
test.add(75);
116+
expect(
117+
test.inOrder(),
118+
equals(list
119+
..add(75)
120+
..sort()));
121+
122+
test.add(53);
123+
expect(
124+
test.inOrder(),
125+
equals(list
126+
..add(53)
127+
..sort()));
128+
129+
test.add(54);
130+
expect(
131+
test.inOrder(),
132+
equals(list
133+
..add(54)
134+
..sort()));
135+
136+
test.add(30);
137+
expect(
138+
test.inOrder(),
139+
equals(list
140+
..add(30)
141+
..sort()));
142+
143+
test.add(45);
144+
expect(
145+
test.inOrder(),
146+
equals(list
147+
..add(45)
148+
..sort()));
149+
150+
test.add(35);
151+
expect(
152+
test.inOrder(),
153+
equals(list
154+
..add(35)
155+
..sort()));
156+
157+
test.add(51);
158+
expect(
159+
test.inOrder(),
160+
equals(list
161+
..add(51)
162+
..sort()));
163+
});
164+
165+
test('Delete node', () {
166+
var list = multipleNodes.inOrder();
167+
168+
multipleNodes.delete('f');
169+
expect(multipleNodes.inOrder(), equals(list..remove('f')));
170+
171+
multipleNodes.delete('a');
172+
expect(multipleNodes.inOrder(), equals(list..remove('a')));
173+
174+
multipleNodes.delete('i');
175+
expect(multipleNodes.inOrder(), equals(list..remove('i')));
176+
177+
multipleNodes.delete('c');
178+
expect(multipleNodes.inOrder(), equals(list..remove('c')));
179+
180+
multipleNodes.delete('e');
181+
expect(multipleNodes.inOrder(), equals(list..remove('e')));
182+
183+
multipleNodes.delete('d');
184+
expect(multipleNodes.inOrder(), equals(list..remove('d')));
185+
186+
multipleNodes.delete('b');
187+
expect(multipleNodes.inOrder(), equals(list..remove('b')));
188+
189+
multipleNodes.delete('g');
190+
expect(multipleNodes.inOrder(), equals(list..remove('g')));
191+
192+
multipleNodes.delete('h');
193+
expect(multipleNodes.inOrder(), (list..remove('h')));
194+
195+
expect(multipleNodes.isEmpty, isTrue);
196+
});
197+
}

0 commit comments

Comments
 (0)
Please sign in to comment.