aboutsummaryrefslogtreecommitdiff
path: root/src/util/test_container_heap.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2009-12-23 15:09:11 +0000
committerChristian Grothoff <christian@grothoff.org>2009-12-23 15:09:11 +0000
commit0acc583b6e411a5f1ebd6172458baaad992c456e (patch)
tree06f2acf19d889249e8c7256c8cbe07d0d3488349 /src/util/test_container_heap.c
parent8149805b0539d29420b9e2b5a60fc09b2d69b348 (diff)
downloadgnunet-0acc583b6e411a5f1ebd6172458baaad992c456e.tar.gz
gnunet-0acc583b6e411a5f1ebd6172458baaad992c456e.zip
updating heap API and implementation
Diffstat (limited to 'src/util/test_container_heap.c')
-rw-r--r--src/util/test_container_heap.c97
1 files changed, 50 insertions, 47 deletions
diff --git a/src/util/test_container_heap.c b/src/util/test_container_heap.c
index 7a23855c5..b6e5f642a 100644
--- a/src/util/test_container_heap.c
+++ b/src/util/test_container_heap.c
@@ -28,67 +28,70 @@
28#include "gnunet_common.h" 28#include "gnunet_common.h"
29#include "gnunet_container_lib.h" 29#include "gnunet_container_lib.h"
30 30
31struct TestItem
32{
33 unsigned int cost;
34};
35
36static int 31static int
37iterator_callback (void *cls, void *element, GNUNET_CONTAINER_HeapCost cost) 32iterator_callback (void *cls,
33 struct GNUNET_CONTAINER_HeapNode *node,
34 void *element,
35 GNUNET_CONTAINER_HeapCostType cost)
38{ 36{
39 struct TestItem *node;
40 node = (struct TestItem *) element;
41#ifdef VERBOSE
42 fprintf (stdout, "%d\n", node->cost);
43#endif
44
45 return GNUNET_OK; 37 return GNUNET_OK;
46} 38}
47 39
48 40
49int 41static int
50main (int argc, char **argv) 42check ()
51{ 43{
52 struct GNUNET_CONTAINER_Heap *myHeap; 44 struct GNUNET_CONTAINER_Heap *myHeap;
53 struct TestItem neighbor1; 45 struct GNUNET_CONTAINER_HeapNode *n1;
54 struct TestItem neighbor2; 46 struct GNUNET_CONTAINER_HeapNode *n2;
55 struct TestItem neighbor3; 47 struct GNUNET_CONTAINER_HeapNode *n3;
56 struct TestItem neighbor4; 48 struct GNUNET_CONTAINER_HeapNode *n4;
57 struct TestItem neighbor5; 49 struct GNUNET_CONTAINER_HeapNode *n5;
58 struct TestItem neighbor6; 50 struct GNUNET_CONTAINER_HeapNode *n6;
59 51
60 GNUNET_log_setup ("test-container-heap", "WARNING", NULL); 52 myHeap = GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MIN);
61 53 n1 = GNUNET_CONTAINER_heap_insert (myHeap, "11", 11);
62 myHeap = GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MAX);
63
64 neighbor1.cost = 60;
65 neighbor2.cost = 50;
66 neighbor3.cost = 70;
67 neighbor4.cost = 120;
68 neighbor5.cost = 100;
69 neighbor6.cost = 30;
70
71 GNUNET_CONTAINER_heap_insert (myHeap, &neighbor1, neighbor1.cost);
72 GNUNET_CONTAINER_heap_iterate (myHeap, &iterator_callback, NULL);
73 GNUNET_CONTAINER_heap_insert (myHeap, &neighbor2, neighbor2.cost);
74 GNUNET_CONTAINER_heap_iterate (myHeap, &iterator_callback, NULL);
75 GNUNET_CONTAINER_heap_insert (myHeap, &neighbor3, neighbor3.cost);
76 GNUNET_CONTAINER_heap_iterate (myHeap, &iterator_callback, NULL);
77 GNUNET_CONTAINER_heap_insert (myHeap, &neighbor4, neighbor4.cost);
78 GNUNET_CONTAINER_heap_iterate (myHeap, &iterator_callback, NULL); 54 GNUNET_CONTAINER_heap_iterate (myHeap, &iterator_callback, NULL);
79 GNUNET_CONTAINER_heap_insert (myHeap, &neighbor5, neighbor5.cost); 55 GNUNET_assert (1 == GNUNET_CONTAINER_heap_get_size (myHeap));
56 n2 = GNUNET_CONTAINER_heap_insert (myHeap, "78", 78);
57 GNUNET_assert (2 == GNUNET_CONTAINER_heap_get_size (myHeap));
58 GNUNET_assert (0 == strcmp ("78",
59 GNUNET_CONTAINER_heap_remove_node (myHeap, n2)));
60 GNUNET_assert (1 == GNUNET_CONTAINER_heap_get_size (myHeap));
80 GNUNET_CONTAINER_heap_iterate (myHeap, &iterator_callback, NULL); 61 GNUNET_CONTAINER_heap_iterate (myHeap, &iterator_callback, NULL);
81 GNUNET_CONTAINER_heap_insert (myHeap, &neighbor6, neighbor6.cost); 62
82 GNUNET_CONTAINER_heap_iterate (myHeap, &iterator_callback, NULL); 63 n3 = GNUNET_CONTAINER_heap_insert (myHeap, "15", 5);
83 GNUNET_CONTAINER_heap_remove_node (myHeap, &neighbor5); 64 GNUNET_CONTAINER_heap_update_cost (myHeap, n3, 15);
84 GNUNET_CONTAINER_heap_iterate (myHeap, &iterator_callback, NULL); 65 GNUNET_assert (2 == GNUNET_CONTAINER_heap_get_size (myHeap));
85 GNUNET_CONTAINER_heap_remove_root (myHeap);
86 GNUNET_CONTAINER_heap_iterate (myHeap, &iterator_callback, NULL); 66 GNUNET_CONTAINER_heap_iterate (myHeap, &iterator_callback, NULL);
87 GNUNET_CONTAINER_heap_update_cost (myHeap, &neighbor6, 200); 67
68 n4 = GNUNET_CONTAINER_heap_insert (myHeap, "50", 50);
69 GNUNET_assert (3 == GNUNET_CONTAINER_heap_get_size (myHeap));
88 GNUNET_CONTAINER_heap_iterate (myHeap, &iterator_callback, NULL); 70 GNUNET_CONTAINER_heap_iterate (myHeap, &iterator_callback, NULL);
89 GNUNET_CONTAINER_heap_destroy (myHeap);
90 71
72 n5 = GNUNET_CONTAINER_heap_insert (myHeap, "100", 100);
73 n6 = GNUNET_CONTAINER_heap_insert (myHeap, "30/200", 30);
74 GNUNET_assert (5 == GNUNET_CONTAINER_heap_get_size (myHeap));
75 GNUNET_CONTAINER_heap_remove_node (myHeap, n5);
76 GNUNET_assert (0 == strcmp ("11",
77 GNUNET_CONTAINER_heap_remove_root (myHeap))); /* n1 */
78 GNUNET_CONTAINER_heap_update_cost (myHeap, n6, 200);
79 GNUNET_CONTAINER_heap_remove_node (myHeap, n3);
80 GNUNET_assert (0 == strcmp ("50",
81 GNUNET_CONTAINER_heap_remove_root (myHeap))); /* n4 */
82 GNUNET_assert (0 == strcmp ("30/200",
83 GNUNET_CONTAINER_heap_remove_root (myHeap))); /* n6 */
84 GNUNET_assert (0 == GNUNET_CONTAINER_heap_get_size (myHeap));
85 GNUNET_CONTAINER_heap_destroy (myHeap);
91 return 0; 86 return 0;
92} 87}
93 88
89
90int
91main (int argc, char **argv)
92{
93 GNUNET_log_setup ("test-container-heap", "WARNING", NULL);
94 return check();
95}
96
94/* end of test_container_heap.c */ 97/* end of test_container_heap.c */