summaryrefslogtreecommitdiff
path: root/tests/test-list.c
diff options
context:
space:
mode:
authorJarno Rajahalme <jrajahalme@nicira.com>2015-04-06 14:02:28 -0700
committerJarno Rajahalme <jrajahalme@nicira.com>2015-04-06 14:02:28 -0700
commit5f03c98321092da7ff0246117098a7df197b2ce2 (patch)
treed9369df816d0776b79dff4a9eeed375f839776a7 /tests/test-list.c
parent660527a420c29bdbc0cddd51438980ee712ba591 (diff)
downloadopenvswitch-5f03c98321092da7ff0246117098a7df197b2ce2.tar.gz
lib/list: Add LIST_FOR_EACH_POP.
Makes popping each member of the list a bit easier. Signed-off-by: Jarno Rajahalme <jrajahalme@nicira.com> Acked-by: Russell Bryant <rbryant@redhat.com> Acked-by: Ben Pfaff <blp@nicira.com>
Diffstat (limited to 'tests/test-list.c')
-rw-r--r--tests/test-list.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/tests/test-list.c b/tests/test-list.c
index 5fd7149c7..9b6b0bde9 100644
--- a/tests/test-list.c
+++ b/tests/test-list.c
@@ -159,6 +159,31 @@ test_list_for_each_safe(void)
}
}
+/* Tests that LIST_FOR_EACH_POP removes the elements of a list. */
+static void
+test_list_for_each_pop(void)
+{
+ enum { MAX_ELEMS = 10 };
+ size_t n;
+
+ for (n = 0; n <= MAX_ELEMS; n++) {
+ struct element elements[MAX_ELEMS];
+ int values[MAX_ELEMS];
+ struct ovs_list list;
+ struct element *e;
+ size_t n_remaining;
+
+ make_list(&list, elements, values, n);
+
+ n_remaining = n;
+ LIST_FOR_EACH_POP (e, node, &list) {
+ n_remaining--;
+ memmove(values, values + 1, sizeof *values * n_remaining);
+ check_list(&list, values, n_remaining);
+ }
+ }
+}
+
static void
run_test(void (*function)(void))
{
@@ -171,6 +196,7 @@ test_list_main(int argc OVS_UNUSED, char *argv[] OVS_UNUSED)
{
run_test(test_list_construction);
run_test(test_list_for_each_safe);
+ run_test(test_list_for_each_pop);
printf("\n");
}