diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2010-03-19 14:28:12 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2010-03-19 14:28:12 +0000 |
commit | 0df346263a1bd8c4369258aa9b7de8336e2cf4f2 (patch) | |
tree | 8b3d9881e1bb6db2bd51ac1c96fe58e3ae518be3 /src/util/test_container_heap.c | |
parent | 7723ff5dd62589129d0be78275f8e58261369368 (diff) | |
download | gnunet-0df346263a1bd8c4369258aa9b7de8336e2cf4f2.tar.gz gnunet-0df346263a1bd8c4369258aa9b7de8336e2cf4f2.zip |
Diffstat (limited to 'src/util/test_container_heap.c')
-rw-r--r-- | src/util/test_container_heap.c | 175 |
1 files changed, 172 insertions, 3 deletions
diff --git a/src/util/test_container_heap.c b/src/util/test_container_heap.c index 78bae229f..b4e206e57 100644 --- a/src/util/test_container_heap.c +++ b/src/util/test_container_heap.c | |||
@@ -37,7 +37,6 @@ iterator_callback (void *cls, | |||
37 | return GNUNET_OK; | 37 | return GNUNET_OK; |
38 | } | 38 | } |
39 | 39 | ||
40 | |||
41 | static int | 40 | static int |
42 | check () | 41 | check () |
43 | { | 42 | { |
@@ -48,10 +47,37 @@ check () | |||
48 | struct GNUNET_CONTAINER_HeapNode *n4; | 47 | struct GNUNET_CONTAINER_HeapNode *n4; |
49 | struct GNUNET_CONTAINER_HeapNode *n5; | 48 | struct GNUNET_CONTAINER_HeapNode *n5; |
50 | struct GNUNET_CONTAINER_HeapNode *n6; | 49 | struct GNUNET_CONTAINER_HeapNode *n6; |
50 | struct GNUNET_CONTAINER_HeapNode *n7; | ||
51 | struct GNUNET_CONTAINER_HeapNode *n8; | ||
51 | 52 | ||
52 | myHeap = GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MIN); | 53 | myHeap = GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MIN); |
54 | |||
55 | // GNUNET_CONTAINER_heap_remove_root heap empty, taking if-branch | ||
56 | n1 = GNUNET_CONTAINER_heap_remove_root (myHeap); | ||
57 | GNUNET_assert (NULL == n1); | ||
58 | |||
59 | // GNUNET_CONTAINER_heap_peek heap empty, taking if-branch | ||
60 | n1 = GNUNET_CONTAINER_heap_peek (myHeap); | ||
61 | GNUNET_assert (NULL == n1); | ||
62 | |||
63 | // GNUNET_CONTAINER_heap_walk_get_next: heap empty, taking if-branch | ||
64 | n1 = GNUNET_CONTAINER_heap_walk_get_next (myHeap); | ||
65 | GNUNET_assert (NULL == n1); | ||
66 | |||
53 | n1 = GNUNET_CONTAINER_heap_insert (myHeap, "11", 11); | 67 | n1 = GNUNET_CONTAINER_heap_insert (myHeap, "11", 11); |
54 | GNUNET_assert (NULL != n1); | 68 | GNUNET_assert (NULL != n1); |
69 | |||
70 | |||
71 | // GNUNET_CONTAINER_heap_peek not empty, taking if-branch | ||
72 | n2 = NULL; | ||
73 | n2 = GNUNET_CONTAINER_heap_peek (myHeap); | ||
74 | GNUNET_assert (NULL != n2); | ||
75 | |||
76 | // GNUNET_CONTAINER_heap_walk_get_next: 1 element | ||
77 | n1 = NULL; | ||
78 | n1 = GNUNET_CONTAINER_heap_walk_get_next(myHeap); | ||
79 | GNUNET_assert (NULL != n1); | ||
80 | |||
55 | GNUNET_CONTAINER_heap_iterate (myHeap, &iterator_callback, NULL); | 81 | GNUNET_CONTAINER_heap_iterate (myHeap, &iterator_callback, NULL); |
56 | GNUNET_assert (1 == GNUNET_CONTAINER_heap_get_size (myHeap)); | 82 | GNUNET_assert (1 == GNUNET_CONTAINER_heap_get_size (myHeap)); |
57 | n2 = GNUNET_CONTAINER_heap_insert (myHeap, "78", 78); | 83 | n2 = GNUNET_CONTAINER_heap_insert (myHeap, "78", 78); |
@@ -60,12 +86,12 @@ check () | |||
60 | GNUNET_CONTAINER_heap_remove_node (myHeap, n2))); | 86 | GNUNET_CONTAINER_heap_remove_node (myHeap, n2))); |
61 | GNUNET_assert (1 == GNUNET_CONTAINER_heap_get_size (myHeap)); | 87 | GNUNET_assert (1 == GNUNET_CONTAINER_heap_get_size (myHeap)); |
62 | GNUNET_CONTAINER_heap_iterate (myHeap, &iterator_callback, NULL); | 88 | GNUNET_CONTAINER_heap_iterate (myHeap, &iterator_callback, NULL); |
63 | 89 | ||
64 | n3 = GNUNET_CONTAINER_heap_insert (myHeap, "15", 5); | 90 | n3 = GNUNET_CONTAINER_heap_insert (myHeap, "15", 5); |
65 | GNUNET_CONTAINER_heap_update_cost (myHeap, n3, 15); | 91 | GNUNET_CONTAINER_heap_update_cost (myHeap, n3, 15); |
66 | GNUNET_assert (2 == GNUNET_CONTAINER_heap_get_size (myHeap)); | 92 | GNUNET_assert (2 == GNUNET_CONTAINER_heap_get_size (myHeap)); |
67 | GNUNET_CONTAINER_heap_iterate (myHeap, &iterator_callback, NULL); | 93 | GNUNET_CONTAINER_heap_iterate (myHeap, &iterator_callback, NULL); |
68 | 94 | ||
69 | n4 = GNUNET_CONTAINER_heap_insert (myHeap, "50", 50); | 95 | n4 = GNUNET_CONTAINER_heap_insert (myHeap, "50", 50); |
70 | GNUNET_CONTAINER_heap_update_cost (myHeap, n4, 50); | 96 | GNUNET_CONTAINER_heap_update_cost (myHeap, n4, 50); |
71 | GNUNET_assert (3 == GNUNET_CONTAINER_heap_get_size (myHeap)); | 97 | GNUNET_assert (3 == GNUNET_CONTAINER_heap_get_size (myHeap)); |
@@ -84,7 +110,150 @@ check () | |||
84 | GNUNET_assert (0 == strcmp ("30/200", | 110 | GNUNET_assert (0 == strcmp ("30/200", |
85 | GNUNET_CONTAINER_heap_remove_root (myHeap))); /* n6 */ | 111 | GNUNET_CONTAINER_heap_remove_root (myHeap))); /* n6 */ |
86 | GNUNET_assert (0 == GNUNET_CONTAINER_heap_get_size (myHeap)); | 112 | GNUNET_assert (0 == GNUNET_CONTAINER_heap_get_size (myHeap)); |
113 | |||
114 | GNUNET_CONTAINER_heap_destroy (myHeap); | ||
115 | |||
116 | // My additions to a complete testcase | ||
117 | // Testing a GNUNET_CONTAINER_HEAP_ORDER_MIN | ||
118 | // Testing remove_node | ||
119 | |||
120 | myHeap = GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MIN); | ||
121 | |||
122 | n1 = GNUNET_CONTAINER_heap_insert (myHeap, "10", 10); | ||
123 | GNUNET_CONTAINER_heap_update_cost (myHeap, n1, 15); | ||
124 | |||
125 | GNUNET_assert (0 == strcmp ("10", GNUNET_CONTAINER_heap_remove_node (myHeap,n1))); | ||
126 | |||
127 | n1 = GNUNET_CONTAINER_heap_insert (myHeap, "10", 10); | ||
128 | n2 = GNUNET_CONTAINER_heap_insert (myHeap, "20", 10); | ||
129 | |||
130 | GNUNET_CONTAINER_heap_walk_get_next (myHeap); | ||
131 | GNUNET_assert (0 == strcmp ("20", GNUNET_CONTAINER_heap_remove_node (myHeap,n2))); | ||
132 | GNUNET_assert (0 == strcmp ("10", GNUNET_CONTAINER_heap_remove_node (myHeap,n1))); | ||
133 | |||
134 | n1 = GNUNET_CONTAINER_heap_insert (myHeap, "10", 10); | ||
135 | n2 = GNUNET_CONTAINER_heap_insert (myHeap, "20", 10); | ||
136 | n3 = GNUNET_CONTAINER_heap_insert (myHeap, "30", 10); | ||
137 | |||
138 | GNUNET_CONTAINER_heap_remove_node (myHeap,n2); | ||
139 | GNUNET_CONTAINER_heap_remove_node (myHeap,n1); | ||
140 | GNUNET_assert (0 == strcmp ("30", GNUNET_CONTAINER_heap_remove_root (myHeap))); | ||
141 | |||
142 | n1 = GNUNET_CONTAINER_heap_insert (myHeap, "10", 10); | ||
143 | n2 = GNUNET_CONTAINER_heap_insert (myHeap, "20", 10); | ||
144 | n3 = GNUNET_CONTAINER_heap_insert (myHeap, "30", 10); | ||
145 | |||
146 | GNUNET_CONTAINER_heap_remove_node (myHeap,n2); | ||
147 | GNUNET_CONTAINER_heap_remove_node (myHeap,n1); | ||
148 | GNUNET_assert (0 == strcmp ("30", GNUNET_CONTAINER_heap_remove_node (myHeap,n3))); | ||
149 | |||
150 | n1 = GNUNET_CONTAINER_heap_insert (myHeap, "10", 10); | ||
151 | n2 = GNUNET_CONTAINER_heap_insert (myHeap, "20", 20); | ||
152 | n3 = GNUNET_CONTAINER_heap_insert (myHeap, "30", 30); | ||
153 | |||
154 | GNUNET_assert (0 == strcmp ("20", GNUNET_CONTAINER_heap_remove_node (myHeap,n2))); | ||
155 | GNUNET_assert (0 == strcmp ("10", GNUNET_CONTAINER_heap_remove_root (myHeap))); | ||
156 | GNUNET_assert (0 == strcmp ("30", GNUNET_CONTAINER_heap_remove_root (myHeap))); | ||
157 | |||
158 | n1 = GNUNET_CONTAINER_heap_insert (myHeap, "10", 10); | ||
159 | n2 = GNUNET_CONTAINER_heap_insert (myHeap, "20", 20); | ||
160 | n3 = GNUNET_CONTAINER_heap_insert (myHeap, "30", 30); | ||
161 | n4 = GNUNET_CONTAINER_heap_insert (myHeap, "40", 40); | ||
162 | n5 = GNUNET_CONTAINER_heap_insert (myHeap, "50", 50); | ||
163 | n6 = GNUNET_CONTAINER_heap_insert (myHeap, "60", 60); | ||
164 | |||
165 | // Inserting nodes deeper in the tree with lower costs | ||
166 | n7 = GNUNET_CONTAINER_heap_insert (myHeap, "70", 10); | ||
167 | n8 = GNUNET_CONTAINER_heap_insert (myHeap, "80", 10); | ||
168 | |||
169 | GNUNET_assert (0 == strcmp ("30", GNUNET_CONTAINER_heap_remove_node (myHeap,n3))); | ||
170 | |||
171 | // Cleaning up... | ||
172 | GNUNET_assert (0 == strcmp ("60", GNUNET_CONTAINER_heap_remove_node (myHeap,n6))); | ||
173 | GNUNET_assert (0 == strcmp ("50", GNUNET_CONTAINER_heap_remove_node (myHeap,n5))); | ||
174 | |||
175 | // Testing heap_walk_get_next | ||
176 | GNUNET_CONTAINER_heap_walk_get_next (myHeap); | ||
177 | GNUNET_CONTAINER_heap_walk_get_next (myHeap); | ||
178 | GNUNET_CONTAINER_heap_walk_get_next (myHeap);; | ||
179 | GNUNET_CONTAINER_heap_walk_get_next (myHeap); | ||
180 | GNUNET_CONTAINER_heap_walk_get_next (myHeap); | ||
181 | |||
182 | GNUNET_assert (0 == strcmp ("10", GNUNET_CONTAINER_heap_remove_node (myHeap,n1))); | ||
183 | GNUNET_assert (0 == strcmp ("20", GNUNET_CONTAINER_heap_remove_node (myHeap,n2))); | ||
184 | GNUNET_assert (0 == strcmp ("40", GNUNET_CONTAINER_heap_remove_node (myHeap,n4))); | ||
185 | GNUNET_assert (0 == strcmp ("70", GNUNET_CONTAINER_heap_remove_node (myHeap,n7))); | ||
186 | GNUNET_assert (0 == strcmp ("80", GNUNET_CONTAINER_heap_remove_node (myHeap,n8))); | ||
187 | |||
188 | // End Testing remove_node | ||
189 | |||
190 | // Testing a GNUNET_CONTAINER_HEAP_ORDER_MAX | ||
191 | GNUNET_CONTAINER_heap_destroy (myHeap); | ||
192 | |||
193 | myHeap = GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MAX); | ||
194 | |||
195 | n1 = GNUNET_CONTAINER_heap_insert (myHeap, "10", 10); | ||
196 | GNUNET_CONTAINER_heap_update_cost (myHeap, n1, 15); | ||
197 | |||
198 | GNUNET_assert (0 == strcmp ("10", GNUNET_CONTAINER_heap_remove_node (myHeap,n1))); | ||
199 | |||
200 | n1 = GNUNET_CONTAINER_heap_insert (myHeap, "10", 10); | ||
201 | n2 = GNUNET_CONTAINER_heap_insert (myHeap, "20", 10); | ||
202 | |||
203 | GNUNET_CONTAINER_heap_walk_get_next (myHeap); | ||
204 | GNUNET_assert (0 == strcmp ("20", GNUNET_CONTAINER_heap_remove_node (myHeap,n2))); | ||
205 | GNUNET_assert (0 == strcmp ("10", GNUNET_CONTAINER_heap_remove_node (myHeap,n1))); | ||
206 | |||
207 | n1 = GNUNET_CONTAINER_heap_insert (myHeap, "10", 10); | ||
208 | n2 = GNUNET_CONTAINER_heap_insert (myHeap, "20", 10); | ||
209 | n3 = GNUNET_CONTAINER_heap_insert (myHeap, "30", 10); | ||
210 | |||
211 | GNUNET_CONTAINER_heap_remove_node (myHeap,n2); | ||
212 | GNUNET_CONTAINER_heap_remove_node (myHeap,n1); | ||
213 | GNUNET_assert (0 == strcmp ("30", GNUNET_CONTAINER_heap_remove_root (myHeap))); | ||
214 | |||
215 | n1 = GNUNET_CONTAINER_heap_insert (myHeap, "10", 10); | ||
216 | n2 = GNUNET_CONTAINER_heap_insert (myHeap, "20", 10); | ||
217 | n3 = GNUNET_CONTAINER_heap_insert (myHeap, "30", 10); | ||
218 | |||
219 | GNUNET_CONTAINER_heap_remove_node (myHeap,n2); | ||
220 | GNUNET_CONTAINER_heap_remove_node (myHeap,n1); | ||
221 | GNUNET_assert (0 == strcmp ("30", GNUNET_CONTAINER_heap_remove_node (myHeap,n3))); | ||
222 | |||
223 | n1 = GNUNET_CONTAINER_heap_insert (myHeap, "10", 10); | ||
224 | n2 = GNUNET_CONTAINER_heap_insert (myHeap, "20", 20); | ||
225 | n3 = GNUNET_CONTAINER_heap_insert (myHeap, "30", 30); | ||
226 | n4 = GNUNET_CONTAINER_heap_insert (myHeap, "40", 40); | ||
227 | n5 = GNUNET_CONTAINER_heap_insert (myHeap, "50", 50); | ||
228 | n6 = GNUNET_CONTAINER_heap_insert (myHeap, "60", 60); | ||
229 | |||
230 | // Inserting nodes deeper in the tree with lower costs | ||
231 | n7 = GNUNET_CONTAINER_heap_insert (myHeap, "70", 10); | ||
232 | n8 = GNUNET_CONTAINER_heap_insert (myHeap, "80", 10); | ||
233 | |||
234 | GNUNET_assert (0 == strcmp ("30", GNUNET_CONTAINER_heap_remove_node (myHeap,n3))); | ||
235 | |||
236 | // Cleaning up... | ||
237 | GNUNET_assert (0 == strcmp ("60", GNUNET_CONTAINER_heap_remove_node (myHeap,n6))); | ||
238 | GNUNET_assert (0 == strcmp ("50", GNUNET_CONTAINER_heap_remove_node (myHeap,n5))); | ||
239 | |||
240 | // Testing heap_walk_get_next | ||
241 | GNUNET_CONTAINER_heap_walk_get_next (myHeap); | ||
242 | GNUNET_CONTAINER_heap_walk_get_next (myHeap); | ||
243 | GNUNET_CONTAINER_heap_walk_get_next (myHeap);; | ||
244 | GNUNET_CONTAINER_heap_walk_get_next (myHeap); | ||
245 | GNUNET_CONTAINER_heap_walk_get_next (myHeap); | ||
246 | |||
247 | GNUNET_assert (0 == strcmp ("10", GNUNET_CONTAINER_heap_remove_node (myHeap,n1))); | ||
248 | GNUNET_assert (0 == strcmp ("20", GNUNET_CONTAINER_heap_remove_node (myHeap,n2))); | ||
249 | GNUNET_assert (0 == strcmp ("40", GNUNET_CONTAINER_heap_remove_node (myHeap,n4))); | ||
250 | GNUNET_assert (0 == strcmp ("70", GNUNET_CONTAINER_heap_remove_node (myHeap,n7))); | ||
251 | GNUNET_assert (0 == strcmp ("80", GNUNET_CONTAINER_heap_remove_node (myHeap,n8))); | ||
252 | |||
253 | // End Testing remove_node | ||
254 | |||
87 | GNUNET_CONTAINER_heap_destroy (myHeap); | 255 | GNUNET_CONTAINER_heap_destroy (myHeap); |
256 | |||
88 | return 0; | 257 | return 0; |
89 | } | 258 | } |
90 | 259 | ||