@@ -367,3 +367,132 @@ TEST(AudioEngineProcess_FullCoverageSweep) {
367367 engine.toggle_metronome ();
368368 engine.process_audio (in.data (), out.data (), 64 );
369369}
370+ TEST (audio_engine_commit_graph_changes_stability) {
371+ AudioEngine engine;
372+
373+ for (int i = 0 ; i < 50 ; ++i) {
374+ engine.commit_graph_changes ();
375+ }
376+
377+ ASSERT_TRUE (true );
378+ }
379+ TEST (audio_engine_multiple_commit_graph_changes) {
380+ AudioEngine engine;
381+
382+ engine.commit_graph_changes ();
383+ engine.commit_graph_changes ();
384+ engine.commit_graph_changes ();
385+
386+ ASSERT_TRUE (true );
387+ }
388+ TEST (audio_engine_set_buffer_size_clamps_values) {
389+ AudioEngine engine;
390+
391+ engine.set_buffer_size (-1 );
392+ ASSERT_TRUE (engine.get_buffer_size () > 0 );
393+
394+ engine.set_buffer_size (999999 );
395+ ASSERT_TRUE (engine.get_buffer_size () <= 8192 );
396+ }
397+ TEST (audio_engine_set_sample_rate_updates_state) {
398+ AudioEngine engine;
399+
400+ engine.set_sample_rate (44100 );
401+ ASSERT_TRUE (engine.get_sample_rate () == 44100 );
402+
403+ engine.set_sample_rate (48000 );
404+ ASSERT_TRUE (engine.get_sample_rate () == 48000 );
405+
406+ engine.set_sample_rate (96000 );
407+ ASSERT_TRUE (engine.get_sample_rate () == 96000 );
408+ }
409+ TEST (audio_engine_commit_graph_changes_with_empty_graph) {
410+ AudioEngine engine;
411+
412+ engine.commit_graph_changes ();
413+
414+ ASSERT_TRUE (true );
415+ }
416+ TEST (audio_engine_repeated_graph_commits) {
417+ AudioEngine engine;
418+
419+ for (int i = 0 ; i < 100 ; ++i) {
420+ engine.commit_graph_changes ();
421+ }
422+
423+ ASSERT_TRUE (true );
424+ }
425+ TEST (audio_engine_graph_commit_after_node_removal) {
426+ AudioEngine engine;
427+
428+ auto & graph = engine.graph ();
429+
430+ int n1 =
431+ graph.add_node (" A" , NodeRoutingType::StandardEffect);
432+
433+ int n2 =
434+ graph.add_node (" B" , NodeRoutingType::StandardEffect);
435+
436+ auto nodes = graph.get_nodes ();
437+
438+ graph.add_link (nodes[0 ].output_pin_ids [0 ],
439+ nodes[1 ].input_pin_ids [0 ]);
440+
441+ ASSERT_TRUE (graph.remove_node (n2));
442+
443+ engine.commit_graph_changes ();
444+
445+ ASSERT_TRUE (true );
446+ }
447+ TEST (audio_engine_serialize_deserialize_roundtrip) {
448+ AudioEngine engine;
449+
450+ auto serialized = engine.serialize ();
451+
452+ AudioEngine loaded;
453+
454+ loaded.deserialize (serialized);
455+
456+ auto reserialized = loaded.serialize ();
457+
458+ ASSERT_FALSE (serialized.empty ());
459+ ASSERT_FALSE (reserialized.empty ());
460+
461+ ASSERT_TRUE (reserialized.contains (" effects" ));
462+ }
463+ TEST (audio_engine_multiple_sample_rate_changes) {
464+ AudioEngine engine;
465+
466+ std::vector<int > rates = {
467+ 22050 ,
468+ 44100 ,
469+ 48000 ,
470+ 88200 ,
471+ 96000
472+ };
473+
474+ for (int rate : rates) {
475+ engine.set_sample_rate (rate);
476+ }
477+
478+ ASSERT_TRUE (true );
479+ }
480+ TEST (audio_engine_multiple_buffer_size_changes) {
481+ AudioEngine engine;
482+
483+ std::vector<int > sizes = {
484+ 16 ,
485+ 32 ,
486+ 64 ,
487+ 128 ,
488+ 256 ,
489+ 512 ,
490+ 1024
491+ };
492+
493+ for (int size : sizes) {
494+ engine.set_buffer_size (size);
495+ }
496+
497+ ASSERT_TRUE (true );
498+ }
0 commit comments