refactor: tests work, all fine

This commit is contained in:
2026-05-14 08:20:56 -06:00
parent 0a0350c1c1
commit e0c8b46bfa
4 changed files with 184 additions and 180 deletions

View File

@@ -8,7 +8,7 @@ set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON) set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# Opciones # Opciones
option(ARRAYLIST_BUILD_TESTS "Build arraylist tests" OFF) option(ARRAYLIST_BUILD_TESTS "Build arraylist tests" ON)
option(ARRAYLIST_ENABLE_SANITIZERS "Enable sanitizers for tests" ON) option(ARRAYLIST_ENABLE_SANITIZERS "Enable sanitizers for tests" ON)
# ------------------------ # ------------------------

View File

@@ -22,6 +22,7 @@ typedef enum {
ARRLIST_INVALID_SLICE, ARRLIST_INVALID_SLICE,
ARRLIST_INVALID_ARR, ARRLIST_INVALID_ARR,
ARRLIST_INVALID_START, ARRLIST_INVALID_START,
ARRLIST_BORROW_UNDERFLOW,
} ArrayListErr; } ArrayListErr;
ArrayListErr arraylist_init(ArrayList **arr, size_t capacity, size_t elem_size); ArrayListErr arraylist_init(ArrayList **arr, size_t capacity, size_t elem_size);

View File

@@ -27,10 +27,12 @@ static ArrayListErr arraylist_grow(ArrayList *arr);
static ArrayListErr arraylist_shrink(ArrayList *arr); static ArrayListErr arraylist_shrink(ArrayList *arr);
ArrayListErr arraylist_init(ArrayList **arr, size_t capacity, size_t elem_size) { ArrayListErr arraylist_init(ArrayList **arr, size_t capacity, size_t elem_size) {
if (arr == NULL || *arr == NULL) { if (arr == NULL) {
return ARRLIST_NULL_ARG; return ARRLIST_NULL_ARG;
} }
*arr = NULL;
if (capacity == 0) { if (capacity == 0) {
return ARRLIST_INVALID_CAPACITY; return ARRLIST_INVALID_CAPACITY;
} }
@@ -44,7 +46,7 @@ ArrayListErr arraylist_init(ArrayList **arr, size_t capacity, size_t elem_size)
} }
ArrayList *new_arr = malloc(sizeof(ArrayList)); ArrayList *new_arr = malloc(sizeof(ArrayList));
if (arr == NULL) { if (new_arr == NULL) {
return ARRLIST_BAD_ALLOC; return ARRLIST_BAD_ALLOC;
} }
@@ -54,8 +56,8 @@ ArrayListErr arraylist_init(ArrayList **arr, size_t capacity, size_t elem_size)
new_arr->borrows = 0; new_arr->borrows = 0;
new_arr->buffer = malloc(capacity * elem_size); new_arr->buffer = malloc(capacity * elem_size);
if (new_arr->buffer == NULL) { if (new_arr->buffer == NULL) {
free(arr); free(new_arr);
return NULL; return ARRLIST_BAD_ALLOC;
} }
*arr = new_arr; *arr = new_arr;
@@ -435,19 +437,19 @@ ArrayListErr arraylist_reserve(ArrayList *arr, size_t size_to_reserve) {
} }
ArrayListErr arraylist_slice(ArraySlice **slice, ArrayList *arr, size_t start, size_t len) { ArrayListErr arraylist_slice(ArraySlice **slice, ArrayList *arr, size_t start, size_t len) {
if (arr == NULL) { if (arr == NULL || slice == NULL) {
return ARRLIST_NULL_ARG; return ARRLIST_NULL_ARG;
} }
if (arr->len == 0 || len == 0) { if (arr->len == 0) {
return ARRLIST_INVALID_ARR; return ARRLIST_INVALID_ARR;
} }
if (start > SIZE_MAX / arr->elem_size || len > SIZE_MAX / arr->elem_size) { if (start > SIZE_MAX - len) {
return ARRLIST_INVALID_CAPACITY; return ARRLIST_INVALID_CAPACITY;
} }
if (start + len > arr->len) { if (start + len > arr->len || len == 0) {
return ARRLIST_INVALID_START; return ARRLIST_INVALID_START;
} }
@@ -460,26 +462,27 @@ ArrayListErr arraylist_slice(ArraySlice **slice, ArrayList *arr, size_t start, s
new_slice->start = start; new_slice->start = start;
new_slice->end = start + len; new_slice->end = start + len;
new_slice->current = start; new_slice->current = start;
new_slice->is_safe = false; new_slice->is_safe = true;
arr->borrows++;
*slice = new_slice; *slice = new_slice;
return ARRLIST_OK; return ARRLIST_OK;
} }
ArrayListErr arraylist_slice_unsafe(ArraySlice **slice, ArrayList *arr, size_t start, size_t len) { ArrayListErr arraylist_slice_unsafe(ArraySlice **slice, ArrayList *arr, size_t start, size_t len) {
if (arr == NULL) { if (arr == NULL || slice == NULL) {
return ARRLIST_NULL_ARG; return ARRLIST_NULL_ARG;
} }
if (arr->len == 0 || len == 0) { if (arr->len == 0) {
return ARRLIST_INVALID_ARR; return ARRLIST_INVALID_ARR;
} }
if (start > SIZE_MAX / arr->elem_size || len > SIZE_MAX / arr->elem_size) { if (start > SIZE_MAX - len) {
return ARRLIST_INVALID_CAPACITY; return ARRLIST_INVALID_CAPACITY;
} }
if (start + len > arr->len) { if (start + len > arr->len || len == 0) {
return ARRLIST_INVALID_START; return ARRLIST_INVALID_START;
} }
@@ -589,7 +592,7 @@ ArrayListErr arrayslice_to_arraylist(ArrayList **arr, const ArraySlice *slice) {
return ARRLIST_NULL_ARG; return ARRLIST_NULL_ARG;
} }
if (arr == NULL || *arr == NULL) { if (arr == NULL) {
return ARRLIST_NULL_ARG; return ARRLIST_NULL_ARG;
} }

File diff suppressed because it is too large Load Diff