Permanent Revolution Update

This commit is contained in:
Neerti
2017-01-02 08:03:30 -05:00
parent dc89eb5700
commit 97ebf0924d
28 changed files with 1296 additions and 93 deletions

View File

@@ -0,0 +1,174 @@
/datum/unit_test/integrated_circuits/additon_1
name = "Arithmetic Circuits: Addition - Basic"
circuit_type = /obj/item/integrated_circuit/arithmetic/addition
inputs_to_give = list(25, 75)
expected_outputs = list(100)
/datum/unit_test/integrated_circuits/additon_2
name = "Arithmetic Circuits: Addition - Multiple"
circuit_type = /obj/item/integrated_circuit/arithmetic/addition
inputs_to_give = list(7, 5, 3, 26, 974, -51, 77, 0)
expected_outputs = list(1041)
/datum/unit_test/integrated_circuits/subtraction_1
name = "Arithmetic Circuits: Subtraction - Basic"
circuit_type = /obj/item/integrated_circuit/arithmetic/subtraction
inputs_to_give = list(20, 15)
expected_outputs = list(5)
/datum/unit_test/integrated_circuits/subtraction_2
name = "Arithmetic Circuits: Subtraction - Multiple"
circuit_type = /obj/item/integrated_circuit/arithmetic/subtraction
inputs_to_give = list(5, 50, 30)
expected_outputs = list(-75)
/datum/unit_test/integrated_circuits/multiplication_1
name = "Arithmetic Circuits: Multiplication - Basic"
circuit_type = /obj/item/integrated_circuit/arithmetic/multiplication
inputs_to_give = list(5, 20)
expected_outputs = list(100)
/datum/unit_test/integrated_circuits/multiplication_2
name = "Arithmetic Circuits: Multiplication - Multiple"
circuit_type = /obj/item/integrated_circuit/arithmetic/multiplication
inputs_to_give = list(2, 10, 20)
expected_outputs = list(400)
/datum/unit_test/integrated_circuits/multiplication_3
name = "Arithmetic Circuits: Multiplication - Decimal"
circuit_type = /obj/item/integrated_circuit/arithmetic/multiplication
inputs_to_give = list(100, 0.5)
expected_outputs = list(50)
/datum/unit_test/integrated_circuits/division_1
name = "Arithmetic Circuits: Division - Basic"
circuit_type = /obj/item/integrated_circuit/arithmetic/division
inputs_to_give = list(100, 5)
expected_outputs = list(20)
/datum/unit_test/integrated_circuits/division_2
name = "Arithmetic Circuits: Division - Multiple"
circuit_type = /obj/item/integrated_circuit/arithmetic/division
inputs_to_give = list(500, 100, 10)
expected_outputs = list(0.5)
/datum/unit_test/integrated_circuits/division_3
name = "Arithmetic Circuits: Division - Decimal"
circuit_type = /obj/item/integrated_circuit/arithmetic/division
inputs_to_give = list(100, 0.5)
expected_outputs = list(200)
/datum/unit_test/integrated_circuits/exponent_1
name = "Arithmetic Circuits: Exponent - Basic"
circuit_type = /obj/item/integrated_circuit/arithmetic/exponent
inputs_to_give = list(20, 2)
expected_outputs = list(400)
/datum/unit_test/integrated_circuits/exponent_2
name = "Arithmetic Circuits: Exponent - Powers"
circuit_type = /obj/item/integrated_circuit/arithmetic/exponent
inputs_to_give = list(5, 4)
expected_outputs = list(625)
/datum/unit_test/integrated_circuits/sign_1
name = "Arithmetic Circuits: Sign - Positive"
circuit_type = /obj/item/integrated_circuit/arithmetic/sign
inputs_to_give = list(5)
expected_outputs = list(1)
/datum/unit_test/integrated_circuits/sign_2
name = "Arithmetic Circuits: Sign - Negative"
circuit_type = /obj/item/integrated_circuit/arithmetic/sign
inputs_to_give = list(-500)
expected_outputs = list(-1)
/datum/unit_test/integrated_circuits/sign_3
name = "Arithmetic Circuits: Sign - Zero"
circuit_type = /obj/item/integrated_circuit/arithmetic/sign
inputs_to_give = list(0)
expected_outputs = list(0)
/datum/unit_test/integrated_circuits/round_1
name = "Arithmetic Circuits: Round - Basic"
circuit_type = /obj/item/integrated_circuit/arithmetic/round
inputs_to_give = list(4.25)
expected_outputs = list(4)
/datum/unit_test/integrated_circuits/round_2
name = "Arithmetic Circuits: Round - Floor"
circuit_type = /obj/item/integrated_circuit/arithmetic/round
inputs_to_give = list(8.95)
expected_outputs = list(8)
/datum/unit_test/integrated_circuits/round_3
name = "Arithmetic Circuits: Round - Round to X"
circuit_type = /obj/item/integrated_circuit/arithmetic/round
inputs_to_give = list(45.68, 0.1)
expected_outputs = list(45.7)
/datum/unit_test/integrated_circuits/absolute_1
name = "Arithmetic Circuits: Absolute - Positive"
circuit_type = /obj/item/integrated_circuit/arithmetic/absolute
inputs_to_give = list(50)
expected_outputs = list(50)
/datum/unit_test/integrated_circuits/absolute_2
name = "Arithmetic Circuits: Absolute - Negative"
circuit_type = /obj/item/integrated_circuit/arithmetic/absolute
inputs_to_give = list(-20)
expected_outputs = list(20)
/datum/unit_test/integrated_circuits/absolute_3
name = "Arithmetic Circuits: Absolute - Zero"
circuit_type = /obj/item/integrated_circuit/arithmetic/absolute
inputs_to_give = list(0)
expected_outputs = list(0)
/datum/unit_test/integrated_circuits/average_1
name = "Arithmetic Circuits: Average - Basic"
circuit_type = /obj/item/integrated_circuit/arithmetic/average
inputs_to_give = list(8, 20, 14, 6)
expected_outputs = list(12)
/datum/unit_test/integrated_circuits/average_2
name = "Arithmetic Circuits: Average - Negatives"
circuit_type = /obj/item/integrated_circuit/arithmetic/average
inputs_to_give = list(30, -5, 8, -50, 4)
expected_outputs = list(-2.6)
/datum/unit_test/integrated_circuits/square_root_1
name = "Arithmetic Circuits: Square Root"
circuit_type = /obj/item/integrated_circuit/arithmetic/square_root
inputs_to_give = list(64)
expected_outputs = list(8)
/datum/unit_test/integrated_circuits/modulo_1
name = "Arithmetic Circuits: Modulo - 1"
circuit_type = /obj/item/integrated_circuit/arithmetic/modulo
inputs_to_give = list(8, 5)
expected_outputs = list(3)
/datum/unit_test/integrated_circuits/modulo_2
name = "Arithmetic Circuits: Modulo - 2"
circuit_type = /obj/item/integrated_circuit/arithmetic/modulo
inputs_to_give = list(20, 5)
expected_outputs = list(0)

View File

@@ -0,0 +1,73 @@
/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

View File

@@ -0,0 +1,52 @@
/datum/unit_test/integrated_circuits/num2text
name = "Converter Circuits: Num2Text"
circuit_type = /obj/item/integrated_circuit/converter/num2text
inputs_to_give = list(10250)
expected_outputs = list("10250")
/datum/unit_test/integrated_circuits/text2num
name = "Converter Circuits: Text2Num"
circuit_type = /obj/item/integrated_circuit/converter/text2num
inputs_to_give = list("2005")
expected_outputs = list(2005)
/datum/unit_test/integrated_circuits/lowercase
name = "Converter Circuits: Lowercase"
circuit_type = /obj/item/integrated_circuit/converter/lowercase
inputs_to_give = list("Lorem ipsum...")
expected_outputs = list("lorem ipsum...")
/datum/unit_test/integrated_circuits/uppercase
name = "Converter Circuits: Uppercase"
circuit_type = /obj/item/integrated_circuit/converter/uppercase
inputs_to_give = list("Lorem ipsum...")
expected_outputs = list("LOREM IPSUM...")
/datum/unit_test/integrated_circuits/concatenatior
name = "Converter Circuits: Concatenatior"
circuit_type = /obj/item/integrated_circuit/converter/concatenatior
inputs_to_give = list("Lorem", " ", "ipsum", "...")
expected_outputs = list("Lorem ipsum...")
/datum/unit_test/integrated_circuits/floor/radians2degrees
name = "Converter Circuits: Radians2Degrees"
circuit_type = /obj/item/integrated_circuit/converter/radians2degrees
inputs_to_give = list(1.57)
expected_outputs = list(89) // 89.95437
/datum/unit_test/integrated_circuits/floor/degrees2radians
name = "Converter Circuits: Degrees2Radians"
circuit_type = /obj/item/integrated_circuit/converter/degrees2radians
inputs_to_give = list(90)
expected_outputs = list(1) // 1.570796

View File

@@ -0,0 +1,17 @@
/datum/unit_test/integrated_circuits/splitter
name = "Data Transfer Circuits: Splitter"
circuit_type = /obj/item/integrated_circuit/transfer/splitter
inputs_to_give = list("Test")
expected_outputs = list("Test", "Test")
/datum/unit_test/integrated_circuits/splitter4
name = "Data Transfer Circuits: Splitter 4"
circuit_type = /obj/item/integrated_circuit/transfer/splitter/medium
inputs_to_give = list("Test")
expected_outputs = list("Test", "Test", "Test", "Test")
/datum/unit_test/integrated_circuits/splitter8
name = "Data Transfer Circuits: Splitter 8"
circuit_type = /obj/item/integrated_circuit/transfer/splitter/large
inputs_to_give = list("Test")
expected_outputs = list("Test", "Test", "Test", "Test", "Test", "Test", "Test", "Test")

View File

@@ -0,0 +1,186 @@
/datum/unit_test/integrated_circuits/equals_1
name = "Logic Circuits: Equals - String True"
circuit_type = /obj/item/integrated_circuit/logic/binary/equals
inputs_to_give = list("Test", "Test")
expected_outputs = list(TRUE)
/datum/unit_test/integrated_circuits/equals_2
name = "Logic Circuits: Equals - String False"
circuit_type = /obj/item/integrated_circuit/logic/binary/equals
inputs_to_give = list("Test", "Nope")
expected_outputs = list(FALSE)
/datum/unit_test/integrated_circuits/equals_3
name = "Logic Circuits: Equals - Number True"
circuit_type = /obj/item/integrated_circuit/logic/binary/equals
inputs_to_give = list(525, 525)
expected_outputs = list(TRUE)
/datum/unit_test/integrated_circuits/equals_4
name = "Logic Circuits: Equals - Number False"
circuit_type = /obj/item/integrated_circuit/logic/binary/equals
inputs_to_give = list(1020, -580)
expected_outputs = list(FALSE)
/datum/unit_test/integrated_circuits/equals_5
name = "Logic Circuits: Equals - Null True"
circuit_type = /obj/item/integrated_circuit/logic/binary/equals
inputs_to_give = list(null, null)
expected_outputs = list(TRUE)
/datum/unit_test/integrated_circuits/equals_6
name = "Logic Circuits: Equals - Ref True"
circuit_type = /obj/item/integrated_circuit/logic/binary/equals
inputs_to_give = list()
expected_outputs = list(TRUE)
var/obj/A = null
/datum/unit_test/integrated_circuits/equals_6/arrange()
A = new(get_standard_turf())
inputs_to_give = list(weakref(A), weakref(A))
..()
/datum/unit_test/integrated_circuits/equals_6/clean_up()
qdel(A)
..()
/datum/unit_test/integrated_circuits/equals_7
name = "Logic Circuits: Equals - Ref False"
circuit_type = /obj/item/integrated_circuit/logic/binary/equals
inputs_to_give = list()
expected_outputs = list(FALSE)
var/obj/A = null
var/obj/B = null
/datum/unit_test/integrated_circuits/equals_7/arrange()
A = new(get_standard_turf())
B = new(get_standard_turf())
inputs_to_give = list(weakref(A), weakref(B))
..()
/datum/unit_test/integrated_circuits/equals_7/clean_up()
qdel(A)
qdel(B)
..()
/datum/unit_test/integrated_circuits/and_1
name = "Logic Circuits: And - True"
circuit_type = /obj/item/integrated_circuit/logic/binary/and
inputs_to_give = list("One", "Two")
expected_outputs = list(TRUE)
/datum/unit_test/integrated_circuits/and_2
name = "Logic Circuits: And - False"
circuit_type = /obj/item/integrated_circuit/logic/binary/and
inputs_to_give = list("One", null)
expected_outputs = list(FALSE)
/datum/unit_test/integrated_circuits/or_1
name = "Logic Circuits: Or - True First"
circuit_type = /obj/item/integrated_circuit/logic/binary/or
inputs_to_give = list("One", null)
expected_outputs = list(TRUE)
/datum/unit_test/integrated_circuits/or_2
name = "Logic Circuits: Or - True Second"
circuit_type = /obj/item/integrated_circuit/logic/binary/or
inputs_to_give = list(null, "Two")
expected_outputs = list(TRUE)
/datum/unit_test/integrated_circuits/or_3
name = "Logic Circuits: Or - True Both"
circuit_type = /obj/item/integrated_circuit/logic/binary/or
inputs_to_give = list("One", "Two")
expected_outputs = list(TRUE)
/datum/unit_test/integrated_circuits/or_4
name = "Logic Circuits: Or - False"
circuit_type = /obj/item/integrated_circuit/logic/binary/or
inputs_to_give = list(null, null)
expected_outputs = list(FALSE)
/datum/unit_test/integrated_circuits/less_than_1
name = "Logic Circuits: Less Than - True"
circuit_type = /obj/item/integrated_circuit/logic/binary/less_than
inputs_to_give = list(50, 100)
expected_outputs = list(TRUE)
/datum/unit_test/integrated_circuits/less_than_2
name = "Logic Circuits: Less Than - False"
circuit_type = /obj/item/integrated_circuit/logic/binary/less_than
inputs_to_give = list(500, 50)
expected_outputs = list(FALSE)
/datum/unit_test/integrated_circuits/less_than_or_equal_1
name = "Logic Circuits: Less Than Or Equal - True 1"
circuit_type = /obj/item/integrated_circuit/logic/binary/less_than_or_equal
inputs_to_give = list(40, 50)
expected_outputs = list(TRUE)
/datum/unit_test/integrated_circuits/less_than_or_equal_2
name = "Logic Circuits: Less Than Or Equal - True 2"
circuit_type = /obj/item/integrated_circuit/logic/binary/less_than_or_equal
inputs_to_give = list(40, 40)
expected_outputs = list(TRUE)
/datum/unit_test/integrated_circuits/less_than_or_equal_3
name = "Logic Circuits: Less Than Or Equal - False"
circuit_type = /obj/item/integrated_circuit/logic/binary/less_than_or_equal
inputs_to_give = list(40, 30)
expected_outputs = list(FALSE)
/datum/unit_test/integrated_circuits/greater_than_1
name = "Logic Circuits: Greater Than - True"
circuit_type = /obj/item/integrated_circuit/logic/binary/greater_than
inputs_to_give = list(100, 50)
expected_outputs = list(TRUE)
/datum/unit_test/integrated_circuits/greater_than_2
name = "Logic Circuits: Greater Than - False"
circuit_type = /obj/item/integrated_circuit/logic/binary/greater_than
inputs_to_give = list(25, 800)
expected_outputs = list(FALSE)
/datum/unit_test/integrated_circuits/greater_than_or_equal_1
name = "Logic Circuits: Greater Than Or Equal - True 1"
circuit_type = /obj/item/integrated_circuit/logic/binary/greater_than_or_equal
inputs_to_give = list(250, 30)
expected_outputs = list(TRUE)
/datum/unit_test/integrated_circuits/greater_than_or_equal_2
name = "Logic Circuits: Greater Than Or Equal - True 2"
circuit_type = /obj/item/integrated_circuit/logic/binary/greater_than_or_equal
inputs_to_give = list(30, 30)
expected_outputs = list(TRUE)
/datum/unit_test/integrated_circuits/greater_than_or_equal_3
name = "Logic Circuits: Greater Than Or Equal - False"
circuit_type = /obj/item/integrated_circuit/logic/binary/greater_than_or_equal
inputs_to_give = list(-40, 100)
expected_outputs = list(FALSE)
/datum/unit_test/integrated_circuits/not_1
name = "Logic Circuits: Not - Invert to False"
circuit_type = /obj/item/integrated_circuit/logic/unary/not
inputs_to_give = list(1)
expected_outputs = list(0)
/datum/unit_test/integrated_circuits/not_2
name = "Logic Circuits: Not - Invert to True"
circuit_type = /obj/item/integrated_circuit/logic/unary/not
inputs_to_give = list(0)
expected_outputs = list(1)

View File

@@ -0,0 +1,55 @@
/datum/unit_test/integrated_circuit_prefabs_shall_respect_complexity_and_size_contraints
name = "Integrated Circuit Prefabs Shall Respect Complexity and Size Constraints"
/datum/unit_test/integrated_circuit_prefabs_shall_respect_complexity_and_size_contraints/start_test()
var/list/failed_prefabs = list()
for(var/prefab_type in subtypesof(/decl/prefab/ic_assembly))
var/decl/prefab/ic_assembly/prefab = decls_repository.get_decl(prefab_type)
var/obj/item/device/electronic_assembly/assembly = prefab.assembly_type
var/available_size = initial(assembly.max_components)
var/available_complexity = initial(assembly.max_complexity)
for(var/ic in prefab.integrated_circuits)
var/datum/ic_assembly_integrated_circuits/iaic = ic
var/obj/item/integrated_circuit/circuit = iaic.circuit_type
available_size -= initial(circuit.size)
available_complexity -= initial(circuit.complexity)
if(available_size < 0)
log_bad("[prefab_type] has an excess component size of [abs(available_size)]")
failed_prefabs |= prefab_type
if(available_complexity < 0)
log_bad("[prefab_type] has an excess component complexity of [abs(available_complexity)]")
failed_prefabs |= prefab_type
if(failed_prefabs.len)
fail("The following integrated prefab types are out of bounds: [english_list(failed_prefabs)]")
else
pass("All integrated circuit prefabs are within complexity and size limits.")
return 1
/datum/unit_test/integrated_circuit_prefabs_shall_not_fail_to_create
name = "Integrated Circuit Prefabs Shall Not Fail To Create"
/datum/unit_test/integrated_circuit_prefabs_shall_not_fail_to_create/start_test()
var/list/failed_prefabs = list()
for(var/prefab_type in subtypesof(/decl/prefab/ic_assembly))
var/decl/prefab/ic_assembly/prefab = decls_repository.get_decl(prefab_type)
try
var/built_item = prefab.create(get_standard_turf())
if(built_item)
qdel(built_item)
else
log_bad("[prefab_type] failed to create or return its item.")
failed_prefabs |= prefab_type
catch(var/exception/e)
log_bad("[prefab_type] caused an exception: [e] on [e.file]:[e.line]")
failed_prefabs |= prefab_type
if(failed_prefabs.len)
fail("The following integrated prefab types failed to create their assemblies: [english_list(failed_prefabs)]")
else
pass("All integrated circuit prefabs are within complexity and size limits.")
return 1

View File

@@ -0,0 +1,33 @@
/datum/unit_test/integrated_circuits/floor/sine_1
name = "Trig Circuits: Sine - 1"
circuit_type = /obj/item/integrated_circuit/trig/sine
inputs_to_give = list(90)
expected_outputs = list(1)
/datum/unit_test/integrated_circuits/floor/sine_2
name = "Trig Circuits: Sine - 2"
circuit_type = /obj/item/integrated_circuit/trig/sine
inputs_to_give = list(0)
expected_outputs = list(0)
/datum/unit_test/integrated_circuits/floor/cosine_1
name = "Trig Circuits: Cosine - 1"
circuit_type = /obj/item/integrated_circuit/trig/cosine
inputs_to_give = list(90)
expected_outputs = list(0)
/datum/unit_test/integrated_circuits/floor/cosine_2
name = "Trig Circuits: Cosine - 2"
circuit_type = /obj/item/integrated_circuit/trig/cosine
inputs_to_give = list(0)
expected_outputs = list(1)
/datum/unit_test/integrated_circuits/floor/tangent_1
name = "Trig Circuits: Tangent - 1"
circuit_type = /obj/item/integrated_circuit/trig/tangent
inputs_to_give = list(45)
expected_outputs = list(1)

View File

@@ -96,4 +96,13 @@ var/total_unit_tests = 0
world.Del()
else
log_unit_test("[ASCII_RED]!!! \[[failed_unit_tests]\\[total_unit_tests]\] Unit Tests Failed !!![ASCII_RESET]")
world.Del()
world.Del()
/datum/unit_test/proc/get_standard_turf()
return locate(20,20,1)
/datum/unit_test/proc/log_bad(var/message)
log_unit_test("[ASCII_RED]\[[name]\]: [message][ASCII_RESET]")
/datum/unit_test/proc/log_debug(var/message)
log_unit_test("[ASCII_YELLOW]--- DEBUG --- \[[name]\]: [message][ASCII_RESET]")