diff --git a/init.lua b/init.lua index d24a44d..abe1ee8 100644 --- a/init.lua +++ b/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 diff --git a/maps/write_test.map.json b/maps/write_test.map.json index d0a047c..dd6ee4a 100644 --- a/maps/write_test.map.json +++ b/maps/write_test.map.json @@ -1,10 +1,18 @@ { - "schema_version": 2, + "schema_version": 3, "id": "write_test", "size": { "w": 4, "h": 4 }, "atlases": ["demo_tilemap"], "layers": { "surface": { + "material": "demo_tilemap", + "vertices": [ + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 + ], "tiles": [ 0, 0, 0, 0, 0, 0, 0, 0,