18
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-11-14 09:06:58 +01:00

fix(simulation): any exception ends a test run with error, other runs as on master

main() tells a test run (--test) apart before anything runs. Only a test run
catches every exception and installs a std::terminate handler, both ending the
run with the error code and a test: line; any other run keeps master's
exception handling, so on Linux an uncaught runtime_error aborts at the throw
site again.

A test run doesn't start the Discord RPC thread: it published the test
scenery as the player's presence and held the closing up to 5 s.

run.py drops a case scenery's .sbt cache after a run cut short (wall_timeout,
error, a crash, killed by run.py), which could have been writing it.

The -edit branch of the test command line parser had no effect (a token that
isn't an option is ignored either way) and is gone; its test checks what can
be seen instead.
This commit is contained in:
jerrrrycho
2026-11-08 19:46:16 +01:00
parent cea92f0170
commit 8fb596f218
7 changed files with 125 additions and 41 deletions

View File

@@ -100,15 +100,28 @@ test_command_line parse_test_command_line(std::span<char const *const> const Arg
{
++i;
}
else if (option == "-edit" && i + 1 < Arguments.size() && Arguments[i + 1][0] != '-')
{
// the scenery to edit is optional
++i;
}
}
return result;
}
std::string describe_exception(std::exception_ptr const &Exception)
{
if (nullptr == Exception)
return "the simulator was terminated";
try
{
std::rethrow_exception(Exception);
}
catch (std::exception const &Error)
{
return std::format("critical error: {}", Error.what());
}
catch (...)
{
return "critical error: an exception of unknown type";
}
}
double wall_clock_limit(std::optional<double> const Given, double const Simulationtimeout)
{
if (Given.has_value())