test: add nuclear-grade stress tests and memory safety fixes

Co-authored-by: aider (deepseek/deepseek-coder) <aider@aider.chat>
This commit is contained in:
Loic Coenen
2026-05-01 23:17:13 +00:00
parent f3da43f4db
commit 2e0770e95d
3 changed files with 421 additions and 45 deletions

View File

@@ -520,22 +520,29 @@ void engine_undo(Engine *engine) {
case ACTION_TRIGGER_SCENE: {
int scene_idx = action->index;
if (scene_idx < 0 || scene_idx >= MAX_SCENES) break;
for (int ch = 0; ch < MAX_CHANNELS; ch++) {
int clip_idx = CLIP_INDEX(scene_idx, ch);
engine->clips[clip_idx].state = CLIP_EMPTY;
engine->clips[clip_idx].buffer_size = 0;
engine->clips[clip_idx].write_position = 0;
engine->clips[clip_idx].read_position = 0;
if (clip_idx < 0 || clip_idx >= MAX_CLIPS) continue;
Clip *clip = &engine->clips[clip_idx];
if (!clip->buffer) continue;
clip->state = CLIP_EMPTY;
clip->buffer_size = 0;
clip->write_position = 0;
clip->read_position = 0;
}
break;
}
case ACTION_RESET_CLIP: {
int clip_idx = action->index;
engine->clips[clip_idx].state = action->previous_state;
engine->clips[clip_idx].buffer_size = action->previous_buffer_size;
engine->clips[clip_idx].write_position = action->previous_write_position;
engine->clips[clip_idx].read_position = action->previous_read_position;
if (clip_idx < 0 || clip_idx >= MAX_CLIPS) break;
Clip *clip = &engine->clips[clip_idx];
if (!clip->buffer) break;
clip->state = action->previous_state;
clip->buffer_size = action->previous_buffer_size;
clip->write_position = action->previous_write_position;
clip->read_position = action->previous_read_position;
break;
}
@@ -612,9 +619,12 @@ void engine_redo(Engine *engine) {
case ACTION_TRIGGER_SCENE: {
int scene_idx = action->index;
if (scene_idx < 0 || scene_idx >= MAX_SCENES) break;
for (int ch = 0; ch < MAX_CHANNELS; ch++) {
int clip_idx = CLIP_INDEX(scene_idx, ch);
if (clip_idx < 0 || clip_idx >= MAX_CLIPS) continue;
Clip *clip = &engine->clips[clip_idx];
if (!clip->buffer) continue;
switch (clip->state) {
case CLIP_EMPTY:
clip->state = CLIP_RECORDING;
@@ -642,7 +652,9 @@ void engine_redo(Engine *engine) {
case ACTION_RESET_CLIP: {
int clip_idx = action->index;
if (clip_idx < 0 || clip_idx >= MAX_CLIPS) break;
Clip *clip = &engine->clips[clip_idx];
if (!clip->buffer) break;
clip->state = CLIP_EMPTY;
clip->buffer_size = 0;
clip->write_position = 0;