mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-24 08:02:57 +00:00
* Avoid creating string list of turf platings, rename some of the APIs, and improve focused test support - 160ms+ (more on prod) of init savings (#72056) Looking at some stuff that uses `Join` right now as targets, this one's pretty straight forward. `/turf/open/floor/Initialize`, called 20,000 times without ruins, creates a string list of the broken and burnt states. This carries the fixed cost of `Join`, which is very expensive, as well as some (not crazy, but not negligible) proc overhead. These vars were used for effectively nothing, and have been replaced with just using the list when necessary, which only adds an extra millisecond of cost to update_overlays. This was also used to automatically set `broken` and `burnt` at runtime. However, this looks like it has gone completely unused. Adds a unit test which adds it as a static field to the only type that cared about it, which was abductor tiles, which is wrong anyway, but Whatever. I want to support people making a subtype of floor tiles that are pre-broken without it messing up stuff silently, so the test is there. While I'm at it, renames `setup_broken_states` and `setup_burnt_states` to remove `setup_`, since they don't really do that anymore (and never did). Also also, adds support for `PERFORM_ALL_TESTS` to work with multiple focuses. For reviewing, basically all of the changes are in floor.dm, aside from test stuff, which is unit_test.dm. * Avoid creating string list of turf platings, rename some of the APIs, and improve focused test support - 160ms+ (more on prod) of init savings * a * FUCK * nope Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com> Co-authored-by: John Doe <gamingskeleton3@gmail.com> Co-authored-by: Tastyfish <crazychris32@gmail.com>
21 lines
973 B
Plaintext
21 lines
973 B
Plaintext
/// Are tests enabled with no focus?
|
|
/// Use this when performing test assertions outside of a unit test,
|
|
/// since a focused test means that you're trying to run a test quickly.
|
|
/// If a parameter is provided, will check if the focus is on that test name.
|
|
/// For example, PERFORM_ALL_TESTS(log_mapping) will only run if either
|
|
/// no test is focused, or the focus is log_mapping.
|
|
#ifdef UNIT_TESTS
|
|
// Bit of a trick here, if focus isn't passed in then it'll check for /datum/unit_test/, which is never the case.
|
|
#define PERFORM_ALL_TESTS(focus...) (isnull(GLOB.focused_tests) || (/datum/unit_test/##focus in GLOB.focused_tests))
|
|
#else
|
|
// UNLINT necessary here so that if (PERFORM_ALL_TESTS()) works
|
|
#define PERFORM_ALL_TESTS(...) UNLINT(FALSE)
|
|
#endif
|
|
|
|
/// ASSERT(), but it only actually does anything during unit tests
|
|
#ifdef UNIT_TESTS
|
|
#define TEST_ONLY_ASSERT(test, explanation) if(!(test)) {CRASH(explanation)}
|
|
#else
|
|
#define TEST_ONLY_ASSERT(test, explanation)
|
|
#endif
|