aboutsummaryrefslogtreecommitdiff
path: root/src/util/test_container_heap.c
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2010-03-19 14:28:12 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2010-03-19 14:28:12 +0000
commit0df346263a1bd8c4369258aa9b7de8336e2cf4f2 (patch)
tree8b3d9881e1bb6db2bd51ac1c96fe58e3ae518be3 /src/util/test_container_heap.c
parent7723ff5dd62589129d0be78275f8e58261369368 (diff)
downloadgnunet-0df346263a1bd8c4369258aa9b7de8336e2cf4f2.tar.gz
gnunet-0df346263a1bd8c4369258aa9b7de8336e2cf4f2.zip
Diffstat (limited to 'src/util/test_container_heap.c')
-rw-r--r--src/util/test_container_heap.c175
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
41static int 40static int
42check () 41check ()
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