1 #include <freeradius-devel/util/acutest.h>
25 return test_list_next(list,
current);
36 item_p = test_dcursor_iter_init(&cursor, &list,
test_iter, NULL, &cursor);
38 TEST_CHECK((cursor.dcursor.dlist) == &list.head);
40 TEST_CHECK(!test_dcursor_list_next_peek(&cursor));
41 TEST_CHECK(cursor.dcursor.iter_uctx == &cursor);
47 test_item_t item1 = {
"item1", { { NULL, NULL } } };
52 test_list_insert_tail(&list, &item1);
54 item_p = test_dcursor_init(&cursor, &list);
56 TEST_CHECK((cursor.dcursor.dlist) == &list.head);
57 TEST_CHECK(test_dcursor_current(&cursor) == &item1);
63 test_item_t item1 = {
"item1", { { NULL, NULL } } };
64 test_item_t item2 = {
"item2", { { NULL, NULL } } };
69 test_list_insert_tail(&list, &item1);
70 test_list_insert_tail(&list, &item2);
72 item_p = test_dcursor_init(&cursor, &list);
74 TEST_CHECK(test_dcursor_current(&cursor) == &item1);
80 test_item_t item1 = {
"item1", { { NULL, NULL } } };
81 test_item_t item2 = {
"item2", { { NULL, NULL } } };
86 test_list_insert_tail(&list, &item1);
87 test_list_insert_tail(&list, &item2);
89 test_dcursor_init(&cursor, &list);
90 TEST_CHECK(test_dcursor_next_peek(&cursor) == &item2);
92 item_p = test_dcursor_next(&cursor);
94 TEST_CHECK(test_dcursor_current(&cursor) == &item2);
101 test_item_t item1 = {
"item1", { { NULL, NULL } } };
102 test_item_t item2 = {
"item2", { { NULL, NULL } } };
107 test_list_insert_tail(&list, &item1);
108 test_list_insert_tail(&list, &item2);
110 test_dcursor_init(&cursor, &list);
111 test_dcursor_next(&cursor);
112 item_p = test_dcursor_next(&cursor);
117 item_p = test_dcursor_next(&cursor);
130 test_dcursor_init(&cursor, &list);
139 test_item_t item1 = {
"item1", { { NULL, NULL } } };
140 test_item_t item2 = {
"item2", { { NULL, NULL } } };
141 test_item_t item3 = {
"item3", { { NULL, NULL } } };
146 test_list_insert_tail(&list, &item1);
147 test_list_insert_tail(&list, &item2);
148 test_list_insert_tail(&list, &item3);
150 test_dcursor_init(&cursor, &list);
158 test_item_t item1 = {
"item1", { { NULL, NULL } } };
159 test_item_t item2 = {
"item2", { { NULL, NULL } } };
164 test_list_insert_tail(&list, &item1);
165 test_list_insert_tail(&list, &item2);
167 test_dcursor_init(&cursor, &list);
172 item_p = test_dcursor_next(&cursor);
175 item_p = test_dcursor_next(&cursor);
181 item_p = test_dcursor_current(&cursor);
188 test_item_t item1 = {
"item1", { { NULL, NULL } } };
189 test_item_t item2 = {
"item2", { { NULL, NULL } } };
194 test_list_insert_tail(&list, &item1);
195 test_list_insert_tail(&list, &item2);
197 item_p = test_dcursor_iter_init(&cursor, &list,
test_iter, NULL, &cursor);
200 item_p = test_dcursor_next(&cursor);
203 item_p = test_dcursor_next(&cursor);
209 item_p = test_dcursor_current(&cursor);
216 test_item_t item1 = {
"item1", { { NULL, NULL } } };
217 test_item_t item2 = {
"item2", { { NULL, NULL } } };
218 test_item_t item3 = {
"item3", { { NULL, NULL } } };
223 test_list_insert_tail(&list, &item1);
224 test_list_insert_tail(&list, &item2);
225 test_list_insert_tail(&list, &item3);
227 test_dcursor_init(&cursor, &list);
228 test_dcursor_next(&cursor);
236 test_item_t item1 = {
"item1", { { NULL, NULL } } };
237 test_item_t item2 = {
"item2", { { NULL, NULL } } };
238 test_item_t item3 = {
"item3", { { NULL, NULL } } };
243 test_list_insert_tail(&list, &item1);
244 test_list_insert_tail(&list, &item2);
245 test_list_insert_tail(&list, &item3);
247 test_dcursor_init(&cursor, &list);
248 test_dcursor_next(&cursor);
251 item_p = test_dcursor_current(&cursor);
258 test_item_t item1 = {
"item1", { { NULL, NULL } } };
259 test_item_t item2 = {
"item2", { { NULL, NULL } } };
260 test_item_t item3 = {
"item3", { { NULL, NULL } } };
265 test_list_insert_tail(&list, &item1);
266 test_list_insert_tail(&list, &item2);
267 test_list_insert_tail(&list, &item3);
269 test_dcursor_init(&cursor, &list);
278 test_item_t item1 = {
"item1", { { NULL, NULL } } };
279 test_item_t item2 = {
"item2", { { NULL, NULL } } };
280 test_item_t item3 = {
"item3", { { NULL, NULL } } };
285 test_list_insert_tail(&list, &item1);
286 test_list_insert_tail(&list, &item2);
287 test_list_insert_tail(&list, &item3);
289 test_dcursor_init(&cursor, &list);
291 item_p = test_dcursor_next(&cursor);
294 item_p = test_dcursor_next(&cursor);
302 test_item_t item1 = {
"item1", { { NULL, NULL } } };
306 test_dcursor_init(&cursor, &list);
307 test_dcursor_append(&cursor, &item1);
309 item_p = test_dcursor_current(&cursor);
311 TEST_CHECK(test_dcursor_next_peek(&cursor) == &item1);
317 test_item_t item1 = {
"item1", { { NULL, NULL } } };
318 test_item_t item2 = {
"item2", { { NULL, NULL } } };
319 test_item_t item3 = {
"item3", { { NULL, NULL } } };
325 test_dcursor_init(&cursor, &list);
326 test_dcursor_append(&cursor, &item1);
327 test_dcursor_append(&cursor, &item2);
328 test_dcursor_append(&cursor, &item3);
330 item_p = test_dcursor_current(&cursor);
332 TEST_CHECK(test_dcursor_next(&cursor) == &item1);
333 TEST_CHECK(test_dcursor_next(&cursor) == &item2);
334 TEST_CHECK(test_dcursor_next(&cursor) == &item3);
341 test_item_t item1 = {
"item1", { { NULL, NULL } } };
346 test_dcursor_init(&cursor, &list);
347 test_dcursor_prepend(&cursor, &item1);
349 item_p = test_dcursor_current(&cursor);
351 TEST_CHECK(test_dcursor_next_peek(&cursor) == &item1);
357 test_item_t item1 = {
"item1", { { NULL, NULL } } };
358 test_item_t item2 = {
"item2", { { NULL, NULL } } };
359 test_item_t item3 = {
"item3", { { NULL, NULL } } };
365 test_dcursor_init(&cursor, &list);
366 test_dcursor_prepend(&cursor, &item1);
367 test_dcursor_prepend(&cursor, &item2);
368 test_dcursor_prepend(&cursor, &item3);
370 item_p = test_dcursor_current(&cursor);
372 TEST_CHECK(test_dcursor_next(&cursor) == &item3);
373 TEST_CHECK(test_dcursor_next(&cursor) == &item2);
374 TEST_CHECK(test_dcursor_next(&cursor) == &item1);
381 test_item_t item1 = {
"item1", { { NULL, NULL } } };
386 test_dcursor_init(&cursor, &list);
387 test_dcursor_insert(&cursor, &item1);
389 item_p = test_dcursor_current(&cursor);
391 TEST_CHECK(test_dcursor_next_peek(&cursor) == &item1);
397 test_item_t item1 = {
"item1", { { NULL, NULL } } };
398 test_item_t item2 = {
"item2", { { NULL, NULL } } };
399 test_item_t item3 = {
"item3", { { NULL, NULL } } };
405 test_dcursor_init(&cursor, &list);
406 test_dcursor_insert(&cursor, &item1);
407 test_dcursor_insert(&cursor, &item2);
408 test_dcursor_insert(&cursor, &item3);
410 item_p = test_dcursor_current(&cursor);
412 TEST_CHECK(test_dcursor_next(&cursor) == &item1);
413 TEST_CHECK(test_dcursor_next(&cursor) == &item2);
414 TEST_CHECK(test_dcursor_next(&cursor) == &item3);
421 test_item_t item1 = {
"item1", { { NULL, NULL } } };
426 test_dcursor_init(&cursor, &list);
427 TEST_CHECK(!test_dcursor_replace(&cursor, &item1));
429 item_p = test_dcursor_current(&cursor);
431 TEST_CHECK(test_dcursor_next_peek(&cursor) == &item1);
437 test_item_t item1 = {
"item1", { { NULL, NULL } } };
438 test_item_t item2 = {
"item2", { { NULL, NULL } } };
443 test_list_insert_tail(&list, &item1);
445 test_dcursor_init(&cursor, &list);
446 test_dcursor_prepend(&cursor, &item2);
448 TEST_CHECK(test_dcursor_current(&cursor) == &item1);
451 item_p = test_dcursor_next(&cursor);
456 TEST_CHECK(test_dcursor_next_peek(&cursor) == &item1);
465 test_item_t item1 = {
"item1", { { NULL, NULL } } };
466 test_item_t item2 = {
"item2", { { NULL, NULL } } };
471 test_list_insert_tail(&list, &item1);
473 test_dcursor_init(&cursor, &list);
474 test_dcursor_append(&cursor, &item2);
476 TEST_CHECK(test_dcursor_current(&cursor) == &item1);
477 TEST_CHECK(test_dcursor_next_peek(&cursor) == &item2);
479 item_p = test_dcursor_next(&cursor);
492 test_item_t item1 = {
"item1", { { NULL, NULL } } };
493 test_item_t item2 = {
"item2", { { NULL, NULL } } };
498 test_list_insert_tail(&list, &item1);
500 test_dcursor_init(&cursor, &list);
501 test_dcursor_append(&cursor, &item2);
503 TEST_CHECK(test_dcursor_current(&cursor) == &item1);
504 TEST_CHECK(test_dcursor_next_peek(&cursor) == &item2);
506 item_p = test_dcursor_next(&cursor);
519 test_item_t item1 = {
"item1", { { NULL, NULL } } };
520 test_item_t item2 = {
"item2", { { NULL, NULL } } };
525 test_list_insert_tail(&list, &item1);
527 test_dcursor_init(&cursor, &list);
528 item_p = test_dcursor_replace(&cursor, &item2);
531 item_p = test_dcursor_current(&cursor);
544 test_item_t item1 = {
"item1", { { NULL, NULL } } };
545 test_item_t item2 = {
"item2", { { NULL, NULL } } };
546 test_item_t item3 = {
"item3", { { NULL, NULL } } };
551 test_list_insert_tail(&list, &item1);
552 test_list_insert_tail(&list, &item2);
554 test_dcursor_init(&cursor, &list);
555 test_dcursor_prepend(&cursor, &item3);
557 TEST_CHECK(test_dcursor_current(&cursor) == &item1);
558 TEST_CHECK(test_dcursor_next_peek(&cursor) == &item2);
560 item_p = test_dcursor_next(&cursor);
563 item_p = test_dcursor_next(&cursor);
576 test_item_t item1 = {
"item1", { { NULL, NULL } } };
577 test_item_t item2 = {
"item2", { { NULL, NULL } } };
578 test_item_t item3 = {
"item3", { { NULL, NULL } } };
583 test_list_insert_tail(&list, &item1);
584 test_list_insert_tail(&list, &item2);
586 test_dcursor_init(&cursor, &list);
587 test_dcursor_append(&cursor, &item3);
589 TEST_CHECK(test_dcursor_current(&cursor) == &item1);
591 item_p = test_dcursor_next(&cursor);
593 item_p = test_dcursor_next(&cursor);
606 test_item_t item1 = {
"item1", { { NULL, NULL } } };
607 test_item_t item2 = {
"item2", { { NULL, NULL } } };
608 test_item_t item3 = {
"item3", { { NULL, NULL } } };
613 test_list_insert_tail(&list, &item1);
614 test_list_insert_tail(&list, &item2);
616 test_dcursor_init(&cursor, &list);
617 test_dcursor_insert(&cursor, &item3);
619 TEST_CHECK(test_dcursor_current(&cursor) == &item1);
620 TEST_CHECK(test_dcursor_next_peek(&cursor) == &item3);
622 item_p = test_dcursor_next(&cursor);
625 item_p = test_dcursor_next(&cursor);
638 test_item_t item1 = {
"item1", { { NULL, NULL } } };
639 test_item_t item2 = {
"item2", { { NULL, NULL } } };
640 test_item_t item3 = {
"item3", { { NULL, NULL } } };
645 test_list_insert_tail(&list, &item1);
646 test_list_insert_tail(&list, &item2);
648 test_dcursor_init(&cursor, &list);
649 item_p = test_dcursor_replace(&cursor, &item3);
652 item_p = test_dcursor_current(&cursor);
665 test_item_t item1 = {
"item1", { { NULL, NULL } } };
666 test_item_t item2 = {
"item2", { { NULL, NULL } } };
667 test_item_t item3 = {
"item3", { { NULL, NULL } } };
668 test_item_t item4 = {
"item4", { { NULL, NULL } } };
673 test_list_insert_tail(&list, &item1);
674 test_list_insert_tail(&list, &item2);
675 test_list_insert_tail(&list, &item3);
677 test_dcursor_init(&cursor, &list);
678 test_dcursor_next(&cursor);
679 test_dcursor_prepend(&cursor, &item4);
681 TEST_CHECK(test_dcursor_current(&cursor) == &item2);
682 TEST_CHECK(test_dcursor_next_peek(&cursor) == &item3);
684 item_p = test_dcursor_next(&cursor);
687 item_p = test_dcursor_next(&cursor);
700 test_item_t item1 = {
"item1", { { NULL, NULL } } };
701 test_item_t item2 = {
"item2", { { NULL, NULL } } };
702 test_item_t item3 = {
"item3", { { NULL, NULL } } };
703 test_item_t item4 = {
"item4", { { NULL, NULL } } };
708 test_list_insert_tail(&list, &item1);
709 test_list_insert_tail(&list, &item2);
710 test_list_insert_tail(&list, &item3);
712 test_dcursor_init(&cursor, &list);
713 test_dcursor_next(&cursor);
714 test_dcursor_append(&cursor, &item4);
716 TEST_CHECK(test_dcursor_current(&cursor) == &item2);
717 TEST_CHECK(test_dcursor_next_peek(&cursor) == &item3);
719 item_p = test_dcursor_next(&cursor);
732 test_item_t item1 = {
"item1", { { NULL, NULL } } };
733 test_item_t item2 = {
"item2", { { NULL, NULL } } };
734 test_item_t item3 = {
"item3", { { NULL, NULL } } };
735 test_item_t item4 = {
"item4", { { NULL, NULL } } };
740 test_list_insert_tail(&list, &item1);
741 test_list_insert_tail(&list, &item2);
742 test_list_insert_tail(&list, &item3);
744 test_dcursor_init(&cursor, &list);
745 test_dcursor_next(&cursor);
746 test_dcursor_insert(&cursor, &item4);
748 TEST_CHECK(test_dcursor_current(&cursor) == &item2);
749 TEST_CHECK(test_dcursor_next_peek(&cursor) == &item4);
751 item_p = test_dcursor_next(&cursor);
754 item_p = test_dcursor_next(&cursor);
767 test_item_t item1 = {
"item1", { { NULL, NULL } } };
768 test_item_t item2 = {
"item2", { { NULL, NULL } } };
769 test_item_t item3 = {
"item3", { { NULL, NULL } } };
770 test_item_t item4 = {
"item4", { { NULL, NULL } } };
775 test_list_insert_tail(&list, &item1);
776 test_list_insert_tail(&list, &item2);
777 test_list_insert_tail(&list, &item3);
779 test_dcursor_init(&cursor, &list);
780 test_dcursor_next(&cursor);
781 item_p = test_dcursor_replace(&cursor, &item4);
784 item_p = test_dcursor_current(&cursor);
787 TEST_CHECK(test_dcursor_next_peek(&cursor) == &item3);
799 test_item_t item1 = {
"item1", { { NULL, NULL } } };
800 test_item_t item2 = {
"item2", { { NULL, NULL } } };
801 test_item_t item3 = {
"item3", { { NULL, NULL } } };
802 test_item_t item4 = {
"item4", { { NULL, NULL } } };
807 test_list_insert_tail(&list, &item1);
808 test_list_insert_tail(&list, &item2);
809 test_list_insert_tail(&list, &item3);
811 test_dcursor_init(&cursor, &list);
812 test_dcursor_next(&cursor);
813 test_dcursor_next(&cursor);
814 test_dcursor_prepend(&cursor, &item4);
816 TEST_CHECK(test_dcursor_current(&cursor) == &item3);
819 item_p = test_dcursor_next(&cursor);
832 test_item_t item1 = {
"item1", { { NULL, NULL } } };
833 test_item_t item2 = {
"item2", { { NULL, NULL } } };
834 test_item_t item3 = {
"item3", { { NULL, NULL } } };
835 test_item_t item4 = {
"item4", { { NULL, NULL } } };
840 test_list_insert_tail(&list, &item1);
841 test_list_insert_tail(&list, &item2);
842 test_list_insert_tail(&list, &item3);
844 test_dcursor_init(&cursor, &list);
845 test_dcursor_next(&cursor);
846 test_dcursor_next(&cursor);
847 test_dcursor_append(&cursor, &item4);
849 TEST_CHECK(test_dcursor_current(&cursor) == &item3);
850 TEST_CHECK(test_dcursor_next_peek(&cursor) == &item4);
852 item_p = test_dcursor_next(&cursor);
865 test_item_t item1 = {
"item1", { { NULL, NULL } } };
866 test_item_t item2 = {
"item2", { { NULL, NULL } } };
867 test_item_t item3 = {
"item3", { { NULL, NULL } } };
868 test_item_t item4 = {
"item4", { { NULL, NULL } } };
873 test_list_insert_tail(&list, &item1);
874 test_list_insert_tail(&list, &item2);
875 test_list_insert_tail(&list, &item3);
877 test_dcursor_init(&cursor, &list);
878 test_dcursor_next(&cursor);
879 test_dcursor_next(&cursor);
880 test_dcursor_insert(&cursor, &item4);
882 TEST_CHECK(test_dcursor_current(&cursor) == &item3);
883 TEST_CHECK(test_dcursor_next_peek(&cursor) == &item4);
885 item_p = test_dcursor_next(&cursor);
898 test_item_t item1 = {
"item1", { { NULL, NULL } } };
899 test_item_t item2 = {
"item2", { { NULL, NULL } } };
900 test_item_t item3 = {
"item3", { { NULL, NULL } } };
901 test_item_t item4 = {
"item4", { { NULL, NULL } } };
906 test_list_insert_tail(&list, &item1);
907 test_list_insert_tail(&list, &item2);
908 test_list_insert_tail(&list, &item3);
910 test_dcursor_init(&cursor, &list);
911 test_dcursor_next(&cursor);
912 test_dcursor_next(&cursor);
913 item_p = test_dcursor_replace(&cursor, &item4);
916 item_p = test_dcursor_current(&cursor);
935 test_dcursor_init(&cursor, &list);
943 test_item_t item1 = {
"item1", { { NULL, NULL } } };
948 test_list_insert_tail(&list, &item1);
950 test_dcursor_init(&cursor, &list);
952 item_p = test_dcursor_remove(&cursor);
964 test_item_t item1 = {
"item1", { { NULL, NULL } } };
965 test_item_t item2 = {
"item2", { { NULL, NULL } } };
970 test_list_insert_tail(&list, &item1);
971 test_list_insert_tail(&list, &item2);
973 test_dcursor_init(&cursor, &list);
975 item_p = test_dcursor_remove(&cursor);
978 TEST_CHECK(test_dcursor_current(&cursor) == &item2);
983 item_p = test_dcursor_remove(&cursor);
995 test_item_t item1 = {
"item1", { { NULL, NULL } } };
996 test_item_t item2 = {
"item2", { { NULL, NULL } } };
997 test_item_t item3 = {
"item3", { { NULL, NULL } } };
1002 test_list_insert_tail(&list, &item1);
1003 test_list_insert_tail(&list, &item2);
1004 test_list_insert_tail(&list, &item3);
1006 test_dcursor_init(&cursor, &list);
1007 item_p = test_dcursor_remove(&cursor);
1009 TEST_CHECK(test_dcursor_current(&cursor) == &item2);
1010 TEST_CHECK(test_dcursor_next_peek(&cursor) == &item3);
1012 item_p = test_dcursor_remove(&cursor);
1014 TEST_CHECK(test_dcursor_current(&cursor) == &item3);
1015 TEST_CHECK(!test_dcursor_next_peek(&cursor));
1017 item_p = test_dcursor_remove(&cursor);
1028 test_item_t item1 = {
"item1", { { NULL, NULL } } };
1029 test_item_t item2 = {
"item2", { { NULL, NULL } } };
1030 test_item_t item3 = {
"item3", { { NULL, NULL } } };
1035 test_list_insert_tail(&list, &item1);
1036 test_list_insert_tail(&list, &item2);
1037 test_list_insert_tail(&list, &item3);
1039 test_dcursor_init(&cursor, &list);
1040 test_dcursor_next(&cursor);
1042 item_p = test_dcursor_remove(&cursor);
1044 TEST_CHECK(test_dcursor_current(&cursor) == &item3);
1045 TEST_CHECK(!test_dcursor_next_peek(&cursor));
1047 item_p = test_dcursor_remove(&cursor);
1051 TEST_CHECK(!test_dcursor_next_peek(&cursor));
1053 item_p = test_dcursor_remove(&cursor);
1063 test_item_t item1 = {
"item1", { { NULL, NULL } } };
1064 test_item_t item2 = {
"item2", { { NULL, NULL } } };
1065 test_item_t item3 = {
"item3", { { NULL, NULL } } };
1070 test_list_insert_tail(&list, &item1);
1071 test_list_insert_tail(&list, &item2);
1072 test_list_insert_tail(&list, &item3);
1074 test_dcursor_init(&cursor, &list);
1077 item_p = test_dcursor_remove(&cursor);
1080 TEST_CHECK(!test_dcursor_next_peek(&cursor));
1082 item_p = test_dcursor_remove(&cursor);
1086 TEST_CHECK(!test_dcursor_next_peek(&cursor));
1096 test_item_t item1a = {
"item1a", { { NULL, NULL } } };
1097 test_item_t item2a = {
"item2a", { { NULL, NULL } } };
1098 test_item_t item3a = {
"item3a", { { NULL, NULL } } };
1100 test_item_t item1b = {
"item1b", { { NULL, NULL } } };
1101 test_item_t item2b = {
"item2b", { { NULL, NULL } } };
1102 test_item_t item3b = {
"item3b", { { NULL, NULL } } };
1107 test_list_insert_tail(&list_a, &item1a);
1108 test_list_insert_tail(&list_a, &item2a);
1109 test_list_insert_tail(&list_a, &item3a);
1112 test_list_insert_tail(&list_b, &item1b);
1113 test_list_insert_tail(&list_b, &item2b);
1114 test_list_insert_tail(&list_b, &item3b);
1116 test_dcursor_init(&cursor_a, &list_a);
1117 test_dcursor_init(&cursor_b, &list_b);
1118 test_dcursor_merge(&cursor_a, &cursor_b);
1120 TEST_CHECK(test_dcursor_current(&cursor_a) == &item1a);
1122 TEST_MSG(
"Got %s", test_dcursor_current(&cursor_a)->
name);
1124 TEST_CHECK(test_dcursor_next(&cursor_a) == &item1b);
1126 TEST_MSG(
"Got %s", test_dcursor_current(&cursor_a)->
name);
1127 TEST_CHECK(test_dcursor_next(&cursor_a) == &item2b);
1129 TEST_MSG(
"Got %s", test_dcursor_current(&cursor_a)->
name);
1130 TEST_CHECK(test_dcursor_next(&cursor_a) == &item3b);
1132 TEST_MSG(
"Got %s", test_dcursor_current(&cursor_a)->
name);
1134 TEST_CHECK(test_dcursor_next(&cursor_a) == &item2a);
1136 TEST_MSG(
"Got %s", test_dcursor_current(&cursor_a)->
name);
1137 TEST_CHECK(test_dcursor_next(&cursor_a) == &item3a);
1139 TEST_MSG(
"Got %s", test_dcursor_current(&cursor_a)->
name);
1142 TEST_CHECK(!test_dcursor_current(&cursor_b));
1143 TEST_CHECK(!test_dcursor_list_next_peek(&cursor_b));
1150 test_item_t item1a = {
"item1a", { { NULL, NULL } } };
1151 test_item_t item2a = {
"item2a", { { NULL, NULL } } };
1152 test_item_t item3a = {
"item3a", { { NULL, NULL } } };
1154 test_item_t item1b = {
"item1b", { { NULL, NULL } } };
1155 test_item_t item2b = {
"item2b", { { NULL, NULL } } };
1156 test_item_t item3b = {
"item3b", { { NULL, NULL } } };
1161 test_list_insert_tail(&list_a, &item1a);
1162 test_list_insert_tail(&list_a, &item2a);
1163 test_list_insert_tail(&list_a, &item3a);
1166 test_list_insert_tail(&list_b, &item1b);
1167 test_list_insert_tail(&list_b, &item2b);
1168 test_list_insert_tail(&list_b, &item3b);
1170 test_dcursor_init(&cursor_a, &list_a);
1171 test_dcursor_init(&cursor_b, &list_b);
1172 test_dcursor_next(&cursor_a);
1173 test_dcursor_merge(&cursor_a, &cursor_b);
1175 TEST_CHECK(test_dcursor_current(&cursor_a) == &item2a);
1177 TEST_MSG(
"Got %s", test_dcursor_current(&cursor_a)->
name);
1179 TEST_CHECK(test_dcursor_next(&cursor_a) == &item1b);
1181 TEST_MSG(
"Got %s", test_dcursor_current(&cursor_a)->
name);
1182 TEST_CHECK(test_dcursor_next(&cursor_a) == &item2b);
1184 TEST_MSG(
"Got %s", test_dcursor_current(&cursor_a)->
name);
1185 TEST_CHECK(test_dcursor_next(&cursor_a) == &item3b);
1187 TEST_MSG(
"Got %s", test_dcursor_current(&cursor_a)->
name);
1192 TEST_CHECK(test_dcursor_next(&cursor_a) == &item3a);
1194 TEST_MSG(
"Got %s", test_dcursor_current(&cursor_a)->
name);
1197 TEST_CHECK(!test_dcursor_current(&cursor_b));
1198 TEST_CHECK(!test_dcursor_list_next_peek(&cursor_b));
1205 test_item_t item1a = {
"item1a", { { NULL, NULL } } };
1206 test_item_t item2a = {
"item2a", { { NULL, NULL } } };
1207 test_item_t item3a = {
"item3a", { { NULL, NULL } } };
1209 test_item_t item1b = {
"item1b", { { NULL, NULL } } };
1210 test_item_t item2b = {
"item2b", { { NULL, NULL } } };
1211 test_item_t item3b = {
"item3b", { { NULL, NULL } } };
1216 test_list_insert_tail(&list_a, &item1a);
1217 test_list_insert_tail(&list_a, &item2a);
1218 test_list_insert_tail(&list_a, &item3a);
1221 test_list_insert_tail(&list_b, &item1b);
1222 test_list_insert_tail(&list_b, &item2b);
1223 test_list_insert_tail(&list_b, &item3b);
1225 test_dcursor_init(&cursor_a, &list_a);
1226 test_dcursor_init(&cursor_b, &list_b);
1228 test_dcursor_merge(&cursor_a, &cursor_b);
1230 TEST_CHECK(test_dcursor_current(&cursor_a) == &item3a);
1232 TEST_MSG(
"Got %s", test_dcursor_current(&cursor_a)->
name);
1234 TEST_CHECK(test_dcursor_next(&cursor_a) == &item1b);
1236 TEST_MSG(
"Got %s", test_dcursor_current(&cursor_a)->
name);
1237 TEST_CHECK(test_dcursor_next(&cursor_a) == &item2b);
1239 TEST_MSG(
"Got %s", test_dcursor_current(&cursor_a)->
name);
1240 TEST_CHECK(test_dcursor_next(&cursor_a) == &item3b);
1242 TEST_MSG(
"Got %s", test_dcursor_current(&cursor_a)->
name);
1244 TEST_CHECK(!test_dcursor_list_next_peek(&cursor_a));
1245 TEST_CHECK(!test_dcursor_current(&cursor_b));
1246 TEST_CHECK(!test_dcursor_list_next_peek(&cursor_b));
1253 test_item_t item1a = {
"item1a", { { NULL, NULL } } };
1254 test_item_t item2a = {
"item2a", { { NULL, NULL } } };
1255 test_item_t item3a = {
"item3a", { { NULL, NULL } } };
1257 test_item_t item1b = {
"item1b", { { NULL, NULL } } };
1258 test_item_t item2b = {
"item2b", { { NULL, NULL } } };
1259 test_item_t item3b = {
"item3b", { { NULL, NULL } } };
1264 test_list_insert_tail(&list_a, &item1a);
1265 test_list_insert_tail(&list_a, &item2a);
1266 test_list_insert_tail(&list_a, &item3a);
1269 test_list_insert_tail(&list_b, &item1b);
1270 test_list_insert_tail(&list_b, &item2b);
1271 test_list_insert_tail(&list_b, &item3b);
1273 test_dcursor_init(&cursor_a, &list_a);
1274 test_dcursor_init(&cursor_b, &list_b);
1275 test_dcursor_next(&cursor_b);
1276 test_dcursor_merge(&cursor_a, &cursor_b);
1278 TEST_CHECK(test_dcursor_current(&cursor_a) == &item1a);
1280 TEST_MSG(
"Got %s", test_dcursor_current(&cursor_a)->
name);
1282 TEST_CHECK(test_dcursor_next(&cursor_a) == &item2b);
1284 TEST_MSG(
"Got %s", test_dcursor_current(&cursor_a)->
name);
1285 TEST_CHECK(test_dcursor_next(&cursor_a) == &item3b);
1287 TEST_MSG(
"Got %s", test_dcursor_current(&cursor_a)->
name);
1289 TEST_CHECK(test_dcursor_next(&cursor_a) == &item2a);
1291 TEST_MSG(
"Got %s", test_dcursor_current(&cursor_a)->
name);
1292 TEST_CHECK(test_dcursor_next(&cursor_a) == &item3a);
1294 TEST_MSG(
"Got %s", test_dcursor_current(&cursor_a)->
name);
1297 TEST_CHECK(!test_dcursor_current(&cursor_b));
1298 TEST_CHECK(!test_dcursor_list_next_peek(&cursor_b));
1305 test_item_t item1a = {
"item1a", { { NULL, NULL } } };
1306 test_item_t item2a = {
"item2a", { { NULL, NULL } } };
1307 test_item_t item3a = {
"item3a", { { NULL, NULL } } };
1309 test_item_t item1b = {
"item1b", { { NULL, NULL } } };
1310 test_item_t item2b = {
"item2b", { { NULL, NULL } } };
1311 test_item_t item3b = {
"item3b", { { NULL, NULL } } };
1316 test_list_insert_tail(&list_a, &item1a);
1317 test_list_insert_tail(&list_a, &item2a);
1318 test_list_insert_tail(&list_a, &item3a);
1321 test_list_insert_tail(&list_b, &item1b);
1322 test_list_insert_tail(&list_b, &item2b);
1323 test_list_insert_tail(&list_b, &item3b);
1325 test_dcursor_init(&cursor_a, &list_a);
1326 test_dcursor_init(&cursor_b, &list_b);
1327 test_dcursor_next(&cursor_b);
1328 test_dcursor_next(&cursor_b);
1329 test_dcursor_merge(&cursor_a, &cursor_b);
1331 TEST_CHECK(test_dcursor_current(&cursor_a) == &item1a);
1333 TEST_MSG(
"Got %s", test_dcursor_current(&cursor_a)->
name);
1335 TEST_CHECK(test_dcursor_next(&cursor_a) == &item3b);
1337 TEST_MSG(
"Got %s", test_dcursor_current(&cursor_a)->
name);
1338 TEST_CHECK(test_dcursor_next(&cursor_a) == &item2a);
1340 TEST_MSG(
"Got %s", test_dcursor_current(&cursor_a)->
name);
1341 TEST_CHECK(test_dcursor_next(&cursor_a) == &item3a);
1343 TEST_MSG(
"Got %s", test_dcursor_current(&cursor_a)->
name);
1346 TEST_CHECK(!test_dcursor_current(&cursor_b));
1354 test_item_t item1b = {
"item1b", { { NULL, NULL } } };
1355 test_item_t item2b = {
"item2b", { { NULL, NULL } } };
1356 test_item_t item3b = {
"item3b", { { NULL, NULL } } };
1362 test_list_insert_tail(&list_b, &item1b);
1363 test_list_insert_tail(&list_b, &item2b);
1364 test_list_insert_tail(&list_b, &item3b);
1366 test_dcursor_init(&cursor_a, &list_a);
1367 test_dcursor_init(&cursor_b, &list_b);
1368 test_dcursor_merge(&cursor_a, &cursor_b);
1371 TEST_CHECK(test_dcursor_next(&cursor_a) == &item2b);
1372 TEST_CHECK(test_dcursor_next(&cursor_a) == &item3b);
1374 TEST_CHECK(!test_dcursor_current(&cursor_b));
1375 TEST_CHECK(!test_dcursor_list_next_peek(&cursor_b));
1382 test_item_t item1a = {
"item1a", { { NULL, NULL } } };
1383 test_item_t item2a = {
"item2a", { { NULL, NULL } } };
1384 test_item_t item3a = {
"item3a", { { NULL, NULL } } };
1389 test_list_insert_tail(&list_a, &item1a);
1390 test_list_insert_tail(&list_a, &item2a);
1391 test_list_insert_tail(&list_a, &item3a);
1394 test_dcursor_init(&cursor_a, &list_a);
1395 test_dcursor_init(&cursor_b, &list_b);
1396 test_dcursor_merge(&cursor_a, &cursor_b);
1399 TEST_CHECK(test_dcursor_next(&cursor_a) == &item2a);
1400 TEST_CHECK(test_dcursor_next(&cursor_a) == &item3a);
1407 test_item_t item1 = {
"item1", { { NULL, NULL } } };
1408 test_item_t item2 = {
"item2", { { NULL, NULL } } };
1409 test_item_t item3 = {
"item3", { { NULL, NULL } } };
1414 test_list_insert_tail(&list, &item1);
1415 test_list_insert_tail(&list, &item2);
1416 test_list_insert_tail(&list, &item3);
1418 test_dcursor_init(&cursor_a, &list);
1422 TEST_CHECK(test_dcursor_next(&cursor_b) == &item2);
1423 TEST_CHECK(test_dcursor_next(&cursor_b) == &item3);
1438 test_dcursor_init(&cursor, &list);
1439 test_dcursor_append(&cursor, item1);
1440 test_dcursor_append(&cursor, item2);
1441 test_dcursor_append(&cursor, item3);
1444 test_dcursor_free_list(&cursor);
1446 TEST_CHECK(test_dcursor_current(&cursor) == NULL);
1463 test_dcursor_init(&cursor, &list);
1464 test_dcursor_append(&cursor, item1);
1465 test_dcursor_append(&cursor, item2);
1466 test_dcursor_append(&cursor, item3);
1471 TEST_CHECK(test_dcursor_current(&cursor) == item2);
1478 TEST_CHECK(test_dcursor_current(&cursor) == NULL);
1503 test_item_t item1 = {
"item1", { { NULL, NULL } } };
1504 test_item_t item2 = {
"item2", { { NULL, NULL } } };
1508 test_list_insert_tail(&list_a, &item1);
1510 test_list_insert_tail(&list_b, &item2);
1512 test_dcursor_init(&cursor_a, &list_a);
1513 test_dcursor_init(&cursor_b, &list_b);
1515 TEST_CHECK(test_dcursor_intersect_head(&cursor_a, &cursor_b) == NULL);
1522 test_item_t item1 = {
"item1", { { NULL, NULL } } };
1523 test_item_t item2 = {
"item2", { { NULL, NULL } } };
1524 test_item_t item3 = {
"item3", { { NULL, NULL } } };
1529 test_list_insert_tail(&list, &item1);
1530 test_list_insert_tail(&list, &item2);
1531 test_list_insert_tail(&list, &item3);
1533 test_dcursor_init(&cursor_a, &list);
1534 test_dcursor_init(&cursor_b, &list);
1536 item4 = test_dcursor_intersect_head(&cursor_a, &cursor_b);
1538 TEST_CHECK(test_dcursor_intersect_next(&cursor_a, &cursor_b) == &item2);
1539 TEST_CHECK(test_dcursor_intersect_next(&cursor_a, &cursor_b) == &item3);
1540 TEST_CHECK(test_dcursor_intersect_next(&cursor_a, &cursor_b) == NULL);
1547 test_item_t item1 = {
"actor", { { NULL, NULL } } };
1548 test_item_t item2 = {
"alter", { { NULL, NULL } } };
1549 test_item_t item3 = {
"extra", { { NULL, NULL } } };
1550 test_item_t item4 = {
"after", { { NULL, NULL } } };
1555 test_list_insert_tail(&list, &item1);
1556 test_list_insert_tail(&list, &item2);
1557 test_list_insert_tail(&list, &item3);
1558 test_list_insert_tail(&list, &item4);
1560 test_dcursor_iter_init(&cursor_a, &list,
iter_name_check, NULL, &filter_a);
1561 test_dcursor_init(&cursor_b, &list);
1563 TEST_CHECK(test_dcursor_intersect_head(&cursor_a, &cursor_b) == &item1);
1564 TEST_CHECK(test_dcursor_intersect_next(&cursor_a, &cursor_b) == &item2);
1565 TEST_CHECK(test_dcursor_intersect_next(&cursor_a, &cursor_b) == &item4);
1566 TEST_CHECK(test_dcursor_intersect_next(&cursor_a, &cursor_b) == NULL);
1573 test_item_t item1 = {
"blink", { { NULL, NULL } } };
1574 test_item_t item2 = {
"alter", { { NULL, NULL } } };
1575 test_item_t item3 = {
"basic", { { NULL, NULL } } };
1576 test_item_t item4 = {
"bland", { { NULL, NULL } } };
1581 test_list_insert_tail(&list, &item1);
1582 test_list_insert_tail(&list, &item2);
1583 test_list_insert_tail(&list, &item3);
1584 test_list_insert_tail(&list, &item4);
1586 test_dcursor_init(&cursor_a, &list);
1587 test_dcursor_iter_init(&cursor_b, &list,
iter_name_check, NULL, &filter_b);
1589 TEST_CHECK(test_dcursor_intersect_head(&cursor_a, &cursor_b) == &item1);
1590 TEST_CHECK(test_dcursor_intersect_next(&cursor_a, &cursor_b) == &item3);
1591 TEST_CHECK(test_dcursor_intersect_next(&cursor_a, &cursor_b) == &item4);
1598 test_item_t item1 = {
"baits", { { NULL, NULL } } };
1599 test_item_t item2 = {
"alter", { { NULL, NULL } } };
1600 test_item_t item3 = {
"basic", { { NULL, NULL } } };
1601 test_item_t item4 = {
"cavil", { { NULL, NULL } } };
1602 test_item_t item5 = {
"bland", { { NULL, NULL } } };
1608 test_list_insert_tail(&list, &item1);
1609 test_list_insert_tail(&list, &item2);
1610 test_list_insert_tail(&list, &item3);
1611 test_list_insert_tail(&list, &item4);
1612 test_list_insert_tail(&list, &item5);
1614 test_dcursor_iter_init(&cursor_a, &list,
iter_name_check, NULL, &filter_a);
1615 test_dcursor_iter_init(&cursor_b, &list,
iter_name_check, NULL, &filter_b);
1617 TEST_CHECK(test_dcursor_intersect_head(&cursor_a, &cursor_b) == &item1);
1618 TEST_CHECK(test_dcursor_intersect_next(&cursor_a, &cursor_b) == &item3);
1620 TEST_MSG(
"Current %s", test_dcursor_current(&cursor_a)->
name);
1621 TEST_CHECK(test_dcursor_intersect_next(&cursor_a, &cursor_b) == NULL);
1628 test_item_t item1 = {
"baits", { { NULL, NULL } } };
1629 test_item_t item2 = {
"alter", { { NULL, NULL } } };
1630 test_item_t item3 = {
"basic", { { NULL, NULL } } };
1631 test_item_t item4 = {
"cavil", { { NULL, NULL } } };
1632 test_item_t item5 = {
"bland", { { NULL, NULL } } };
1638 test_list_insert_tail(&list, &item1);
1639 test_list_insert_tail(&list, &item2);
1640 test_list_insert_tail(&list, &item3);
1641 test_list_insert_tail(&list, &item4);
1642 test_list_insert_tail(&list, &item5);
1644 test_dcursor_iter_init(&cursor_a, &list,
iter_name_check, NULL, &filter_a);
1645 test_dcursor_iter_init(&cursor_b, &list,
iter_name_check, NULL, &filter_b);
1647 TEST_CHECK(test_dcursor_intersect_head(&cursor_a, &cursor_b) == NULL);
1652 char const *s =
uctx;
1653 return strcmp(
item->name, s) == 0;
1660 test_item_t item1 = {
"yes", { { NULL, NULL } } };
1662 test_item_t item3 = {
"yes", { { NULL, NULL } } };
1664 test_item_t item5 = {
"yes", { { NULL, NULL } } };
1669 test_list_insert_tail(&list, &item1);
1670 test_list_insert_tail(&list, &item2);
1671 test_list_insert_tail(&list, &item3);
1672 test_list_insert_tail(&list, &item4);
1673 test_list_insert_tail(&list, &item5);
1674 test_list_insert_tail(&list, &item6);
1676 test_dcursor_init(&cursor, &list);
1688 test_item_t item1 = {
"yes", { { NULL, NULL } } };
1690 test_item_t item3 = {
"yes", { { NULL, NULL } } };
1692 test_item_t item5 = {
"yes", { { NULL, NULL } } };
1697 test_list_insert_tail(&list, &item1);
1698 test_list_insert_tail(&list, &item2);
1699 test_list_insert_tail(&list, &item3);
1700 test_list_insert_tail(&list, &item4);
1701 test_list_insert_tail(&list, &item5);
1702 test_list_insert_tail(&list, &item6);
1704 test_dcursor_init(&cursor, &list);
1707 test_dcursor_next(&cursor);
1709 test_dcursor_next(&cursor);
1711 test_dcursor_next(&cursor);
1719 test_item_t item1 = {
"yes", { { NULL, NULL } } };
1721 test_item_t item3 = {
"yes", { { NULL, NULL } } };
1723 test_item_t item5 = {
"yes", { { NULL, NULL } } };
1728 test_list_insert_tail(&list, &item1);
1729 test_list_insert_tail(&list, &item2);
1730 test_list_insert_tail(&list, &item3);
1731 test_list_insert_tail(&list, &item4);
1732 test_list_insert_tail(&list, &item5);
1733 test_list_insert_tail(&list, &item6);
1735 test_dcursor_init(&cursor, &list);
Functions to iterate over a sets and subsets of items in dlists.
#define FR_DCURSOR_DLIST_TYPES(_name, _list_name, _element_type)
Define type specific wrapper structs for dcursors.
#define FR_DCURSOR(_name)
Expands to the type name used for the dcursor wrapper structure.
fr_dcursor_eval_t void const * uctx
#define FR_DCURSOR_FUNCS(_name, _list_name, _element_type)
Define type specific wrapper functions for dcursors.
fr_dcursor_iter_t void * current
static void test_dcursor_free_item(void)
static void test_dcursor_copy(void)
static void test_dcursor_tail(void)
static void test_dcursor_head(void)
static void test_list_init(test_item_list_t *list)
static void test_dcursor_append_3i_end(void)
static void test_intersect_iterator_b(void)
static void test_dcursor_replace_3i_mid(void)
static void test_intersect_iterator_a(void)
static void test_dcursor_merge_empty(void)
static void test_dcursor_prepend_empty(void)
static void test_dcursor_free_by_list(void)
static void test_dcursor_merge_end_b(void)
static void test_dcursor_append_empty(void)
static void test_dcursor_replace_2i_start(void)
static void test_dcursor_head_tail_null(void)
static test_item_t * test_iter(FR_DLIST_HEAD(test_list) *list, test_item_t *current, UNUSED void *uctx)
static void test_dcursor_replace_1i_start(void)
static void test_dcursor_prepend_3i_end(void)
static void test_dcursor_remove_3i_mid(void)
static void test_dcursor_insert_2i_start(void)
static void test_dcursor_test_head(void)
static void test_init_2i_start(void)
static void test_dcursor_remove_3i_start(void)
static void test_dcursor_prepend_empty_3(void)
static void test_dcursor_merge_mid_a(void)
static void test_dcursor_wrap_after_tail(void)
static void test_dcursor_test_tail(void)
static test_item_t * iter_name_check(FR_DLIST_HEAD(test_list) *list, test_item_t *current, void *uctx)
static void test_dcursor_append_3i_mid(void)
static void test_filter_no_match(void)
static void test_dcursor_append_1i_start(void)
static void test_dcursor_copy_test(void)
static void test_dcursor_prepend_2i_start(void)
static void test_intersect_iterator_disjoint(void)
static void test_dcursor_iter_head_reset(void)
static void test_next(void)
static void test_dcursor_remove_2i(void)
static void test_dcursor_remove_empty(void)
static void test_intersect_no_iterators(void)
static void test_dcursor_replace_in_empty(void)
static void test_dcursor_insert_1i_start(void)
static void test_dcursor_head_after_next(void)
static void test_dcursor_merge_start_a_b(void)
static void test_dcursor_head_reset(void)
static void test_dcursor_merge_with_empty(void)
static void test_dcursor_append_2i_start(void)
static void test_dcursor_prepend_3i_mid(void)
static bool eval_eq(test_item_t const *item, void const *uctx)
static void test_next_wrap(void)
static void test_dcursor_merge_mid_b(void)
static void test_dcursor_replace_3i_end(void)
static void test_init_null_item(void)
static void test_dcursor_insert_into_empty_3(void)
static void test_intersect_differing_lists(void)
static void test_filter_head_next(void)
static void test_dcursor_head_after_tail(void)
static void test_dcursor_prepend_1i_start(void)
static void test_dcursor_append_empty_3(void)
static void test_dcursor_insert_into_empty(void)
static void test_dcursor_remove_1i(void)
static void test_filter_current(void)
static void test_intersect_iterator_ab(void)
static void test_dcursor_insert_3i_mid(void)
static void test_dcursor_insert_3i_end(void)
static void test_dcursor_free_by_item(void)
static void test_init_1i_start(void)
static void test_dcursor_merge_end_a(void)
static void test_dcursor_remove_3i_end(void)
#define FR_DLIST_TYPES(_name)
Define type specific wrapper structs for dlists.
#define FR_DLIST_ENTRY(_name)
Expands to the type name used for the entry wrapper structure.
#define FR_DLIST_FUNCS(_name, _element_type, _element_entry)
Define type specific wrapper functions for dlists.
typedef FR_DLIST_HEAD(map_list) map_list_t
Given these are used in so many places, it's more friendly to have a proper type.