refactor: tests work, all fine
This commit is contained in:
@@ -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)
|
||||||
|
|
||||||
# ------------------------
|
# ------------------------
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -27,9 +27,11 @@ 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
Reference in New Issue
Block a user