#include "FluidSim/ScenarioCatalog.hpp" #include "FluidSim/DesktopScenario.hpp" #include #include #include #include #include #include using namespace fluidsim::port; namespace { void check(bool condition,const std::string& message) {if(!condition)throw std::runtime_error(message);} std::string read(const std::filesystem::path& path) { std::ifstream file(path);std::ostringstream text;text<=32,"bundled engines missing"); const auto& thumper=scenario_example("single-450"); check(thumper.engine.carbureted && std::abs(thumper.engine.cylinder.bore-.096f)<1e-7f, "four-stroke units or fuel type changed"); check(std::abs(scenario_example("yz-racing").two.idle_slide_opening-.03f)<1e-7f, "125 idle tune lost"); for(const auto& e:catalog) { DesktopScenario s(e);s.set_controls(.35f,0,1); for(int i=0;i<256;++i) { const auto audio=s.process(); check(std::isfinite(audio.left) && std::isfinite(audio.right),e.id+": invalid audio after TOML load"); } const auto state=s.snapshot(); check(state.rpm>0 && state.pipe_positivity_repairs==0,e.id+": startup changed"); } TemporaryDirectory temp; const auto file=temp.path/"test.toml"; const auto original=read(engine_directory()/"twin.toml"); const auto reject=[&](std::string text,const std::string& expected) { {std::ofstream output(file);output<