}
}
+/* Tests the transplant of one list into another */
+static void
+test_list_push_back_all(void)
+{
+ struct ovs_list list_a, list_b;
+ struct element a, b, c, d;
+
+ a.value = 0;
+ b.value = 1;
+ c.value = 2;
+ d.value = 3;
+
+ ovs_list_init(&list_a);
+ ovs_list_init(&list_b);
+
+ ovs_list_insert(&list_a, &a.node);
+ ovs_list_insert(&list_a, &b.node);
+ ovs_list_insert(&list_b, &c.node);
+ ovs_list_insert(&list_b, &d.node);
+
+ /* Check test preconditions */
+ assert(2 == ovs_list_size(&list_a));
+ assert(2 == ovs_list_size(&list_b));
+
+ /* Perform transplant */
+ ovs_list_push_back_all(&list_a, &list_b);
+
+ /* Check expected result */
+ assert(4 == ovs_list_size(&list_a));
+ assert(0 == ovs_list_size(&list_b));
+
+ struct element *node;
+ int n = 0;
+ LIST_FOR_EACH(node, node, &list_a) {
+ assert(n == node->value);
+ n++;
+ }
+ assert(n == 4);
+}
+
static void
run_test(void (*function)(void))
{
run_test(test_list_construction);
run_test(test_list_for_each_safe);
run_test(test_list_for_each_pop);
+ run_test(test_list_push_back_all);
printf("\n");
}