diff options
author | Jarno Rajahalme <jrajahalme@nicira.com> | 2015-04-06 14:02:28 -0700 |
---|---|---|
committer | Jarno Rajahalme <jrajahalme@nicira.com> | 2015-04-06 14:02:28 -0700 |
commit | 5f03c98321092da7ff0246117098a7df197b2ce2 (patch) | |
tree | d9369df816d0776b79dff4a9eeed375f839776a7 /tests/test-list.c | |
parent | 660527a420c29bdbc0cddd51438980ee712ba591 (diff) | |
download | openvswitch-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.c | 26 |
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"); } |