From b55432448e1f590387e02a8486e4fe515f8706c9 Mon Sep 17 00:00:00 2001 From: laentropia Date: Thu, 16 Apr 2026 20:56:48 -0600 Subject: [PATCH] test: added test for push_front --- src/arraylist.c | 4 +-- test/test_arraylist.c | 64 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+), 2 deletions(-) diff --git a/src/arraylist.c b/src/arraylist.c index 7b0f41f..a362266 100644 --- a/src/arraylist.c +++ b/src/arraylist.c @@ -162,9 +162,9 @@ ArrayListErr arraylist_push_front(ArrayList *arr, void *data) { // No problem if array is full because it grows if it's full memmove( - arr->buffer, arr->buffer + arr->elem_size, - (arr->len - 1) * arr->elem_size + arr->buffer, + (arr->len) * arr->elem_size ); memcpy( diff --git a/test/test_arraylist.c b/test/test_arraylist.c index 3e9851c..6b62391 100644 --- a/test/test_arraylist.c +++ b/test/test_arraylist.c @@ -254,6 +254,62 @@ static void test_push_back_null_data(void **state) { arraylist_destroy(&arr); } +static void test_push_front_single_element(void **state) { + (void) state; + + ArrayList *arr = arraylist_init(64, sizeof(int)); + assert_non_null(arr); + + int n = 8; + int m; + assert_uint_equal(arraylist_push_front(arr, &n), ARRLIST_OK); + assert_uint_equal(arraylist_size(arr), 1); + assert_uint_equal(arraylist_get(arr, 0, &m), ARRLIST_OK); + assert_uint_equal(m, 8); + + arraylist_destroy(&arr); +} + +static void test_push_front_multiple_elements(void **state) { + (void) state; + + ArrayList *arr = arraylist_init(64, sizeof(int)); + assert_non_null(arr); + + int n = 8; + int m; + + for (size_t i = 0; i < 10; i++) { + assert_uint_equal(arraylist_push_front(arr, &n), ARRLIST_OK); + assert_uint_equal(arraylist_size(arr), i + 1); + assert_uint_equal(arraylist_get(arr, 0, &m), ARRLIST_OK); + assert_uint_equal(m, n); + n++; + } + + arraylist_destroy(&arr); +} + +static void test_push_front_null_array(void **state) { + (void) state; + + ArrayList *arr = NULL; + + int n = 8; + assert_int_equal(arraylist_push_front(arr, &n), ARRLIST_NULL_ARG); +} + +static void test_push_front_null_data(void **state) { + (void) state; + + ArrayList *arr = arraylist_init(64, sizeof(int)); + assert_non_null(arr); + + assert_int_equal(arraylist_push_front(arr, NULL), ARRLIST_NULL_ARG); + + arraylist_destroy(&arr); +} + int main(void) { const struct CMUnitTest init[] = { cmocka_unit_test(test_init_valid_parameters), @@ -284,12 +340,20 @@ int main(void) { cmocka_unit_test(test_push_back_null_data), }; + const struct CMUnitTest push_front[] = { + cmocka_unit_test(test_push_front_single_element), + cmocka_unit_test(test_push_front_multiple_elements), + cmocka_unit_test(test_push_front_null_array), + cmocka_unit_test(test_push_front_null_data), + }; + int rc = 0; rc += cmocka_run_group_tests(init, NULL, NULL); rc += cmocka_run_group_tests(destroy, NULL, NULL); rc += cmocka_run_group_tests(state, NULL, NULL); rc += cmocka_run_group_tests(push_back, NULL, NULL); + rc += cmocka_run_group_tests(push_front, NULL, NULL); return rc; }