diff options
author | Christian Grothoff <christian@grothoff.org> | 2009-12-23 15:09:11 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2009-12-23 15:09:11 +0000 |
commit | 0acc583b6e411a5f1ebd6172458baaad992c456e (patch) | |
tree | 06f2acf19d889249e8c7256c8cbe07d0d3488349 /src/util/test_container_heap.c | |
parent | 8149805b0539d29420b9e2b5a60fc09b2d69b348 (diff) | |
download | gnunet-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.c | 97 |
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 | ||
31 | struct TestItem | ||
32 | { | ||
33 | unsigned int cost; | ||
34 | }; | ||
35 | |||
36 | static int | 31 | static int |
37 | iterator_callback (void *cls, void *element, GNUNET_CONTAINER_HeapCost cost) | 32 | iterator_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 | ||
49 | int | 41 | static int |
50 | main (int argc, char **argv) | 42 | check () |
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 | |||
90 | int | ||
91 | main (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 */ |