///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_holder/Destroy() test = null test_list.Cut() test_assoc_list.Cut() return ..() /atom/movable/ref_test var/atom/movable/ref_test/self_ref /atom/movable/ref_test/Destroy(force) self_ref = null return ..() /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) SSgarbage.should_save_refs = TRUE //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") SSgarbage.should_save_refs = FALSE /datum/unit_test/find_reference_baseline/Run() var/atom/movable/ref_test/victim = allocate(/atom/movable/ref_test) var/atom/movable/ref_holder/testbed = allocate(/atom/movable/ref_holder) SSgarbage.should_save_refs = TRUE //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") SSgarbage.should_save_refs = FALSE /datum/unit_test/find_reference_exotic/Run() var/atom/movable/ref_test/victim = allocate(/atom/movable/ref_test) var/atom/movable/ref_holder/testbed = allocate(/atom/movable/ref_holder) SSgarbage.should_save_refs = TRUE //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") SSgarbage.should_save_refs = FALSE /datum/unit_test/find_reference_esoteric/Run() var/atom/movable/ref_test/victim = allocate(/atom/movable/ref_test) var/atom/movable/ref_holder/testbed = allocate(/atom/movable/ref_holder) SSgarbage.should_save_refs = TRUE //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") SSgarbage.should_save_refs = FALSE /datum/unit_test/find_reference_null_key_entry/Run() var/atom/movable/ref_test/victim = allocate(/atom/movable/ref_test) var/atom/movable/ref_holder/testbed = allocate(/atom/movable/ref_holder) SSgarbage.should_save_refs = TRUE //Calm before the storm testbed.test_assoc_list = list(null = victim) victim.DoSearchVar(testbed, "Fourth Run", search_time = 5) TEST_ASSERT(testbed.test_assoc_list, "The ref-tracking tool failed to find a null key'd assoc list entry") /datum/unit_test/find_reference_assoc_investigation/Run() var/atom/movable/ref_test/victim = allocate(/atom/movable/ref_test) var/atom/movable/ref_holder/testbed = allocate(/atom/movable/ref_holder) SSgarbage.should_save_refs = TRUE //Let's do some more complex assoc list investigation var/list/to_find_in_key = list(victim) testbed.test_assoc_list[to_find_in_key] = list("memes") var/list/to_find_null_assoc_nested = list(victim) testbed.test_assoc_list[null] = to_find_null_assoc_nested victim.DoSearchVar(testbed, "Fifth Run", search_time = 6) TEST_ASSERT(victim.found_refs[to_find_in_key], "The ref-tracking tool failed to find a nested assoc list key") TEST_ASSERT(victim.found_refs[to_find_null_assoc_nested], "The ref-tracking tool failed to find a null key'd nested assoc list entry") SSgarbage.should_save_refs = FALSE