Files
CHOMPStation2/code/unit_tests/integrated_circuits/circuits.dm
2017-01-04 04:41:30 -05:00

74 lines
1.9 KiB
Plaintext

/datum/unit_test/integrated_circuits
name = "circuit template"
var/circuit_type = null
var/obj/item/integrated_circuit/IC = null
var/list/inputs_to_give = list()
var/list/expected_outputs = list()
// Use this to set up.
/datum/unit_test/integrated_circuits/proc/arrange()
IC = new circuit_type(get_standard_turf()) // Make the circuit
IC.cooldown_per_use = 0
// Use this when finished to remove clutter for the next test.
/datum/unit_test/integrated_circuits/proc/clean_up()
qdel(IC)
// Override this if needing special output (e.g. rounding to avoid floating point fun).
/datum/unit_test/integrated_circuits/proc/assess()
var/output_wrong = FALSE
var/i = 1
for(var/datum/integrated_io/io in IC.outputs)
if(io.data != expected_outputs[i])
log_bad("[io.name] did not match expected output of [expected_outputs[i]]. Output was [isnull(io.data) ? "NULL" : io.data].")
output_wrong = TRUE
i++
return output_wrong
// Useful when doing floating point fun.
/datum/unit_test/integrated_circuits/floor/assess()
var/output_wrong = FALSE
var/i = 1
for(var/datum/integrated_io/io in IC.outputs)
if(round(io.data) != expected_outputs[i])
log_bad("[io.name] did not match expected output of [expected_outputs[i]]. Output was [isnull(io.data) ? "NULL" : round(io.data)].")
output_wrong = TRUE
i++
return output_wrong
/datum/unit_test/integrated_circuits/start_test()
var/output_wrong = FALSE
if(!circuit_type)
fail("[name] did not supply a circuit_type path.")
return TRUE
try
// Arrange
arrange()
var/i = 1
for(var/input in inputs_to_give)
var/datum/integrated_io/io = IC.inputs[i]
io.write_data_to_pin(input)
i++
// Act
IC.do_work()
output_wrong = assess()
clean_up()
catch(var/exception/e)
log_bad("[name] caught an exception: [e] on [e.file]:[e.line]")
output_wrong = TRUE
// Assert
if(output_wrong)
fail("[name] failed.")
return TRUE
else
pass("[name] matched all expected outputs.")
return TRUE