summaryrefslogtreecommitdiff
path: root/test/lib
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2024-10-19 09:21:46 -0600
committerTom Rini <trini@konsulko.com>2024-11-03 21:27:12 -0600
commit5bd4ead8bd76c85aa599c44e8bfb12f512d8ed09 (patch)
tree4fb1a792341f6a5b3c636bf79071c64f2a669d6a /test/lib
parentd785a77d18acdf6714f4570c14e622caadf4d5e3 (diff)
alist: Add a function to empty the list
Sometimes it is useful to empty the list without de-allocating any of the memory used, e.g. when the list will be re-populated immediately afterwards. Add a new function for this. Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'test/lib')
-rw-r--r--test/lib/alist.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/test/lib/alist.c b/test/lib/alist.c
index 1715a22584c..87135bb3a51 100644
--- a/test/lib/alist.c
+++ b/test/lib/alist.c
@@ -358,6 +358,16 @@ static int lib_test_alist_for_each(struct unit_test_state *uts)
ptr = lst.data;
ut_asserteq_ptr(ptr + 3, alist_end(&lst, struct my_struct));
+ /* empty the list and try again */
+ alist_empty(&lst);
+ ut_asserteq_ptr(ptr, alist_end(&lst, struct my_struct));
+ ut_assertnull(alist_get(&lst, 0, struct my_struct));
+
+ sum = 0;
+ alist_for_each(ptr, &lst)
+ sum += ptr->val;
+ ut_asserteq(0, sum);
+
alist_uninit(&lst);
/* Check for memory leaks */
@@ -366,3 +376,35 @@ static int lib_test_alist_for_each(struct unit_test_state *uts)
return 0;
}
LIB_TEST(lib_test_alist_for_each, 0);
+
+/* Test alist_empty() */
+static int lib_test_alist_empty(struct unit_test_state *uts)
+{
+ struct my_struct data;
+ struct alist lst;
+ ulong start;
+
+ start = ut_check_free();
+
+ ut_assert(alist_init_struct(&lst, struct my_struct));
+ ut_asserteq(0, lst.count);
+ data.val = 1;
+ data.other_val = 0;
+ alist_add(&lst, data);
+ ut_asserteq(1, lst.count);
+ ut_asserteq(4, lst.alloc);
+
+ alist_empty(&lst);
+ ut_asserteq(0, lst.count);
+ ut_asserteq(4, lst.alloc);
+ ut_assertnonnull(lst.data);
+ ut_asserteq(sizeof(data), lst.obj_size);
+
+ alist_uninit(&lst);
+
+ /* Check for memory leaks */
+ ut_assertok(ut_check_delta(start));
+
+ return 0;
+}
+LIB_TEST(lib_test_alist_empty, 0);