148 lines
6.1 KiB
Lua
148 lines
6.1 KiB
Lua
|
require("mineunit")
|
||
|
|
||
|
fixture("mesecons")
|
||
|
|
||
|
describe("state", function()
|
||
|
local layout = {
|
||
|
{{x = 1, y = 0, z = 0}, "mesecons:test_receptor_off"},
|
||
|
{{x = 0, y = 1, z = 0}, "mesecons:test_receptor_off"},
|
||
|
{{x = 0, y = 0, z = 0}, "mesecons:test_conductor_off"},
|
||
|
{{x = -1, y = 0, z = 0}, "mesecons:test_effector"},
|
||
|
{{x = 2, y = 0, z = 0}, "mesecons:test_effector"},
|
||
|
{{x = 0, y = -1, z = 0}, "mesecons:test_effector"},
|
||
|
}
|
||
|
|
||
|
before_each(function()
|
||
|
world.layout(layout)
|
||
|
end)
|
||
|
|
||
|
after_each(function()
|
||
|
mesecon._test_reset()
|
||
|
world.clear()
|
||
|
end)
|
||
|
|
||
|
it("turns on", function()
|
||
|
world.set_node(layout[1][1], "mesecons:test_receptor_on")
|
||
|
mesecon.receptor_on(layout[1][1], mesecon.rules.alldirs)
|
||
|
mineunit:execute_globalstep() -- Execute receptor_on action
|
||
|
mineunit:execute_globalstep() -- Execute activate/change actions
|
||
|
assert.equal("mesecons:test_conductor_on", world.get_node(layout[3][1]).name)
|
||
|
assert.equal(tonumber("10000001", 2), world.get_node(layout[4][1]).param2)
|
||
|
assert.equal(tonumber("10000010", 2), world.get_node(layout[5][1]).param2)
|
||
|
assert.equal(tonumber("10000100", 2), world.get_node(layout[6][1]).param2)
|
||
|
|
||
|
world.set_node(layout[2][1], "mesecons:test_receptor_on")
|
||
|
mesecon.receptor_on(layout[2][1], mesecon.rules.alldirs)
|
||
|
mineunit:execute_globalstep() -- Execute receptor_on action
|
||
|
mineunit:execute_globalstep() -- Execute activate/change actions
|
||
|
assert.equal("mesecons:test_conductor_on", world.get_node(layout[3][1]).name)
|
||
|
assert.equal(tonumber("10000001", 2), world.get_node(layout[4][1]).param2)
|
||
|
assert.equal(tonumber("10000010", 2), world.get_node(layout[5][1]).param2)
|
||
|
assert.equal(tonumber("10000100", 2), world.get_node(layout[6][1]).param2)
|
||
|
end)
|
||
|
|
||
|
it("turns off", function()
|
||
|
world.set_node(layout[1][1], "mesecons:test_receptor_on")
|
||
|
world.set_node(layout[2][1], "mesecons:test_receptor_on")
|
||
|
mesecon.receptor_on(layout[1][1], mesecon.rules.alldirs)
|
||
|
mesecon.receptor_on(layout[2][1], mesecon.rules.alldirs)
|
||
|
mineunit:execute_globalstep() -- Execute receptor_on actions
|
||
|
|
||
|
world.set_node(layout[1][1], "mesecons:test_receptor_off")
|
||
|
mesecon.receptor_off(layout[1][1], mesecon.rules.alldirs)
|
||
|
mineunit:execute_globalstep() -- Execute receptor_off and activate/change actions
|
||
|
mineunit:execute_globalstep() -- Execute deactivate/change actions
|
||
|
assert.equal("mesecons:test_conductor_on", world.get_node(layout[3][1]).name)
|
||
|
assert.equal(tonumber("10000001", 2), world.get_node(layout[4][1]).param2)
|
||
|
assert.equal(tonumber("00000000", 2), world.get_node(layout[5][1]).param2)
|
||
|
assert.equal(tonumber("10000100", 2), world.get_node(layout[6][1]).param2)
|
||
|
|
||
|
world.set_node(layout[2][1], "mesecons:test_receptor_off")
|
||
|
mesecon.receptor_off(layout[2][1], mesecon.rules.alldirs)
|
||
|
mineunit:execute_globalstep() -- Execute receptor_off action
|
||
|
mineunit:execute_globalstep() -- Execute deactivate/change actions
|
||
|
assert.equal("mesecons:test_conductor_off", world.get_node(layout[3][1]).name)
|
||
|
assert.equal(tonumber("00000000", 2), world.get_node(layout[4][1]).param2)
|
||
|
assert.equal(tonumber("00000000", 2), world.get_node(layout[5][1]).param2)
|
||
|
assert.equal(tonumber("00000000", 2), world.get_node(layout[6][1]).param2)
|
||
|
end)
|
||
|
end)
|
||
|
|
||
|
describe("rotation", function()
|
||
|
local layout = {
|
||
|
{{x = 0, y = 0, z = 0}, "mesecons:test_receptor_off"},
|
||
|
{{x = 1, y = 0, z = 0}, {name = "mesecons:test_conductor_rot_off", param2 = 0}},
|
||
|
{{x = 0, y = 0, z = 1}, {name = "mesecons:test_conductor_rot_off", param2 = 1}},
|
||
|
{{x = -1, y = 0, z = 0}, {name = "mesecons:test_conductor_rot_off", param2 = 2}},
|
||
|
{{x = 0, y = 0, z = -1}, {name = "mesecons:test_conductor_rot_off", param2 = 3}},
|
||
|
}
|
||
|
|
||
|
before_each(function()
|
||
|
for _, entry in ipairs(layout) do
|
||
|
world.set_node(entry[1], entry[2])
|
||
|
end
|
||
|
end)
|
||
|
|
||
|
after_each(function()
|
||
|
mesecon._test_reset()
|
||
|
world.clear()
|
||
|
end)
|
||
|
|
||
|
it("works", function()
|
||
|
world.set_node(layout[1][1], "mesecons:test_receptor_on")
|
||
|
mesecon.receptor_on(layout[1][1], mesecon.rules.alldirs)
|
||
|
mineunit:execute_globalstep() -- Execute receptor_on action
|
||
|
assert.equal("mesecons:test_conductor_rot_on", world.get_node(layout[2][1]).name)
|
||
|
assert.equal("mesecons:test_conductor_rot_on", world.get_node(layout[3][1]).name)
|
||
|
assert.equal("mesecons:test_conductor_rot_on", world.get_node(layout[4][1]).name)
|
||
|
assert.equal("mesecons:test_conductor_rot_on", world.get_node(layout[5][1]).name)
|
||
|
end)
|
||
|
end)
|
||
|
|
||
|
describe("multiconductor", function()
|
||
|
local layout = {
|
||
|
{{x = 1, y = 0, z = 0}, "mesecons:test_receptor_off"},
|
||
|
{{x = 0, y = 1, z = 0}, "mesecons:test_receptor_off"},
|
||
|
{{x = 0, y = 0, z = 1}, "mesecons:test_receptor_off"},
|
||
|
{{x = 0, y = 0, z = 0}, "mesecons:test_multiconductor_off"},
|
||
|
}
|
||
|
|
||
|
before_each(function()
|
||
|
world.layout(layout)
|
||
|
end)
|
||
|
|
||
|
after_each(function()
|
||
|
world.clear()
|
||
|
mesecon._test_reset()
|
||
|
end)
|
||
|
|
||
|
it("separates its subparts", function()
|
||
|
world.set_node(layout[1][1], "mesecons:test_receptor_on")
|
||
|
mesecon.receptor_on(layout[1][1], mesecon.rules.alldirs)
|
||
|
mineunit:execute_globalstep() -- Execute receptor_on action
|
||
|
assert.equal("mesecons:test_multiconductor_001", world.get_node(layout[4][1]).name)
|
||
|
|
||
|
world.set_node(layout[2][1], "mesecons:test_receptor_on")
|
||
|
mesecon.receptor_on(layout[2][1], mesecon.rules.alldirs)
|
||
|
mineunit:execute_globalstep() -- Execute receptor_on action
|
||
|
assert.equal("mesecons:test_multiconductor_011", world.get_node(layout[4][1]).name)
|
||
|
|
||
|
world.set_node(layout[3][1], "mesecons:test_receptor_on")
|
||
|
mesecon.receptor_on(layout[3][1], mesecon.rules.alldirs)
|
||
|
mineunit:execute_globalstep() -- Execute receptor_on action
|
||
|
assert.equal("mesecons:test_multiconductor_on", world.get_node(layout[4][1]).name)
|
||
|
end)
|
||
|
|
||
|
it("loops through itself", function()
|
||
|
-- Make a loop.
|
||
|
world.set_node({x = 0, y = -1, z = 0}, "mesecons:test_conductor_off")
|
||
|
world.set_node({x = -1, y = -1, z = 0}, "mesecons:test_conductor_off")
|
||
|
world.set_node({x = -1, y = 0, z = 0}, "mesecons:test_conductor_off")
|
||
|
|
||
|
world.set_node(layout[1][1], "mesecons:test_receptor_on")
|
||
|
mesecon.receptor_on(layout[1][1], mesecon.rules.alldirs)
|
||
|
mineunit:execute_globalstep() -- Execute receptor_on action
|
||
|
assert.equal("mesecons:test_multiconductor_101", world.get_node(layout[4][1]).name)
|
||
|
end)
|
||
|
end)
|