test(maps): maps_t2-t7 slot-resolution proofs for cell-tile
Proves that previously-unreachable atlas slots become reachable via the cell-tile material path: slot 0 isolated (t3), slot 1 end with correct rotations (t4), slot 4 straight (t5), slot 5 tee_open (t6), slot 8 cross_open (t7). Upgrades write_test.map.json to schema_version 3 with material and vertices fields on surface so cell_material_slot + set_vertex resolve correctly in the tests. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
89
init.lua
89
init.lua
@@ -388,6 +388,95 @@ function M.run_tests(ctx)
|
||||
engine.test.assert(not ok_lay,
|
||||
"maps_t1: set_cell_material rejects unknown layer")
|
||||
|
||||
-- =====================================================================
|
||||
-- maps_t2-t7: Cell-Tile slot-resolution proofs
|
||||
-- =====================================================================
|
||||
-- write_test is 4x4. Use v2_size for w/h reference (already declared earlier).
|
||||
|
||||
-- maps_t2: cell_material_slot returns a non-nil record for a
|
||||
-- cells_material cell.
|
||||
-- Clear the surface layer's cells_material first.
|
||||
for cy = 0, v2_size.h - 1 do
|
||||
for cx = 0, v2_size.w - 1 do
|
||||
maps.set_cell_material("surface", cx, cy, false)
|
||||
end
|
||||
end
|
||||
maps.set_cell_material("surface", 1, 1, true)
|
||||
local rec = maps.cell_material_slot("surface", 1, 1)
|
||||
engine.test.assert(rec ~= nil,
|
||||
"maps_t2: cell_material_slot returns non-nil for cell-tile material")
|
||||
|
||||
-- maps_t3: isolated slot reachable for the first time.
|
||||
-- Clear cells_material AND vertices, place an isolated paint at (2, 2).
|
||||
for cy = 0, v2_size.h - 1 do
|
||||
for cx = 0, v2_size.w - 1 do
|
||||
maps.set_cell_material("surface", cx, cy, false)
|
||||
maps.set_vertex("surface", cx, cy, false)
|
||||
end
|
||||
maps.set_vertex("surface", v2_size.w, cy, false)
|
||||
end
|
||||
for cx = 0, v2_size.w do maps.set_vertex("surface", cx, v2_size.h, false) end
|
||||
maps.set_cell_material("surface", 2, 2, true)
|
||||
local r3 = maps.cell_material_slot("surface", 2, 2)
|
||||
engine.test.equals(r3.slot, 0, "maps_t3: slot 0 isolated reachable for first time")
|
||||
engine.test.equals(r3.rot, 0, "maps_t3: isolated rot=0")
|
||||
|
||||
-- maps_t4: two adjacent cells → two end-caps facing each other.
|
||||
maps.set_cell_material("surface", 1, 2, true)
|
||||
maps.set_cell_material("surface", 2, 2, true)
|
||||
local r4a = maps.cell_material_slot("surface", 1, 2)
|
||||
local r4b = maps.cell_material_slot("surface", 2, 2)
|
||||
engine.test.equals(r4a.slot, 1, "maps_t4: left cell is end (slot 1)")
|
||||
engine.test.equals(r4a.rot, 1, "maps_t4: left end points east (rot 1)")
|
||||
engine.test.equals(r4b.slot, 1, "maps_t4: right cell is end (slot 1)")
|
||||
engine.test.equals(r4b.rot, 3, "maps_t4: right end points west (rot 3)")
|
||||
|
||||
-- maps_t5: 3-cell line → middle is straight.
|
||||
maps.set_cell_material("surface", 0, 2, true)
|
||||
-- already painted (1,2) and (2,2) from t4
|
||||
local r5 = maps.cell_material_slot("surface", 1, 2)
|
||||
engine.test.equals(r5.slot, 4, "maps_t5: middle of 3-cell line is straight (slot 4)")
|
||||
-- rot may be 1 or 3 (horizontal canonical); accept both
|
||||
engine.test.assert(r5.rot == 1 or r5.rot == 3,
|
||||
"maps_t5: straight is horizontal (rot 1 or 3)")
|
||||
|
||||
-- Reset surface for t6.
|
||||
for cx = 0, v2_size.w - 1 do
|
||||
maps.set_cell_material("surface", cx, 2, false)
|
||||
end
|
||||
|
||||
-- maps_t6: T-junction at (1, 2) with arms W (0, 2), E (2, 2), S (1, 3).
|
||||
-- write_test is 4x4 so (1, 3) is the last row.
|
||||
maps.set_cell_material("surface", 0, 2, true)
|
||||
maps.set_cell_material("surface", 1, 2, true)
|
||||
maps.set_cell_material("surface", 2, 2, true)
|
||||
maps.set_cell_material("surface", 1, 3, true)
|
||||
local r6 = maps.cell_material_slot("surface", 1, 2)
|
||||
engine.test.equals(r6.slot, 5, "maps_t6: T-junction is tee_open (slot 5)")
|
||||
|
||||
-- Reset for t7.
|
||||
for cy = 0, v2_size.h - 1 do
|
||||
for cx = 0, v2_size.w - 1 do
|
||||
maps.set_cell_material("surface", cx, cy, false)
|
||||
end
|
||||
end
|
||||
|
||||
-- maps_t7: 4-cell "+" at (1, 1) with N (1, 0), E (2, 1), S (1, 2), W (0, 1).
|
||||
maps.set_cell_material("surface", 1, 1, true)
|
||||
maps.set_cell_material("surface", 1, 0, true)
|
||||
maps.set_cell_material("surface", 2, 1, true)
|
||||
maps.set_cell_material("surface", 1, 2, true)
|
||||
maps.set_cell_material("surface", 0, 1, true)
|
||||
local r7 = maps.cell_material_slot("surface", 1, 1)
|
||||
engine.test.equals(r7.slot, 8, "maps_t7: cross is cross_open (slot 8) — second previously-unreachable slot reachable")
|
||||
|
||||
-- Reset surface fully so later tests (if any added) start clean.
|
||||
for cy = 0, v2_size.h - 1 do
|
||||
for cx = 0, v2_size.w - 1 do
|
||||
maps.set_cell_material("surface", cx, cy, false)
|
||||
end
|
||||
end
|
||||
|
||||
engine.exit(engine.test.failures())
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user