From 7c4ef0d9ae28525f70c09ff77b71015408bc3e62 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Petr=20=C5=A0tetiar?= <ynezz@true.cz>
Date: Thu, 19 Dec 2019 11:49:39 +0100
Subject: [PATCH] tests: list: add test case for list_empty iterator
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit

Increasing unit testing code coverage.

Signed-off-by: Petr Å tetiar <ynezz@true.cz>
---
 tests/cram/test_list.t | 22 ++++++++++++++-----
 tests/test-list.c      | 50 ++++++++++++++++++++++++++++++++----------
 2 files changed, 54 insertions(+), 18 deletions(-)

diff --git a/tests/cram/test_list.t b/tests/cram/test_list.t
index 81affad..1417407 100644
--- a/tests/cram/test_list.t
+++ b/tests/cram/test_list.t
@@ -2,9 +2,9 @@ check that list is producing expected results:
 
   $ [ -n "$TEST_BIN_DIR" ] && export PATH="$TEST_BIN_DIR:$PATH"
   $ valgrind --quiet --leak-check=full test-list
-  test_basics: list_empty: yes
-  test_basics: list_add_tail: zero one two three four five six seven eight nine ten eleven twelve 
-  test_basics: list_empty: no
+  init_list: list_empty: yes
+  init_list: list_add_tail: zero one two three four five six seven eight nine ten eleven twelve 
+  init_list: list_empty: no
   test_basics: first=zero last=twelve
   test_basics: 'zero' is first, yes
   test_basics: 'twelve' is last, yes
@@ -20,11 +20,16 @@ check that list is producing expected results:
   test_basics: list_for_each_entry_reverse: one eleven ten nine eight seven six five four three two 
   test_basics: delete all entries
   test_basics: list_empty: yes
+  init_list: list_empty: yes
+  init_list: list_add_tail: zero one two three four five six seven eight nine ten eleven twelve 
+  init_list: list_empty: no
+  test_while_list_empty: delete all entries
+  test_while_list_empty: list_empty: yes
 
   $ test-list-san
-  test_basics: list_empty: yes
-  test_basics: list_add_tail: zero one two three four five six seven eight nine ten eleven twelve 
-  test_basics: list_empty: no
+  init_list: list_empty: yes
+  init_list: list_add_tail: zero one two three four five six seven eight nine ten eleven twelve 
+  init_list: list_empty: no
   test_basics: first=zero last=twelve
   test_basics: 'zero' is first, yes
   test_basics: 'twelve' is last, yes
@@ -40,3 +45,8 @@ check that list is producing expected results:
   test_basics: list_for_each_entry_reverse: one eleven ten nine eight seven six five four three two 
   test_basics: delete all entries
   test_basics: list_empty: yes
+  init_list: list_empty: yes
+  init_list: list_add_tail: zero one two three four five six seven eight nine ten eleven twelve 
+  init_list: list_empty: no
+  test_while_list_empty: delete all entries
+  test_while_list_empty: list_empty: yes
diff --git a/tests/test-list.c b/tests/test-list.c
index cb0f231..ea2f3cd 100644
--- a/tests/test-list.c
+++ b/tests/test-list.c
@@ -14,30 +14,34 @@ struct item {
 	fprintf(stdout, "%s: " fmt, __func__, ## __VA_ARGS__); \
 } while (0);
 
-static void test_basics()
+static void init_list(struct list_head *list)
 {
-	size_t i;
-	struct item *tmp;
-	struct item *item;
-	struct item *last;
-	struct item *first;
-	static struct list_head test_list = LIST_HEAD_INIT(test_list);
-
 	const char *vals[] = {
 		"zero", "one", "two", "three", "four", "five", "six",
 		"seven", "eight", "nine", "ten", "eleven", "twelve"
 	};
 
-	OUT("list_empty: %s\n", list_empty(&test_list) ? "yes" : "no");
+	OUT("list_empty: %s\n", list_empty(list) ? "yes" : "no");
 	OUT("list_add_tail: ");
-	for (i=0; i<ARRAY_SIZE(vals); i++) {
+	for (size_t i=0; i<ARRAY_SIZE(vals); i++) {
 		struct item *e = malloc(sizeof(struct item));
 		e->name = vals[i];
-		list_add_tail(&e->list, &test_list);
+		list_add_tail(&e->list, list);
 		fprintf(stdout, "%s ", vals[i]);
 	}
 	fprintf(stdout, "\n");
-	OUT("list_empty: %s\n", list_empty(&test_list) ? "yes" : "no");
+	OUT("list_empty: %s\n", list_empty(list) ? "yes" : "no");
+}
+
+static void test_basics()
+{
+	struct item *tmp;
+	struct item *item;
+	struct item *last;
+	struct item *first;
+	struct list_head test_list = LIST_HEAD_INIT(test_list);
+
+	init_list(&test_list);
 
 	first = list_first_entry(&test_list, struct item, list);
 	last = list_last_entry(&test_list, struct item, list);
@@ -50,8 +54,13 @@ static void test_basics()
 	list_del(&last->list);
 	free(first);
 	free(last);
+
 	first = list_first_entry(&test_list, struct item, list);
 	last = list_last_entry(&test_list, struct item, list);
+
+	if (!first || !last)
+		return;
+
 	OUT("first=%s last=%s\n", first->name, last->name);
 	OUT("'one' is first, %s\n", list_is_first(&first->list, &test_list) ? "yes" : "no");
 	OUT("'eleven' is last, %s\n", list_is_last(&last->list, &test_list) ? "yes" : "no");
@@ -84,8 +93,25 @@ static void test_basics()
 	OUT("list_empty: %s\n", list_empty(&test_list) ? "yes" : "no");
 }
 
+static void test_while_list_empty()
+{
+	struct item *first;
+	struct list_head test_list = LIST_HEAD_INIT(test_list);
+
+	init_list(&test_list);
+
+	OUT("delete all entries\n");
+	while (!list_empty(&test_list)) {
+		first = list_first_entry(&test_list, struct item, list);
+		list_del(&first->list);
+		free(first);
+	}
+	OUT("list_empty: %s\n", list_empty(&test_list) ? "yes" : "no");
+}
+
 int main()
 {
 	test_basics();
+	test_while_list_empty();
 	return 0;
 }
-- 
2.25.1