Compare commits

...

3 Commits

Author SHA1 Message Date
60f9f88af2 Merge pull request 'fix/fixes-overflow-on-pop' (#3) from fix/fixes-overflow-on-pop into main
All checks were successful
CI / build (push) Successful in 23s
Reviewed-on: http://gitea.hideyoshi.com.br/HideyoshiNakazone/dynamic_array/pulls/3
2026-04-15 23:32:21 +00:00
e5e4d75e2c test: add looping test for dynamic array to verify growth and value integrity
All checks were successful
CI / build (pull_request) Successful in 19s
2026-04-15 20:31:22 -03:00
10251039d5 fix: prevent underflow in array_pop when called on an empty array 2026-04-15 20:28:11 -03:00
2 changed files with 41 additions and 0 deletions

View File

@@ -63,6 +63,9 @@ typedef struct {
#define array_pop(arr) \
do { \
ArrayHeader *header = array_get_header(arr); \
if (header->size == 0) { \
break; \
} \
header->size--; \
} while (0)

View File

@@ -81,6 +81,24 @@ void test_array_pop_decrements_size(void) {
}
void test_array_pop_on_empty_is_noop(void) {
int *arr = NULL;
array_create(arr);
array_push_value(arr, 99);
TEST_ASSERT_EQUAL(1, array_get_header(arr)->size);
TEST_ASSERT_EQUAL(99, arr[0]);
array_pop(arr);
TEST_ASSERT_EQUAL(0, array_get_header(arr)->size);
array_pop(arr); // should not underflow
TEST_ASSERT_EQUAL(0, array_get_header(arr)->size);
array_destroy(arr);
}
void test_array_get_capacity_default(void) {
int *arr = NULL;
array_create(arr);
@@ -142,6 +160,24 @@ void test_array_values_correct_after_growth(void) {
}
void test_array_looping(void) {
int *arr = NULL;
array_create(arr);
const int num_elements = DYNAMIC_ARRAY_DEFAULT_ARRAY_SIZE * 2;
for (int i = 0; i < num_elements; i++) {
array_push_value(arr, i);
}
const ArrayHeader *header = array_get_header(arr);
TEST_ASSERT_EQUAL(num_elements, header->size);
for (int i = 0; i < header->size; i++) {
TEST_ASSERT_EQUAL(i, arr[i]);
}
}
int main(void)
{
UNITY_BEGIN();
@@ -152,10 +188,12 @@ int main(void)
RUN_TEST(test_array_push_value);
RUN_TEST(test_array_push_multiple_values);
RUN_TEST(test_array_pop_decrements_size);
RUN_TEST(test_array_pop_on_empty_is_noop);
RUN_TEST(test_array_get_capacity_default);
RUN_TEST(test_array_size_capacity_relationship);
RUN_TEST(test_array_push_beyond_capacity);
RUN_TEST(test_array_values_correct_after_growth);
RUN_TEST(test_array_looping);
return UNITY_END();
}