From 7f89eb3cfff465cf32d03a2ae6919252eae67e9b Mon Sep 17 00:00:00 2001
From: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Date: Thu, 21 Sep 2023 15:53:14 +0200
Subject: libutil: add a string list helper to replace some of the adhoc ones

Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
---
 lib/util/test/strlist.c | 110 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 110 insertions(+)
 create mode 100644 lib/util/test/strlist.c

(limited to 'lib/util/test')

diff --git a/lib/util/test/strlist.c b/lib/util/test/strlist.c
new file mode 100644
index 0000000..23587b3
--- /dev/null
+++ b/lib/util/test/strlist.c
@@ -0,0 +1,110 @@
+/* SPDX-License-Identifier: GPL-3.0-or-later */
+/*
+ * strlist.c
+ *
+ * Copyright (C) 2023 David Oberhollenzer <goliath@infraroot.at>
+ */
+#include "config.h"
+#include "util/util.h"
+#include "util/test.h"
+#include "util/strlist.h"
+
+int main(int argc, char **argv)
+{
+	const char *str0, *str1, *str2;
+	strlist_t a, b;
+	int ret;
+	(void)argc; (void)argv;
+
+	str0 = "foo";
+	str1 = "bar";
+	str2 = "baz";
+
+	/* init */
+	strlist_init(&a);
+	TEST_NULL(a.strings);
+	TEST_EQUAL_UI(a.count, 0);
+	TEST_EQUAL_UI(a.capacity, 0);
+
+	/* append a string */
+	ret = strlist_append(&a, str0);
+	TEST_EQUAL_I(ret, 0);
+
+	TEST_EQUAL_UI(a.count, 1);
+	TEST_ASSERT(a.capacity >= a.count);
+
+	TEST_NOT_NULL(a.strings);
+	TEST_NOT_NULL(a.strings[0]);
+
+	TEST_STR_EQUAL(a.strings[0], str0);
+	TEST_ASSERT(a.strings[0] != str0);
+
+	/* append another */
+	ret = strlist_append(&a, str1);
+	TEST_EQUAL_I(ret, 0);
+
+	TEST_EQUAL_UI(a.count, 2);
+	TEST_ASSERT(a.capacity >= a.count);
+
+	TEST_NOT_NULL(a.strings);
+	TEST_NOT_NULL(a.strings[0]);
+	TEST_NOT_NULL(a.strings[1]);
+
+	TEST_ASSERT(a.strings[0] != str0);
+	TEST_ASSERT(a.strings[1] != str1);
+	TEST_STR_EQUAL(a.strings[0], str0);
+	TEST_STR_EQUAL(a.strings[1], str1);
+
+	/* and one more */
+	ret = strlist_append(&a, str2);
+	TEST_EQUAL_I(ret, 0);
+
+	TEST_EQUAL_UI(a.count, 3);
+	TEST_ASSERT(a.capacity >= a.count);
+
+	TEST_NOT_NULL(a.strings);
+	TEST_NOT_NULL(a.strings[0]);
+	TEST_NOT_NULL(a.strings[1]);
+	TEST_NOT_NULL(a.strings[2]);
+
+	TEST_ASSERT(a.strings[0] != str0);
+	TEST_ASSERT(a.strings[1] != str1);
+	TEST_ASSERT(a.strings[2] != str2);
+	TEST_STR_EQUAL(a.strings[0], str0);
+	TEST_STR_EQUAL(a.strings[1], str1);
+	TEST_STR_EQUAL(a.strings[2], str2);
+
+	/* copy */
+	strlist_init_copy(&b, &a);
+	TEST_NOT_NULL(b.strings);
+	TEST_EQUAL_UI(b.count, a.count);
+	TEST_EQUAL_UI(b.capacity, a.capacity);
+
+	TEST_ASSERT(b.strings != a.strings);
+
+	TEST_NOT_NULL(b.strings[0]);
+	TEST_NOT_NULL(b.strings[1]);
+	TEST_NOT_NULL(b.strings[2]);
+
+	TEST_ASSERT(b.strings[0] != a.strings[0]);
+	TEST_ASSERT(b.strings[1] != a.strings[1]);
+	TEST_ASSERT(b.strings[2] != a.strings[2]);
+
+	TEST_STR_EQUAL(b.strings[0], str0);
+	TEST_STR_EQUAL(b.strings[1], str1);
+	TEST_STR_EQUAL(b.strings[2], str2);
+
+	/* cleanup */
+	strlist_cleanup(&a);
+	strlist_cleanup(&b);
+
+	TEST_NULL(a.strings);
+	TEST_NULL(b.strings);
+
+	TEST_EQUAL_UI(a.count, 0);
+	TEST_EQUAL_UI(b.count, 0);
+
+	TEST_EQUAL_UI(a.capacity, 0);
+	TEST_EQUAL_UI(b.capacity, 0);
+	return EXIT_SUCCESS;
+}
-- 
cgit v1.2.3