Branch data Line data Source code
1 : : /* SPDX-License-Identifier: LGPL-2.1+ */
2 : : /***
3 : : Copyright © 2013 Jan Janssen
4 : : ***/
5 : :
6 : : #include "list.h"
7 : : #include "util.h"
8 : :
9 : 4 : int main(int argc, const char *argv[]) {
10 : : size_t i;
11 : : typedef struct list_item {
12 : : LIST_FIELDS(struct list_item, item);
13 : : } list_item;
14 : : LIST_HEAD(list_item, head);
15 : : list_item items[4];
16 : : list_item *cursor;
17 : :
18 : 4 : LIST_HEAD_INIT(head);
19 [ - + ]: 4 : assert_se(head == NULL);
20 : :
21 [ + + ]: 20 : for (i = 0; i < ELEMENTSOF(items); i++) {
22 [ - + ]: 16 : LIST_INIT(item, &items[i]);
23 [ + - - + ]: 16 : assert_se(LIST_JUST_US(item, &items[i]));
24 [ - + + + ]: 16 : LIST_PREPEND(item, head, &items[i]);
25 : : }
26 : :
27 : 4 : i = 0;
28 [ + - + + : 20 : LIST_FOREACH_OTHERS(item, cursor, &items[2]) {
- + + + +
+ ]
29 : 12 : i++;
30 [ - + ]: 12 : assert_se(cursor != &items[2]);
31 : : }
32 [ - + ]: 4 : assert_se(i == ELEMENTSOF(items)-1);
33 : :
34 : 4 : i = 0;
35 [ + - + + : 28 : LIST_FOREACH_OTHERS(item, cursor, &items[0]) {
- + + + +
+ ]
36 : 12 : i++;
37 [ - + ]: 12 : assert_se(cursor != &items[0]);
38 : : }
39 [ - + ]: 4 : assert_se(i == ELEMENTSOF(items)-1);
40 : :
41 : 4 : i = 0;
42 [ + - - + : 16 : LIST_FOREACH_OTHERS(item, cursor, &items[3]) {
+ - - + +
+ ]
43 : 12 : i++;
44 [ - + ]: 12 : assert_se(cursor != &items[3]);
45 : : }
46 [ - + ]: 4 : assert_se(i == ELEMENTSOF(items)-1);
47 : :
48 [ + - - + ]: 4 : assert_se(!LIST_JUST_US(item, head));
49 : :
50 [ - + ]: 4 : assert_se(items[0].item_next == NULL);
51 [ - + ]: 4 : assert_se(items[1].item_next == &items[0]);
52 [ - + ]: 4 : assert_se(items[2].item_next == &items[1]);
53 [ - + ]: 4 : assert_se(items[3].item_next == &items[2]);
54 : :
55 [ - + ]: 4 : assert_se(items[0].item_prev == &items[1]);
56 [ - + ]: 4 : assert_se(items[1].item_prev == &items[2]);
57 [ - + ]: 4 : assert_se(items[2].item_prev == &items[3]);
58 [ - + ]: 4 : assert_se(items[3].item_prev == NULL);
59 : :
60 [ - + + + ]: 16 : LIST_FIND_HEAD(item, &items[0], cursor);
61 [ - + ]: 4 : assert_se(cursor == &items[3]);
62 : :
63 [ - + + + ]: 16 : LIST_FIND_TAIL(item, &items[3], cursor);
64 [ - + ]: 4 : assert_se(cursor == &items[0]);
65 : :
66 [ - + + - : 4 : LIST_REMOVE(item, head, &items[1]);
+ - # # ]
67 [ + - - + ]: 4 : assert_se(LIST_JUST_US(item, &items[1]));
68 : :
69 [ - + ]: 4 : assert_se(items[0].item_next == NULL);
70 [ - + ]: 4 : assert_se(items[2].item_next == &items[0]);
71 [ - + ]: 4 : assert_se(items[3].item_next == &items[2]);
72 : :
73 [ - + ]: 4 : assert_se(items[0].item_prev == &items[2]);
74 [ - + ]: 4 : assert_se(items[2].item_prev == &items[3]);
75 [ - + ]: 4 : assert_se(items[3].item_prev == NULL);
76 : :
77 [ - + - + : 4 : LIST_INSERT_AFTER(item, head, &items[3], &items[1]);
# # + - ]
78 [ - + ]: 4 : assert_se(items[0].item_next == NULL);
79 [ - + ]: 4 : assert_se(items[2].item_next == &items[0]);
80 [ - + ]: 4 : assert_se(items[1].item_next == &items[2]);
81 [ - + ]: 4 : assert_se(items[3].item_next == &items[1]);
82 : :
83 [ - + ]: 4 : assert_se(items[0].item_prev == &items[2]);
84 [ - + ]: 4 : assert_se(items[2].item_prev == &items[1]);
85 [ - + ]: 4 : assert_se(items[1].item_prev == &items[3]);
86 [ - + ]: 4 : assert_se(items[3].item_prev == NULL);
87 : :
88 [ - + + - : 4 : LIST_REMOVE(item, head, &items[1]);
+ - # # ]
89 [ + - - + ]: 4 : assert_se(LIST_JUST_US(item, &items[1]));
90 : :
91 [ - + ]: 4 : assert_se(items[0].item_next == NULL);
92 [ - + ]: 4 : assert_se(items[2].item_next == &items[0]);
93 [ - + ]: 4 : assert_se(items[3].item_next == &items[2]);
94 : :
95 [ - + ]: 4 : assert_se(items[0].item_prev == &items[2]);
96 [ - + ]: 4 : assert_se(items[2].item_prev == &items[3]);
97 [ - + ]: 4 : assert_se(items[3].item_prev == NULL);
98 : :
99 [ - + - + : 4 : LIST_INSERT_BEFORE(item, head, &items[2], &items[1]);
# # # # +
- ]
100 [ - + ]: 4 : assert_se(items[0].item_next == NULL);
101 [ - + ]: 4 : assert_se(items[2].item_next == &items[0]);
102 [ - + ]: 4 : assert_se(items[1].item_next == &items[2]);
103 [ - + ]: 4 : assert_se(items[3].item_next == &items[1]);
104 : :
105 [ - + ]: 4 : assert_se(items[0].item_prev == &items[2]);
106 [ - + ]: 4 : assert_se(items[2].item_prev == &items[1]);
107 [ - + ]: 4 : assert_se(items[1].item_prev == &items[3]);
108 [ - + ]: 4 : assert_se(items[3].item_prev == NULL);
109 : :
110 [ - + - + : 4 : LIST_REMOVE(item, head, &items[0]);
+ - # # ]
111 [ + - - + ]: 4 : assert_se(LIST_JUST_US(item, &items[0]));
112 : :
113 [ - + ]: 4 : assert_se(items[2].item_next == NULL);
114 [ - + ]: 4 : assert_se(items[1].item_next == &items[2]);
115 [ - + ]: 4 : assert_se(items[3].item_next == &items[1]);
116 : :
117 [ - + ]: 4 : assert_se(items[2].item_prev == &items[1]);
118 [ - + ]: 4 : assert_se(items[1].item_prev == &items[3]);
119 [ - + ]: 4 : assert_se(items[3].item_prev == NULL);
120 : :
121 [ - + - + : 4 : LIST_INSERT_BEFORE(item, head, &items[3], &items[0]);
# # # # -
+ ]
122 [ - + ]: 4 : assert_se(items[2].item_next == NULL);
123 [ - + ]: 4 : assert_se(items[1].item_next == &items[2]);
124 [ - + ]: 4 : assert_se(items[3].item_next == &items[1]);
125 [ - + ]: 4 : assert_se(items[0].item_next == &items[3]);
126 : :
127 [ - + ]: 4 : assert_se(items[2].item_prev == &items[1]);
128 [ - + ]: 4 : assert_se(items[1].item_prev == &items[3]);
129 [ - + ]: 4 : assert_se(items[3].item_prev == &items[0]);
130 [ - + ]: 4 : assert_se(items[0].item_prev == NULL);
131 [ - + ]: 4 : assert_se(head == &items[0]);
132 : :
133 [ - + + - : 4 : LIST_REMOVE(item, head, &items[0]);
- + - + ]
134 [ + - - + ]: 4 : assert_se(LIST_JUST_US(item, &items[0]));
135 : :
136 [ - + ]: 4 : assert_se(items[2].item_next == NULL);
137 [ - + ]: 4 : assert_se(items[1].item_next == &items[2]);
138 [ - + ]: 4 : assert_se(items[3].item_next == &items[1]);
139 : :
140 [ - + ]: 4 : assert_se(items[2].item_prev == &items[1]);
141 [ - + ]: 4 : assert_se(items[1].item_prev == &items[3]);
142 [ - + ]: 4 : assert_se(items[3].item_prev == NULL);
143 : :
144 [ - + + - : 12 : LIST_INSERT_BEFORE(item, head, NULL, &items[0]);
- + + + #
# ]
145 [ - + ]: 4 : assert_se(items[0].item_next == NULL);
146 [ - + ]: 4 : assert_se(items[2].item_next == &items[0]);
147 [ - + ]: 4 : assert_se(items[1].item_next == &items[2]);
148 [ - + ]: 4 : assert_se(items[3].item_next == &items[1]);
149 : :
150 [ - + ]: 4 : assert_se(items[0].item_prev == &items[2]);
151 [ - + ]: 4 : assert_se(items[2].item_prev == &items[1]);
152 [ - + ]: 4 : assert_se(items[1].item_prev == &items[3]);
153 [ - + ]: 4 : assert_se(items[3].item_prev == NULL);
154 : :
155 [ - + - + : 4 : LIST_REMOVE(item, head, &items[0]);
+ - # # ]
156 [ + - - + ]: 4 : assert_se(LIST_JUST_US(item, &items[0]));
157 : :
158 [ - + ]: 4 : assert_se(items[2].item_next == NULL);
159 [ - + ]: 4 : assert_se(items[1].item_next == &items[2]);
160 [ - + ]: 4 : assert_se(items[3].item_next == &items[1]);
161 : :
162 [ - + ]: 4 : assert_se(items[2].item_prev == &items[1]);
163 [ - + ]: 4 : assert_se(items[1].item_prev == &items[3]);
164 [ - + ]: 4 : assert_se(items[3].item_prev == NULL);
165 : :
166 [ - + + - : 4 : LIST_REMOVE(item, head, &items[1]);
+ - # # ]
167 [ + - - + ]: 4 : assert_se(LIST_JUST_US(item, &items[1]));
168 : :
169 [ - + ]: 4 : assert_se(items[2].item_next == NULL);
170 [ - + ]: 4 : assert_se(items[3].item_next == &items[2]);
171 : :
172 [ - + ]: 4 : assert_se(items[2].item_prev == &items[3]);
173 [ - + ]: 4 : assert_se(items[3].item_prev == NULL);
174 : :
175 [ - + - + : 4 : LIST_REMOVE(item, head, &items[2]);
+ - # # ]
176 [ + - - + ]: 4 : assert_se(LIST_JUST_US(item, &items[2]));
177 [ + - - + ]: 4 : assert_se(LIST_JUST_US(item, head));
178 : :
179 [ - + - + : 4 : LIST_REMOVE(item, head, &items[3]);
- + - + ]
180 [ + - - + ]: 4 : assert_se(LIST_JUST_US(item, &items[3]));
181 : :
182 [ - + ]: 4 : assert_se(head == NULL);
183 : :
184 [ + + ]: 20 : for (i = 0; i < ELEMENTSOF(items); i++) {
185 [ + - - + ]: 16 : assert_se(LIST_JUST_US(item, &items[i]));
186 [ + + + + : 28 : LIST_APPEND(item, head, &items[i]);
- + + + -
+ - + ]
187 : : }
188 : :
189 [ + - - + ]: 4 : assert_se(!LIST_JUST_US(item, head));
190 : :
191 [ - + ]: 4 : assert_se(items[0].item_next == &items[1]);
192 [ - + ]: 4 : assert_se(items[1].item_next == &items[2]);
193 [ - + ]: 4 : assert_se(items[2].item_next == &items[3]);
194 [ - + ]: 4 : assert_se(items[3].item_next == NULL);
195 : :
196 [ - + ]: 4 : assert_se(items[0].item_prev == NULL);
197 [ - + ]: 4 : assert_se(items[1].item_prev == &items[0]);
198 [ - + ]: 4 : assert_se(items[2].item_prev == &items[1]);
199 [ - + ]: 4 : assert_se(items[3].item_prev == &items[2]);
200 : :
201 [ + + ]: 20 : for (i = 0; i < ELEMENTSOF(items); i++)
202 [ - + + + : 16 : LIST_REMOVE(item, head, &items[i]);
- + - + ]
203 : :
204 [ - + ]: 4 : assert_se(head == NULL);
205 : :
206 : 4 : return 0;
207 : : }
|