From d940b68eef93aa8a4c6d99ad2d88f9e8ccf0ed1f Mon Sep 17 00:00:00 2001 From: laentropia Date: Thu, 23 Apr 2026 11:22:57 -0600 Subject: [PATCH] test: tests for arrayslice to aray done --- src/arraylist.c | 13 +++++++------ test/test_arraylist.c | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 6 deletions(-) diff --git a/src/arraylist.c b/src/arraylist.c index 9b1b804..bbbaa65 100644 --- a/src/arraylist.c +++ b/src/arraylist.c @@ -579,18 +579,17 @@ ArrayListErr arrayslice_advance(ArraySlice *slice, size_t n) { } ArrayList *arrayslice_to_arraylist(const ArraySlice *slice) { - if (slice == NULL) { + if (slice == NULL || slice->arr == NULL) { return NULL; } - if (slice->current >= slice->end) { + if (slice->start >= slice->end) { return NULL; } - ArrayList *new_arr = arraylist_init( - arraylist_capacity(slice->arr), - slice->arr->elem_size); + size_t len = slice->end - slice->start; + ArrayList *new_arr = arraylist_init(arraylist_capacity(slice->arr), slice->arr->elem_size); if (new_arr == NULL) { return NULL; } @@ -598,8 +597,10 @@ ArrayList *arrayslice_to_arraylist(const ArraySlice *slice) { memcpy( new_arr->buffer, slice->arr->buffer + (slice->start * slice->arr->elem_size), - slice->arr->elem_size * (slice->end - slice->current) + slice->arr->elem_size * len ); + new_arr->len = len; + return new_arr; } diff --git a/test/test_arraylist.c b/test/test_arraylist.c index 1aa942b..1362d41 100644 --- a/test/test_arraylist.c +++ b/test/test_arraylist.c @@ -1776,6 +1776,38 @@ static void test_slice_advance_null_array(void **state) { assert_uint_equal(arrayslice_advance(slice, 56), ARRLIST_NULL_ARG); } +//Slice to Array +static void test_slice_to_array_valid(void **state) { + (void) state; + + ArrayList *arr = arraylist_init(64, sizeof(int)); + assert_non_null(arr); + + for (int i = 0; i < 10; i++) { + assert_uint_equal(arraylist_push_back(arr, &i), ARRLIST_OK); + } + + ArraySlice *slice = arraylist_slice(arr, 0, arraylist_size(arr)); + assert_non_null(slice); + + ArrayList *arr2 = arrayslice_to_arraylist(slice); + assert_non_null(arr2); + assert_uint_equal(arraylist_capacity(arr2), 64); + assert_uint_equal(arraylist_size(arr2), 10); + + arraylist_destroy(&arr2); + arrayslice_destroy(&slice); + arraylist_destroy(&arr); +} + +static void test_slice_to_array_null_slice(void **state) { + (void) state; + + ArraySlice *slice = NULL; + + assert_null(arrayslice_to_arraylist(slice)); +} + int main(void) { const struct CMUnitTest init[] = { cmocka_unit_test(test_init_valid_parameters), @@ -1950,6 +1982,11 @@ int main(void) { cmocka_unit_test(test_slice_advance_size_max), }; + const struct CMUnitTest slice_to_array[] = { + cmocka_unit_test(test_slice_to_array_valid), + cmocka_unit_test(test_slice_to_array_null_slice), + }; + int rc = 0; rc += cmocka_run_group_tests(init, NULL, NULL); @@ -1974,6 +2011,7 @@ int main(void) { rc += cmocka_run_group_tests(slice_next, NULL, NULL); rc += cmocka_run_group_tests(slice_reset, NULL, NULL); rc += cmocka_run_group_tests(slice_advance, NULL, NULL); + rc += cmocka_run_group_tests(slice_to_array, NULL, NULL); return rc; }