From 0cdb81c92993b8b1e41aee9df2170f5dc35e86b8 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Sat, 3 Apr 2021 18:25:56 +0200 Subject: [PATCH] *-list tests: Add more tests. * tests/test-array_list.c (check_equals_by_forward_iteration, check_equals_by_backward_iteration): New functions. (main): Invoke them. * tests/test-carray_list.c: Likewise. * tests/test-linked_list.c: Likewise. * tests/test-linkedhash_list.c: Likewise. * tests/test-avltree_list.c: Likewise. * tests/test-avltreehash_list.c: Likewise. * tests/test-rbtree_list.c: Likewise. * tests/test-rbtreehash_list.c: Likewise. --- ChangeLog | 12 +++++++++++ tests/test-array_list.c | 39 +++++++++++++++++++++++++++++++++++ tests/test-avltree_list.c | 33 +++++++++++++++++++++++++++++ tests/test-avltreehash_list.c | 33 +++++++++++++++++++++++++++++ tests/test-carray_list.c | 33 +++++++++++++++++++++++++++++ tests/test-linked_list.c | 33 +++++++++++++++++++++++++++++ tests/test-linkedhash_list.c | 33 +++++++++++++++++++++++++++++ tests/test-rbtree_list.c | 33 +++++++++++++++++++++++++++++ tests/test-rbtreehash_list.c | 33 +++++++++++++++++++++++++++++ 9 files changed, 282 insertions(+) diff --git a/ChangeLog b/ChangeLog index 80cce4f17f..956f6dd57a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,17 @@ 2021-04-03 Bruno Haible + *-list tests: Add more tests. + * tests/test-array_list.c (check_equals_by_forward_iteration, + check_equals_by_backward_iteration): New functions. + (main): Invoke them. + * tests/test-carray_list.c: Likewise. + * tests/test-linked_list.c: Likewise. + * tests/test-linkedhash_list.c: Likewise. + * tests/test-avltree_list.c: Likewise. + * tests/test-avltreehash_list.c: Likewise. + * tests/test-rbtree_list.c: Likewise. + * tests/test-rbtreehash_list.c: Likewise. + list: Add operations first_node, last_node. Reported by Marc Nieper-Wißkirchen in . diff --git a/tests/test-array_list.c b/tests/test-array_list.c index 1c736ee6cb..fa606914b8 100644 --- a/tests/test-array_list.c +++ b/tests/test-array_list.c @@ -44,6 +44,42 @@ check_equals (gl_list_t list1, gl_list_t list2) } } +static void +check_equals_by_forward_iteration (gl_list_t list1, gl_list_t list2) +{ + size_t n = gl_list_size (list1); + size_t i; + gl_list_node_t node2; + + i = 0; + node2 = gl_list_first_node (list2); + while (i < n && node2 != NULL) + { + ASSERT (gl_list_get_at (list1, i) == gl_list_node_value (list2, node2)); + i++; + node2 = gl_list_next_node (list2, node2); + } + ASSERT ((i == n) == (node2 == NULL)); +} + +static void +check_equals_by_backward_iteration (gl_list_t list1, gl_list_t list2) +{ + size_t n = gl_list_size (list1); + size_t i; + gl_list_node_t node2; + + i = n - 1; + node2 = gl_list_last_node (list2); + while (i != (size_t)(-1) && node2 != NULL) + { + ASSERT (gl_list_get_at (list1, i) == gl_list_node_value (list2, node2)); + i--; + node2 = gl_list_previous_node (list2, node2); + } + ASSERT ((i == (size_t)(-1)) == (node2 == NULL)); +} + int main (int argc, char *argv[]) { @@ -75,6 +111,9 @@ main (int argc, char *argv[]) check_equals (list1, list2); + check_equals_by_forward_iteration (list1, list2); + check_equals_by_backward_iteration (list1, list2); + for (repeat = 0; repeat < 10000; repeat++) { unsigned int operation = RANDOM (18); diff --git a/tests/test-avltree_list.c b/tests/test-avltree_list.c index c4c0f021cb..b4938c489d 100644 --- a/tests/test-avltree_list.c +++ b/tests/test-avltree_list.c @@ -47,6 +47,36 @@ check_equals (gl_list_t list1, gl_list_t list2) } } +static void +check_equals_by_forward_iteration (gl_list_t list1, gl_list_t list2) +{ + gl_list_node_t node1 = gl_list_first_node (list1); + gl_list_node_t node2 = gl_list_first_node (list2); + while (node1 != NULL && node2 != NULL) + { + ASSERT (gl_list_node_value (list1, node1) + == gl_list_node_value (list2, node2)); + node1 = gl_list_next_node (list1, node1); + node2 = gl_list_next_node (list2, node2); + } + ASSERT ((node1 == NULL) == (node2 == NULL)); +} + +static void +check_equals_by_backward_iteration (gl_list_t list1, gl_list_t list2) +{ + gl_list_node_t node1 = gl_list_last_node (list1); + gl_list_node_t node2 = gl_list_last_node (list2); + while (node1 != NULL && node2 != NULL) + { + ASSERT (gl_list_node_value (list1, node1) + == gl_list_node_value (list2, node2)); + node1 = gl_list_previous_node (list1, node1); + node2 = gl_list_previous_node (list2, node2); + } + ASSERT ((node1 == NULL) == (node2 == NULL)); +} + static void check_all (gl_list_t list1, gl_list_t list2, gl_list_t list3) { @@ -92,6 +122,9 @@ main (int argc, char *argv[]) check_all (list1, list2, list3); + check_equals_by_forward_iteration (list1, list2); + check_equals_by_backward_iteration (list1, list2); + for (repeat = 0; repeat < 10000; repeat++) { unsigned int operation = RANDOM (18); diff --git a/tests/test-avltreehash_list.c b/tests/test-avltreehash_list.c index a77ee86294..040efd39c5 100644 --- a/tests/test-avltreehash_list.c +++ b/tests/test-avltreehash_list.c @@ -74,6 +74,36 @@ check_equals (gl_list_t list1, gl_list_t list2) } } +static void +check_equals_by_forward_iteration (gl_list_t list1, gl_list_t list2) +{ + gl_list_node_t node1 = gl_list_first_node (list1); + gl_list_node_t node2 = gl_list_first_node (list2); + while (node1 != NULL && node2 != NULL) + { + ASSERT (gl_list_node_value (list1, node1) + == gl_list_node_value (list2, node2)); + node1 = gl_list_next_node (list1, node1); + node2 = gl_list_next_node (list2, node2); + } + ASSERT ((node1 == NULL) == (node2 == NULL)); +} + +static void +check_equals_by_backward_iteration (gl_list_t list1, gl_list_t list2) +{ + gl_list_node_t node1 = gl_list_last_node (list1); + gl_list_node_t node2 = gl_list_last_node (list2); + while (node1 != NULL && node2 != NULL) + { + ASSERT (gl_list_node_value (list1, node1) + == gl_list_node_value (list2, node2)); + node1 = gl_list_previous_node (list1, node1); + node2 = gl_list_previous_node (list2, node2); + } + ASSERT ((node1 == NULL) == (node2 == NULL)); +} + static void check_all (gl_list_t list1, gl_list_t list2, gl_list_t list3) { @@ -122,6 +152,9 @@ main (int argc, char *argv[]) check_all (list1, list2, list3); + check_equals_by_forward_iteration (list1, list2); + check_equals_by_backward_iteration (list1, list2); + for (repeat = 0; repeat < 10000; repeat++) { unsigned int operation = RANDOM (18); diff --git a/tests/test-carray_list.c b/tests/test-carray_list.c index 53ab6f58bc..4077571735 100644 --- a/tests/test-carray_list.c +++ b/tests/test-carray_list.c @@ -45,6 +45,36 @@ check_equals (gl_list_t list1, gl_list_t list2) } } +static void +check_equals_by_forward_iteration (gl_list_t list1, gl_list_t list2) +{ + gl_list_node_t node1 = gl_list_first_node (list1); + gl_list_node_t node2 = gl_list_first_node (list2); + while (node1 != NULL && node2 != NULL) + { + ASSERT (gl_list_node_value (list1, node1) + == gl_list_node_value (list2, node2)); + node1 = gl_list_next_node (list1, node1); + node2 = gl_list_next_node (list2, node2); + } + ASSERT ((node1 == NULL) == (node2 == NULL)); +} + +static void +check_equals_by_backward_iteration (gl_list_t list1, gl_list_t list2) +{ + gl_list_node_t node1 = gl_list_last_node (list1); + gl_list_node_t node2 = gl_list_last_node (list2); + while (node1 != NULL && node2 != NULL) + { + ASSERT (gl_list_node_value (list1, node1) + == gl_list_node_value (list2, node2)); + node1 = gl_list_previous_node (list1, node1); + node2 = gl_list_previous_node (list2, node2); + } + ASSERT ((node1 == NULL) == (node2 == NULL)); +} + static void check_all (gl_list_t list1, gl_list_t list2, gl_list_t list3) { @@ -88,6 +118,9 @@ main (int argc, char *argv[]) check_all (list1, list2, list3); + check_equals_by_forward_iteration (list1, list2); + check_equals_by_backward_iteration (list1, list2); + for (repeat = 0; repeat < 10000; repeat++) { unsigned int operation = RANDOM (18); diff --git a/tests/test-linked_list.c b/tests/test-linked_list.c index 4f3ec5d2de..fff7e061de 100644 --- a/tests/test-linked_list.c +++ b/tests/test-linked_list.c @@ -45,6 +45,36 @@ check_equals (gl_list_t list1, gl_list_t list2) } } +static void +check_equals_by_forward_iteration (gl_list_t list1, gl_list_t list2) +{ + gl_list_node_t node1 = gl_list_first_node (list1); + gl_list_node_t node2 = gl_list_first_node (list2); + while (node1 != NULL && node2 != NULL) + { + ASSERT (gl_list_node_value (list1, node1) + == gl_list_node_value (list2, node2)); + node1 = gl_list_next_node (list1, node1); + node2 = gl_list_next_node (list2, node2); + } + ASSERT ((node1 == NULL) == (node2 == NULL)); +} + +static void +check_equals_by_backward_iteration (gl_list_t list1, gl_list_t list2) +{ + gl_list_node_t node1 = gl_list_last_node (list1); + gl_list_node_t node2 = gl_list_last_node (list2); + while (node1 != NULL && node2 != NULL) + { + ASSERT (gl_list_node_value (list1, node1) + == gl_list_node_value (list2, node2)); + node1 = gl_list_previous_node (list1, node1); + node2 = gl_list_previous_node (list2, node2); + } + ASSERT ((node1 == NULL) == (node2 == NULL)); +} + static void check_all (gl_list_t list1, gl_list_t list2, gl_list_t list3) { @@ -88,6 +118,9 @@ main (int argc, char *argv[]) check_all (list1, list2, list3); + check_equals_by_forward_iteration (list1, list2); + check_equals_by_backward_iteration (list1, list2); + for (repeat = 0; repeat < 10000; repeat++) { unsigned int operation = RANDOM (18); diff --git a/tests/test-linkedhash_list.c b/tests/test-linkedhash_list.c index b61feda3cf..fc2a8a05ab 100644 --- a/tests/test-linkedhash_list.c +++ b/tests/test-linkedhash_list.c @@ -72,6 +72,36 @@ check_equals (gl_list_t list1, gl_list_t list2) } } +static void +check_equals_by_forward_iteration (gl_list_t list1, gl_list_t list2) +{ + gl_list_node_t node1 = gl_list_first_node (list1); + gl_list_node_t node2 = gl_list_first_node (list2); + while (node1 != NULL && node2 != NULL) + { + ASSERT (gl_list_node_value (list1, node1) + == gl_list_node_value (list2, node2)); + node1 = gl_list_next_node (list1, node1); + node2 = gl_list_next_node (list2, node2); + } + ASSERT ((node1 == NULL) == (node2 == NULL)); +} + +static void +check_equals_by_backward_iteration (gl_list_t list1, gl_list_t list2) +{ + gl_list_node_t node1 = gl_list_last_node (list1); + gl_list_node_t node2 = gl_list_last_node (list2); + while (node1 != NULL && node2 != NULL) + { + ASSERT (gl_list_node_value (list1, node1) + == gl_list_node_value (list2, node2)); + node1 = gl_list_previous_node (list1, node1); + node2 = gl_list_previous_node (list2, node2); + } + ASSERT ((node1 == NULL) == (node2 == NULL)); +} + static void check_all (gl_list_t list1, gl_list_t list2, gl_list_t list3) { @@ -118,6 +148,9 @@ main (int argc, char *argv[]) check_all (list1, list2, list3); + check_equals_by_forward_iteration (list1, list2); + check_equals_by_backward_iteration (list1, list2); + for (repeat = 0; repeat < 10000; repeat++) { unsigned int operation = RANDOM (18); diff --git a/tests/test-rbtree_list.c b/tests/test-rbtree_list.c index 9c403f779b..d3ea65682e 100644 --- a/tests/test-rbtree_list.c +++ b/tests/test-rbtree_list.c @@ -47,6 +47,36 @@ check_equals (gl_list_t list1, gl_list_t list2) } } +static void +check_equals_by_forward_iteration (gl_list_t list1, gl_list_t list2) +{ + gl_list_node_t node1 = gl_list_first_node (list1); + gl_list_node_t node2 = gl_list_first_node (list2); + while (node1 != NULL && node2 != NULL) + { + ASSERT (gl_list_node_value (list1, node1) + == gl_list_node_value (list2, node2)); + node1 = gl_list_next_node (list1, node1); + node2 = gl_list_next_node (list2, node2); + } + ASSERT ((node1 == NULL) == (node2 == NULL)); +} + +static void +check_equals_by_backward_iteration (gl_list_t list1, gl_list_t list2) +{ + gl_list_node_t node1 = gl_list_last_node (list1); + gl_list_node_t node2 = gl_list_last_node (list2); + while (node1 != NULL && node2 != NULL) + { + ASSERT (gl_list_node_value (list1, node1) + == gl_list_node_value (list2, node2)); + node1 = gl_list_previous_node (list1, node1); + node2 = gl_list_previous_node (list2, node2); + } + ASSERT ((node1 == NULL) == (node2 == NULL)); +} + static void check_all (gl_list_t list1, gl_list_t list2, gl_list_t list3) { @@ -92,6 +122,9 @@ main (int argc, char *argv[]) check_all (list1, list2, list3); + check_equals_by_forward_iteration (list1, list2); + check_equals_by_backward_iteration (list1, list2); + for (repeat = 0; repeat < 10000; repeat++) { unsigned int operation = RANDOM (18); diff --git a/tests/test-rbtreehash_list.c b/tests/test-rbtreehash_list.c index 41ef5c4df3..89fc3eb5b9 100644 --- a/tests/test-rbtreehash_list.c +++ b/tests/test-rbtreehash_list.c @@ -74,6 +74,36 @@ check_equals (gl_list_t list1, gl_list_t list2) } } +static void +check_equals_by_forward_iteration (gl_list_t list1, gl_list_t list2) +{ + gl_list_node_t node1 = gl_list_first_node (list1); + gl_list_node_t node2 = gl_list_first_node (list2); + while (node1 != NULL && node2 != NULL) + { + ASSERT (gl_list_node_value (list1, node1) + == gl_list_node_value (list2, node2)); + node1 = gl_list_next_node (list1, node1); + node2 = gl_list_next_node (list2, node2); + } + ASSERT ((node1 == NULL) == (node2 == NULL)); +} + +static void +check_equals_by_backward_iteration (gl_list_t list1, gl_list_t list2) +{ + gl_list_node_t node1 = gl_list_last_node (list1); + gl_list_node_t node2 = gl_list_last_node (list2); + while (node1 != NULL && node2 != NULL) + { + ASSERT (gl_list_node_value (list1, node1) + == gl_list_node_value (list2, node2)); + node1 = gl_list_previous_node (list1, node1); + node2 = gl_list_previous_node (list2, node2); + } + ASSERT ((node1 == NULL) == (node2 == NULL)); +} + static void check_all (gl_list_t list1, gl_list_t list2, gl_list_t list3) { @@ -122,6 +152,9 @@ main (int argc, char *argv[]) check_all (list1, list2, list3); + check_equals_by_forward_iteration (list1, list2); + check_equals_by_backward_iteration (list1, list2); + for (repeat = 0; repeat < 10000; repeat++) { unsigned int operation = RANDOM (18); -- 2.39.5