mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-11 18:22:14 +00:00
* Ref Tracking: Revengance Fixes reference tracking ignoring self references due to a poorly thought out tick checking system. Fixes reference tracking ignoring the contents of assoc lists Makes the reference tracking printouts actually describe what list the ref is in, rather then just saying "list" Adds REFERENCE_TRACKING_DEBUG, a define which toggles tracking info for the ref tracking procs, which allows for oversight on how the proc is working Allows for direct calls of qdel_and_find_ref_if_fail(), makes it use ref rather then REF(), fixing it breaking for mobs. (Ditto for the qdel hint which does the same thing) Moves REAGENTS_TESTING out of the reftracking define block Makes unit tests define REFERENCE_TRACKING, REFERENCE_TRACKING_DEBUG, and FIND_REF_NO_CHECK_TICK Adds a unit test that sanity checks the reference finder proc
70 lines
2.8 KiB
Plaintext
70 lines
2.8 KiB
Plaintext
///Used to test the completeness of the reference finder proc.
|
|
/datum/unit_test/find_reference_sanity
|
|
|
|
/atom/movable/ref_holder
|
|
var/atom/movable/ref_test/test
|
|
var/list/test_list = list()
|
|
var/list/test_assoc_list = list()
|
|
|
|
/atom/movable/ref_test
|
|
var/atom/movable/ref_test/self_ref
|
|
|
|
/datum/unit_test/find_reference_sanity/Run()
|
|
var/atom/movable/ref_test/victim = allocate(/atom/movable/ref_test)
|
|
var/atom/movable/ref_holder/testbed = allocate(/atom/movable/ref_holder)
|
|
|
|
//Sanity check
|
|
victim.DoSearchVar(testbed, "Sanity Check", search_time = 1) //We increment search time to get around an optimization
|
|
TEST_ASSERT(!victim.found_refs.len, "The ref-tracking tool found a ref where none existed")
|
|
victim.found_refs.Cut()
|
|
|
|
//Set up for the first round of tests
|
|
testbed.test = victim
|
|
testbed.test_list += victim
|
|
testbed.test_assoc_list["baseline"] = victim
|
|
|
|
victim.DoSearchVar(testbed, "First Run", search_time = 2)
|
|
|
|
TEST_ASSERT(victim.found_refs["test"], "The ref-tracking tool failed to find a regular value")
|
|
TEST_ASSERT(victim.found_refs[testbed.test_list], "The ref-tracking tool failed to find a list entry")
|
|
TEST_ASSERT(victim.found_refs[testbed.test_assoc_list], "The ref-tracking tool failed to find an assoc list value")
|
|
victim.found_refs.Cut()
|
|
testbed.test = null
|
|
testbed.test_list.Cut()
|
|
testbed.test_assoc_list.Cut()
|
|
|
|
//Second round, bit harder this time
|
|
testbed.overlays += victim
|
|
testbed.vis_contents += victim
|
|
testbed.test_assoc_list[victim] = TRUE
|
|
|
|
victim.DoSearchVar(testbed, "Second Run", search_time = 3)
|
|
|
|
//This is another sanity check
|
|
TEST_ASSERT(!victim.found_refs[testbed.overlays], "The ref-tracking tool found an overlays entry? That shouldn't be possible")
|
|
TEST_ASSERT(victim.found_refs[testbed.vis_contents], "The ref-tracking tool failed to find a vis_contents entry")
|
|
TEST_ASSERT(victim.found_refs[testbed.test_assoc_list], "The ref-tracking tool failed to find an assoc list key")
|
|
victim.found_refs.Cut()
|
|
testbed.overlays.Cut()
|
|
testbed.vis_contents.Cut()
|
|
testbed.test_assoc_list.Cut()
|
|
|
|
//Let's get a bit esoteric
|
|
victim.self_ref = victim
|
|
var/list/to_find = list(victim)
|
|
testbed.test_list += list(to_find)
|
|
var/list/to_find_assoc = list(victim)
|
|
testbed.test_assoc_list["Nesting"] = to_find_assoc
|
|
|
|
victim.DoSearchVar(victim, "Third Run Self", search_time = 4)
|
|
victim.DoSearchVar(testbed, "Third Run Testbed", search_time = 4)
|
|
TEST_ASSERT(victim.found_refs["self_ref"], "The ref-tracking tool failed to find a self reference")
|
|
TEST_ASSERT(victim.found_refs[to_find], "The ref-tracking tool failed to find a nested list entry")
|
|
TEST_ASSERT(victim.found_refs[to_find_assoc], "The ref-tracking tool failed to find a nested assoc list entry")
|
|
victim.found_refs.Cut()
|
|
victim.self_ref = null
|
|
to_find.Cut()
|
|
testbed.test_list.Cut()
|
|
to_find_assoc.Cut()
|
|
testbed.test_assoc_list.Cut()
|