diff --git a/src/arraylist.c b/src/arraylist.c index 494467d..7eeb568 100644 --- a/src/arraylist.c +++ b/src/arraylist.c @@ -89,7 +89,7 @@ bool arraylist_is_empty(const ArrayList *arr) { if (arr == NULL) { return true; } - return arr->capacity == 0; + return arr->len == 0; } static ArrayListErr arraylist_grow(ArrayList *arr) { diff --git a/test/test_arraylist.c b/test/test_arraylist.c index a136489..a09ebad 100644 --- a/test/test_arraylist.c +++ b/test/test_arraylist.c @@ -9,11 +9,13 @@ #include "arraylist.h" +// INIT + static void test_init_valid_parameters(void **state) { (void) state; ArrayList *arr = arraylist_init(64, sizeof(int)); - assert_ptr_not_equal(arr, NULL); + assert_non_null(arr); arraylist_destroy(&arr); } @@ -21,7 +23,7 @@ static void test_init_zero_capacity(void **state) { (void) state; ArrayList *arr = arraylist_init(0, sizeof(int)); - assert_ptr_equal(arr, NULL); + assert_null(arr); arraylist_destroy(&arr); } @@ -29,7 +31,7 @@ static void test_init_zero_elem_size(void **state) { (void) state; ArrayList *arr = arraylist_init(64, 0); - assert_ptr_equal(arr, NULL); + assert_null(arr); arraylist_destroy(&arr); } @@ -37,18 +39,20 @@ static void test_init_large_capacity(void **state) { (void) state; ArrayList *arr = arraylist_init(SIZE_MAX, sizeof(int)); - assert_ptr_equal(arr, NULL); + assert_null(arr); arraylist_destroy(&arr); } +// DESTROY + static void test_destroy_valid_array(void **state) { (void) state; ArrayList *arr = arraylist_init(64, sizeof(int)); - assert_ptr_not_equal(arr, NULL); + assert_non_null(arr); arraylist_destroy(&arr); - assert_ptr_equal(arr, NULL); + assert_null(arr); } static void test_destroy_null_array(void **state) { @@ -57,7 +61,7 @@ static void test_destroy_null_array(void **state) { ArrayList *arr = NULL; ArrayListErr err = arraylist_destroy(&arr); - assert_ptr_equal(arr, NULL); + assert_null(arr); assert_int_equal(err, ARRLIST_NULL_ARG); } @@ -65,15 +69,107 @@ static void test_destroy_double(void **state) { (void) state; ArrayList *arr = arraylist_init(64, sizeof(int)); - assert_ptr_not_equal(arr, NULL); + assert_non_null(arr); ArrayListErr err = arraylist_destroy(&arr); assert_int_equal(err, ARRLIST_OK); - assert_ptr_equal(arr, NULL); + assert_null(arr); err = arraylist_destroy(&arr); 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) { @@ -90,10 +186,20 @@ int main(void) { 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; rc += cmocka_run_group_tests(init, NULL, NULL); rc += cmocka_run_group_tests(destroy, NULL, NULL); + rc += cmocka_run_group_tests(state, NULL, NULL); return rc; }