test: Added tests made for state consistency

Also changed a few things like usin asser_null and assert_non_null
--didn't knew they existed in cmocka, or at least forgot-- for better
clarity and readability.
This commit is contained in:
2026-04-16 08:42:01 -06:00
parent 7662af09f8
commit 1e7e6f7b8d
2 changed files with 117 additions and 11 deletions

View File

@@ -89,7 +89,7 @@ bool arraylist_is_empty(const ArrayList *arr) {
if (arr == NULL) { if (arr == NULL) {
return true; return true;
} }
return arr->capacity == 0; return arr->len == 0;
} }
static ArrayListErr arraylist_grow(ArrayList *arr) { static ArrayListErr arraylist_grow(ArrayList *arr) {

View File

@@ -9,11 +9,13 @@
#include "arraylist.h" #include "arraylist.h"
// INIT
static void test_init_valid_parameters(void **state) { static void test_init_valid_parameters(void **state) {
(void) state; (void) state;
ArrayList *arr = arraylist_init(64, sizeof(int)); ArrayList *arr = arraylist_init(64, sizeof(int));
assert_ptr_not_equal(arr, NULL); assert_non_null(arr);
arraylist_destroy(&arr); arraylist_destroy(&arr);
} }
@@ -21,7 +23,7 @@ static void test_init_zero_capacity(void **state) {
(void) state; (void) state;
ArrayList *arr = arraylist_init(0, sizeof(int)); ArrayList *arr = arraylist_init(0, sizeof(int));
assert_ptr_equal(arr, NULL); assert_null(arr);
arraylist_destroy(&arr); arraylist_destroy(&arr);
} }
@@ -29,7 +31,7 @@ static void test_init_zero_elem_size(void **state) {
(void) state; (void) state;
ArrayList *arr = arraylist_init(64, 0); ArrayList *arr = arraylist_init(64, 0);
assert_ptr_equal(arr, NULL); assert_null(arr);
arraylist_destroy(&arr); arraylist_destroy(&arr);
} }
@@ -37,18 +39,20 @@ static void test_init_large_capacity(void **state) {
(void) state; (void) state;
ArrayList *arr = arraylist_init(SIZE_MAX, sizeof(int)); ArrayList *arr = arraylist_init(SIZE_MAX, sizeof(int));
assert_ptr_equal(arr, NULL); assert_null(arr);
arraylist_destroy(&arr); arraylist_destroy(&arr);
} }
// DESTROY
static void test_destroy_valid_array(void **state) { static void test_destroy_valid_array(void **state) {
(void) state; (void) state;
ArrayList *arr = arraylist_init(64, sizeof(int)); ArrayList *arr = arraylist_init(64, sizeof(int));
assert_ptr_not_equal(arr, NULL); assert_non_null(arr);
arraylist_destroy(&arr); arraylist_destroy(&arr);
assert_ptr_equal(arr, NULL); assert_null(arr);
} }
static void test_destroy_null_array(void **state) { static void test_destroy_null_array(void **state) {
@@ -57,7 +61,7 @@ static void test_destroy_null_array(void **state) {
ArrayList *arr = NULL; ArrayList *arr = NULL;
ArrayListErr err = arraylist_destroy(&arr); ArrayListErr err = arraylist_destroy(&arr);
assert_ptr_equal(arr, NULL); assert_null(arr);
assert_int_equal(err, ARRLIST_NULL_ARG); assert_int_equal(err, ARRLIST_NULL_ARG);
} }
@@ -65,15 +69,107 @@ static void test_destroy_double(void **state) {
(void) state; (void) state;
ArrayList *arr = arraylist_init(64, sizeof(int)); ArrayList *arr = arraylist_init(64, sizeof(int));
assert_ptr_not_equal(arr, NULL); assert_non_null(arr);
ArrayListErr err = arraylist_destroy(&arr); ArrayListErr err = arraylist_destroy(&arr);
assert_int_equal(err, ARRLIST_OK); assert_int_equal(err, ARRLIST_OK);
assert_ptr_equal(arr, NULL); assert_null(arr);
err = arraylist_destroy(&arr); err = arraylist_destroy(&arr);
assert_int_equal(err, ARRLIST_NULL_ARG); assert_int_equal(err, ARRLIST_NULL_ARG);
assert_ptr_equal(arr, NULL); assert_null(arr);
}
// State
static void test_capacity_after_init(void **state) {
(void) state;
ArrayList *arr = arraylist_init(64, sizeof(int));
assert_non_null(arr);
assert_int_equal(arraylist_capacity(arr), 64);
arraylist_destroy(&arr);
}
static void test_is_empty_after_init(void **state) {
(void) state;
ArrayList *arr = arraylist_init(64, sizeof(int));
assert_non_null(arr);
assert_true(arraylist_is_empty(arr));
arraylist_destroy(&arr);
}
static void test_is_empty_after_push(void **state) {
(void) state;
ArrayList *arr = arraylist_init(64, sizeof(int));
assert_non_null(arr);
int n = 8;
assert_int_equal(arraylist_push_back(arr, &n), ARRLIST_OK);
assert_false(arraylist_is_empty(arr));
arraylist_destroy(&arr);
}
static void test_size_after_many_push(void **state) {
(void) state;
ArrayList *arr = arraylist_init(64, sizeof(int));
assert_non_null(arr);
int n = 8;
assert_int_equal(arraylist_push_back(arr, &n), ARRLIST_OK);
assert_int_equal(arraylist_size(arr), 1);
assert_int_equal(arraylist_push_back(arr, &n), ARRLIST_OK);
assert_int_equal(arraylist_size(arr), 2);
assert_int_equal(arraylist_push_back(arr, &n), ARRLIST_OK);
assert_int_equal(arraylist_size(arr), 3);
assert_int_equal(arraylist_push_back(arr, &n), ARRLIST_OK);
assert_int_equal(arraylist_size(arr), 4);
arraylist_destroy(&arr);
}
static void test_capacity_growth_on_push(void **state) {
(void) state;
ArrayList *arr = arraylist_init(2, sizeof(int));
assert_non_null(arr);
int n = 8;
assert_int_equal(arraylist_push_back(arr, &n), ARRLIST_OK);
assert_int_equal(arraylist_capacity(arr), 2);
assert_int_equal(arraylist_push_back(arr, &n), ARRLIST_OK);
assert_int_equal(arraylist_capacity(arr), 2);
assert_int_equal(arraylist_push_back(arr, &n), ARRLIST_OK);
assert_int_equal(arraylist_capacity(arr), 4);
arraylist_destroy(&arr);
}
static void test_capacity_shrink_on_pop(void **state) {
(void) state;
ArrayList *arr = arraylist_init(8, sizeof(int));
assert_non_null(arr);
int n = 8;
assert_int_equal(arraylist_push_back(arr, &n), ARRLIST_OK);
assert_int_equal(arraylist_pop_back(arr, &n), ARRLIST_OK);
assert_int_equal(arraylist_capacity(arr), 4);
arraylist_destroy(&arr);
} }
int main(void) { int main(void) {
@@ -90,10 +186,20 @@ int main(void) {
cmocka_unit_test(test_destroy_double), cmocka_unit_test(test_destroy_double),
}; };
const struct CMUnitTest state[] = {
cmocka_unit_test(test_capacity_after_init),
cmocka_unit_test(test_is_empty_after_init),
cmocka_unit_test(test_is_empty_after_push),
cmocka_unit_test(test_size_after_many_push),
cmocka_unit_test(test_capacity_growth_on_push),
cmocka_unit_test(test_capacity_shrink_on_pop),
};
int rc = 0; int rc = 0;
rc += cmocka_run_group_tests(init, NULL, NULL); rc += cmocka_run_group_tests(init, NULL, NULL);
rc += cmocka_run_group_tests(destroy, NULL, NULL); rc += cmocka_run_group_tests(destroy, NULL, NULL);
rc += cmocka_run_group_tests(state, NULL, NULL);
return rc; return rc;
} }