xt/html; charset=UTF-8 Last-Modified: Thu, 22 Oct 2026 06:49:22 GMT Expires: Sun, 19 Oct 2036 06:49:22 GMT Record signal aspect to avoid excessive get_aspect calls; report testing coverage - advtrains.git - Advtrains mod for minetest.
aboutsummaryrefslogtreecommitdiff
path: root/advtrains_interlocking/database.lua
diff options
context:
space:
mode:
authorY. Wang <yw05@forksworld.de>2022-05-06 21:36:21 +0200
committerY. Wang <yw05@forksworld.de>2023-03-23 20:06:02 +0100
commit220563012d2aa2c753c791fa9faa38346f1355a5 (patch)
tree7f372b3b3ba28b7e235c87a6a5000e1233fdf6e2 /advtrains_interlocking/database.lua
parent9d5205e7e2a9ad5ed28e84776a5ab1186963a855 (diff)
Record signal aspect to avoid excessive get_aspect calls; report testing coverage
Diffstat (limited to 'advtrains_interlocking/database.lua')
-rw-r--r--advtrains_interlocking/database.lua4
1 files changed, 4 insertions, 0 deletions
diff --git a/advtrains_interlocking/database.lua b/advtrains_interlocking/database.lua
index 6787c50..efa5eb8 100644
--- a/advtrains_interlocking/database.lua
+++ b/advtrains_interlocking/database.lua
@@ -131,6 +131,9 @@ function ildb.load(data)
if data.npr_rails then
advtrains.interlocking.npr_rails = data.npr_rails
end
+ if data.supposed_aspects then
+ advtrains.interlocking.load_supposed_aspects(data.supposed_aspects)
+ end
--COMPATIBILITY to Signal aspect format
-- TODO remove in time...
@@ -173,6 +176,7 @@ function ildb.save()
rs_callbacks = advtrains.interlocking.route.rte_callbacks,
influence_points = influence_points,
npr_rails = advtrains.interlocking.npr_rails,
+ supposed_aspects = advtrains.interlocking.save_supposed_aspects(),
}
end
/span>("signal_api") sourcefile("signal_aspect_accessors") fixture("../../demosignals") minetest.register_node("advtrains_interlocking:signal_sign", { advtrains = { get_aspcet = function() return {main = 19} end } }) local D = advtrains.distant local I = advtrains.interlocking local A = I.aspect local stub_aspect_t1 = { free = {main = -1}, slow = {main = 6}, danger = {main = 0, shunt = false}, } for k, v in pairs(stub_aspect_t1) do stub_aspect_t1[k] = A(v) end local stub_pos_t1 = {} for i = 1, 4 do stub_pos_t1[i] = {x = 1, y = 0, z = i} end world.layout { {stub_pos_t1[1], "advtrains_interlocking:ds_danger"}, {stub_pos_t1[2], "advtrains_interlocking:ds_slow"}, {stub_pos_t1[3], "advtrains_interlocking:ds_free"}, {stub_pos_t1[4], "advtrains_interlocking:signal_sign"}, } describe("API for supposed signal aspects", function() it("should load and save data properly", function() local tbl = {_foo = {}} I.load_supposed_aspects(tbl) assert.same(tbl, I.save_supposed_aspects()) end) it("should set and get signals properly", function () local pos = stub_pos_t1[2] local asp = stub_aspect_t1.slow local newasp = A{ main = math.random(1,5) } assert.equal(asp, I.signal_get_aspect(pos)) I.signal_set_aspect(pos, newasp) assert.equal(newasp, I.signal_get_aspect(pos)) assert.equal(asp, I.signal_get_real_aspect(pos)) I.signal_set_aspect(pos, asp) end) end) describe("Distant signaling", function() it("should assign distant signals and set the distant aspect correspondingly", function() for i = 1, 2 do D.assign(stub_pos_t1[i], stub_pos_t1[i+1]) end assert.equal(stub_aspect_t1.danger, I.signal_get_aspect(stub_pos_t1[1])) assert.equal(A{main = 6, dst = 0}, I.signal_get_aspect(stub_pos_t1[2])) assert.equal(A{main = -1, dst = 6}, I.signal_get_aspect(stub_pos_t1[3])) end) it("should report assignments properly", function() assert.same({stub_pos_t1[1], "manual"}, {D.get_main(stub_pos_t1[2])}) assert.same({[advtrains.encode_pos(stub_pos_t1[3])] = "manual"}, D.get_dst(stub_pos_t1[2])) end) it("should update distant aspects automatically", function() I.signal_set_aspect(stub_pos_t1[2], {main = 2, dst = -1}) assert.equal(A{main = 2, dst = 0}, I.signal_get_aspect(stub_pos_t1[2])) assert.equal(A{main = -1, dst = 2}, I.signal_get_aspect(stub_pos_t1[3])) end) it("should unassign signals when one is removed", function() world.set_node(stub_pos_t1[2], "air") assert.same({}, D.get_dst(stub_pos_t1[1])) assert.same({}, {D.get_main(stub_pos_t1[3])}) assert.same(stub_aspect_t1.free, I.signal_get_aspect(stub_pos_t1[3])) end) it("should reject signal signs", function() D.assign(stub_pos_t1[1], stub_pos_t1[4]) assert.same({}, D.get_dst(stub_pos_t1[1])) assert.same({}, {D.get_main(stub_pos_t1[4])}) D.assign(stub_pos_t1[4], stub_pos_t1[1]) assert.same({}, D.get_dst(stub_pos_t1[4])) assert.same({}, {D.get_main(stub_pos_t1[1])}) end) end)