| 174 | #define NUM_DELETE_WITH_CALLBACK 3 |
| 175 | |
| 176 | int dyn_array_delete_with_callback(void) |
| 177 | { |
| 178 | DYNAMIC_ARRAY things_array; |
| 179 | PSI_memory_key psi_key= PSI_NOT_INSTRUMENTED; |
| 180 | size_t element_size= sizeof(struct string_thing); |
| 181 | size_t init_alloc= (NUM_DELETE_WITH_CALLBACK - 1); |
| 182 | size_t alloc_increment= 2; |
| 183 | myf my_flags= MYF(MY_WME); |
| 184 | my_bool err= FALSE; |
| 185 | |
| 186 | err= my_init_dynamic_array(psi_key, &things_array, element_size, init_alloc, |
| 187 | alloc_increment, my_flags); |
| 188 | |
| 189 | ok(!err, "my_init_dynamic_array"); |
| 190 | if (err) { |
| 191 | return EXIT_FAILURE; |
| 192 | } |
| 193 | |
| 194 | for (size_t i= 0; i < NUM_DELETE_WITH_CALLBACK; ++i) { |
| 195 | struct string_thing thing= { (unsigned)i, NULL, 40 }; |
| 196 | thing.str= my_malloc(psi_key, thing.str_size, my_flags); |
| 197 | ok(thing.str != NULL, "%zu thing.str= malloc(%zu))", i, thing.str_size); |
| 198 | if (!thing.str) { |
| 199 | delete_dynamic_with_callback(&things_array, free_string_thing); |
| 200 | return EXIT_FAILURE; |
| 201 | } |
| 202 | snprintf(thing.str, thing.str_size, "thing %zu", i); |
| 203 | |
| 204 | err= insert_dynamic(&things_array, &thing); |
| 205 | ok(!err, "insert_dynamic for %zu", i); |
| 206 | if (err) { |
| 207 | delete_dynamic_with_callback(&things_array, free_string_thing); |
| 208 | return EXIT_FAILURE; |
| 209 | } |
| 210 | } |
| 211 | ok(3 == things_array.elements, "size expect: %d, actual: %zu", |
| 212 | 3, things_array.elements); |
| 213 | |
| 214 | delete_dynamic_with_callback(&things_array, free_string_thing); |
| 215 | |
| 216 | ok(0 == things_array.elements, "size expect: %d, actual: %zu", |
| 217 | 0, things_array.elements); |
| 218 | |
| 219 | return EXIT_SUCCESS; |
| 220 | } |
| 221 | static const int plan_delete_with_callback= 3 + (2 * NUM_DELETE_WITH_CALLBACK); |
| 222 | |
| 223 | int main(void) |
no test coverage detected