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