erase() function takes iter range

This commit is contained in:
Andrew Haynes
2026-05-01 21:28:16 -04:00
parent 509228bf58
commit b6e9e879c9
5 changed files with 963 additions and 42 deletions
+13 -17
View File
@@ -82,7 +82,7 @@ erase(Vec8_t* vec, const int iter)
if (iter >= vec->size)
return nullptr;
vec->arr[iter] = 0;
memmove(&vec->arr[iter], &vec->arr[iter + 1], (vec->size * sizeof(char)) - 1);
memmove(&vec->arr[iter], &vec->arr[iter + 1], (vec->size - iter - 1) * sizeof(char));
vec->size--;
return vec;
}
@@ -165,13 +165,13 @@ test_erase_basic_correctness(void)
erase(&vec, 2);
test("erase: arr[2] set to 0", vec.arr[2] == 0);
test("erase: size decremented to 4", vec.size == 4);
int elements_intact = (vec.arr[0] == 'A') && (vec.arr[1] == 'B')
&& (vec.arr[3] == 'E');
test("erase: remaining elements intact after shift", elements_intact);
&& (vec.arr[2] == 'D') && (vec.arr[3] == 'E');
test("erase: elements shifted correctly A B D E", elements_intact);
test("erase: element at idx 3 now holds original idx 4", vec.arr[3] == 'E');
test("erase: element at idx 2 now holds original idx 3 ('D')", vec.arr[2] == 'D');
delete(&vec);
}
@@ -650,18 +650,14 @@ test_erase_clear_performance_comparison(void)
void
test_pseudo_code_bug_analysis(void)
{
printf("\n--- BUG ANALYSIS: Pseudo Code ---\n");
printf(" FIXED:\n");
printf(" - Container count decremented after removal\n");
printf(" - Container count reset after zeroing all elements\n");
printf(" - Index validated against count before removal\n");
printf("\n REMAINING - erase() memmove length:\n");
printf(" Container holds array pointer, count, and capacity.\n");
printf(" Remove at index I by shifting remaining left.\n");
printf(" Wrong: move bytes = (count * element_size) - 1\n");
printf(" Right: move bytes = (count - I - 1) * element_size\n");
printf(" Effect: overwrites beyond intended range\n");
printf("\n--- BUG ANALYSIS: All Previously Detected Bugs Now Fixed ---\n");
printf(" Container with array pointer, count, and capacity.\n");
printf(" Remove at index I by shifting remaining left.\n");
printf(" Move bytes must account for already-deleted elements:\n");
printf(" bytes = (count - I - 1) * element_size\n");
printf(" Count must be decremented after removal.\n");
printf(" Count must be reset after zeroing all elements.\n");
printf(" Index must be validated against count before removal.\n");
test("bug analysis documented", 1);
}