2 * Copyright (c) 2015 Cisco and/or its affiliates.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at:
7 * http://www.apache.org/licenses/LICENSE-2.0
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
16 #include <vppinfra/dlist.h>
20 dlist_elt_t *test_pool;
24 test_main_t test_main;
27 test_dlist_main (unformat_input_t * input)
29 test_main_t *tm = &test_main;
30 dlist_elt_t *head, *elt;
31 u32 elt_index, head_index;
35 pool_get (tm->test_pool, head);
36 head_index = head - tm->test_pool;
37 clib_dlist_init (tm->test_pool, head - tm->test_pool);
39 for (i = 1; i <= 3; i++)
41 pool_get (tm->test_pool, elt);
42 elt_index = elt - tm->test_pool;
44 clib_dlist_init (tm->test_pool, elt_index);
46 clib_dlist_addtail (tm->test_pool, head_index, elt_index);
49 head = pool_elt_at_index (tm->test_pool, head_index);
51 fformat (stdout, "Dump forward links\n");
52 elt_index = head->next;
57 elt = pool_elt_at_index (tm->test_pool, elt_index);
58 fformat (stdout, "elt %d value %d\n", i++, elt->value);
59 elt_index = elt->next;
63 fformat (stdout, "Dump reverse links\n");
64 elt_index = head->prev;
69 elt = pool_elt_at_index (tm->test_pool, elt_index);
70 fformat (stdout, "elt %d value %d\n", i++, elt->value);
71 elt_index = elt->prev;
75 fformat (stdout, "remove first element\n");
77 elt_index = clib_dlist_remove_head (tm->test_pool, head_index);
78 elt = pool_elt_at_index (tm->test_pool, elt_index);
80 fformat (stdout, "removed index %d value %d\n", elt_index, elt->value);
82 head = pool_elt_at_index (tm->test_pool, head_index);
84 fformat (stdout, "Dump forward links\n");
85 elt_index = head->next;
90 elt = pool_elt_at_index (tm->test_pool, elt_index);
91 fformat (stdout, "elt %d value %d\n", i++, elt->value);
92 elt_index = elt->next;
96 fformat (stdout, "Dump reverse links\n");
97 elt_index = head->prev;
102 elt = pool_elt_at_index (tm->test_pool, elt_index);
103 fformat (stdout, "elt %d value %d\n", i++, elt->value);
104 elt_index = elt->prev;
108 fformat (stdout, "re-insert index %d value %d at head\n", 1, 1);
110 clib_dlist_addhead (tm->test_pool, head_index, 1);
112 fformat (stdout, "Dump forward links\n");
113 elt_index = head->next;
118 elt = pool_elt_at_index (tm->test_pool, elt_index);
119 fformat (stdout, "elt %d value %d\n", i++, elt->value);
120 elt_index = elt->next;
124 fformat (stdout, "Dump reverse links\n");
125 elt_index = head->prev;
130 elt = pool_elt_at_index (tm->test_pool, elt_index);
131 fformat (stdout, "elt %d value %d\n", i++, elt->value);
132 elt_index = elt->prev;
136 fformat (stdout, "Remove middle element\n");
138 clib_dlist_remove (tm->test_pool, 2);
139 elt = pool_elt_at_index (tm->test_pool, 2);
141 fformat (stdout, "removed index %d value %d\n", elt_index, elt->value);
143 fformat (stdout, "Dump forward links\n");
144 elt_index = head->next;
149 elt = pool_elt_at_index (tm->test_pool, elt_index);
150 fformat (stdout, "elt %d value %d\n", i++, elt->value);
151 elt_index = elt->next;
155 fformat (stdout, "Dump reverse links\n");
156 elt_index = head->prev;
161 elt = pool_elt_at_index (tm->test_pool, elt_index);
162 fformat (stdout, "elt %d value %d\n", i++, elt->value);
163 elt_index = elt->prev;
172 main (int argc, char *argv[])
177 clib_mem_init (0, 3ULL << 30);
179 unformat_init_command_line (&i, argv);
180 ret = test_dlist_main (&i);
185 #endif /* CLIB_UNIX */
188 * fd.io coding-style-patch-verification: ON
191 * eval: (c-set-style "gnu")