int Array_push(struct dynarray *a, void *el) { if ((a->length + 1) >= a->capacity) { check(Array_expand(a) == 0, "Could not expand Array"); } a->elements[a->length++] = el; return 0; error: return -1; }
char *test_expand_contract() { int old_max = array->max; Array_expand(array); mu_assert((unsigned int)array->max == old_max + array->growth_rate, "Wrong size after expand."); Array_contract(array); mu_assert((unsigned int)array->max == array->growth_rate + 1, "Should stay at the growth_rate at least."); Array_contract(array); mu_assert((unsigned int)array->max == array->growth_rate + 1, "Should stay at the growth_rate at least."); return NULL; }
int Array_shift(struct dynarray *a, void *el) { int i; if ((a->length + 1) >= a->capacity) { check(Array_expand(a) == 0, "Could not expand Array"); } for (i = a->length; i > 0; i--) { a->elements[i] = a->elements[i - 1]; } a->elements[0] = el; a->length++; return 0; error: return -1; }