Files
CHOMPStation2/code/unit_tests/mob_tests.dm
Aronai Sieyes 880078a722 Merge pull request #11332 from VOREStation/Arokha/suffotest
Create a new empty zlevel for testing suffocation
2021-08-02 16:43:55 +00:00

161 lines
5.1 KiB
Plaintext

/datum/unit_test/space_suffocation
name = "MOB: human mob suffocates in space"
var/startOxyloss
var/endOxyloss
var/mob/living/carbon/human/H
async = 1
/datum/unit_test/space_suffocation/start_test()
// Get an empty space level instead of just picking a random space turf
var/empty_z = using_map.get_empty_zlevel()
if(!empty_z)
fail("Unable to get empty z-level for suffocation test!")
return 1
// Away from map edges so they don't transit while we're testing
var/mid_w = round(world.maxx*0.5)
var/mid_h = round(world.maxy*0.5)
var/turf/T = locate(mid_w, mid_h, empty_z)
if(!T)
fail("Unable to find middle turf for suffocation test!")
return 1
H = new(T)
startOxyloss = H.getOxyLoss()
return 1
/datum/unit_test/space_suffocation/check_result()
if(H.life_tick < 10)
return 0
endOxyloss = H.getOxyLoss()
if(startOxyloss < endOxyloss)
pass("Human mob takes oxygen damage in space. (Before: [startOxyloss]; after: [endOxyloss])")
else
fail("Human mob is not taking oxygen damage in space. (Before: [startOxyloss]; after: [endOxyloss])")
qdel(H)
return 1
/datum/modifier/unit_test
/datum/unit_test/modifier
name = "modifier test template"
var/mob/living/subject = null
var/subject_type = /mob/living/carbon/human
var/list/inputs = list(1.00, 0.75, 0.50, 0.25, 0.00, -0.50, -1.0, -2.0)
var/list/expected_outputs = list(1.00, 0.75, 0.50, 0.25, 0.00, -0.50, -1.0, -2.0)
var/datum/modifier/test_modifier = null
var/issues = 0
/datum/unit_test/modifier/start_test()
// Arrange.
subject = new subject_type(get_standard_turf())
subject.add_modifier(/datum/modifier/unit_test)
test_modifier = subject.get_modifier_of_type(/datum/modifier/unit_test)
// Act,
for(var/i = 1 to inputs.len)
set_tested_variable(test_modifier, inputs[i])
var/actual = round(get_test_value(subject), 0.01) // Rounding because floating point schannigans.
if(actual != expected_outputs[i])
issues++
log_bad("Input '[inputs[i]]' did not match expected output '[expected_outputs[i]]', but was instead '[actual]'.")
// Assert.
if(issues)
fail("[issues] issues were found.")
else
pass("No issues found.")
qdel(subject)
return TRUE
// Override for subtypes.
/datum/unit_test/modifier/proc/set_tested_variable(datum/modifier/M, new_value)
return
/datum/unit_test/modifier/proc/get_test_value(mob/living/L)
return
/datum/unit_test/modifier/heat_protection
name = "MOB: human mob heat protection is calculated correctly"
/datum/unit_test/modifier/heat_protection/set_tested_variable(datum/modifier/M, new_value)
M.heat_protection = new_value
/datum/unit_test/modifier/heat_protection/get_test_value(mob/living/L)
return L.get_heat_protection(1000)
/datum/unit_test/modifier/heat_protection/simple_mob
name = "MOB: simple mob heat protection is calculated correctly"
subject_type = /mob/living/simple_mob
/datum/unit_test/modifier/cold_protection
name = "MOB: human mob cold protection is calculated correctly"
/datum/unit_test/modifier/cold_protection/set_tested_variable(datum/modifier/M, new_value)
M.cold_protection = new_value
/datum/unit_test/modifier/cold_protection/get_test_value(mob/living/L)
return L.get_cold_protection(50)
/datum/unit_test/modifier/cold_protection/simple_mob
name = "MOB: simple mob cold protection is calculated correctly"
subject_type = /mob/living/simple_mob
/datum/unit_test/modifier/shock_protection
name = "MOB: human mob shock protection is calculated correctly"
inputs = list(3.00, 2.00, 1.50, 1.00, 0.75, 0.50, 0.25, 0.00)
expected_outputs = list(-2.00, -1.00, -0.50, 0.00, 0.25, 0.50, 0.75, 1.00)
/datum/unit_test/modifier/shock_protection/set_tested_variable(datum/modifier/M, new_value)
M.siemens_coefficient = new_value
/datum/unit_test/modifier/shock_protection/get_test_value(mob/living/L)
return L.get_shock_protection()
/datum/unit_test/modifier/shock_protection/simple_mob
name = "MOB: simple mob shock protection is calculated correctly"
subject_type = /mob/living/simple_mob
/datum/unit_test/modifier/percentage_armor
name = "MOB: human mob percentage armor is calculated correctly"
inputs = list(100, 75, 50, 25, 0)
expected_outputs = list(100, 75, 50, 25, 0)
/datum/unit_test/modifier/percentage_armor/set_tested_variable(datum/modifier/M, new_value)
M.armor_percent = list("melee" = new_value)
/datum/unit_test/modifier/percentage_armor/get_test_value(mob/living/L)
return L.getarmor(null, "melee")
/datum/unit_test/modifier/percentage_armor/simple_mob
name = "MOB: simple mob percentage armor is calculated correctly"
subject_type = /mob/living/simple_mob
/datum/unit_test/modifier/percentage_flat
name = "MOB: human mob flat armor is calculated correctly"
inputs = list(100, 75, 50, 25, 0)
expected_outputs = list(100, 75, 50, 25, 0)
/datum/unit_test/modifier/percentage_flat/set_tested_variable(datum/modifier/M, new_value)
M.armor_flat = list("melee" = new_value)
/datum/unit_test/modifier/percentage_flat/get_test_value(mob/living/L)
return L.getsoak(null, "melee")
/datum/unit_test/modifier/percentage_flat/simple_mob
name = "MOB: simple mob flat armor is calculated correctly"
subject_type = /mob/living/simple_mob