summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source
diff options
context:
space:
mode:
Diffstat (limited to 'crawl-ref/source')
-rw-r--r--crawl-ref/source/dat/clua/iter.lua4
-rw-r--r--crawl-ref/source/dat/clua/test.lua11
-rw-r--r--crawl-ref/source/test/rune-gen.lua31
3 files changed, 44 insertions, 2 deletions
diff --git a/crawl-ref/source/dat/clua/iter.lua b/crawl-ref/source/dat/clua/iter.lua
index e4d1409781..8adf548a15 100644
--- a/crawl-ref/source/dat/clua/iter.lua
+++ b/crawl-ref/source/dat/clua/iter.lua
@@ -338,7 +338,7 @@ function iter.stack_search (coord, term, extra)
local stack = dgn.items_at(_x, _y)
if #stack == 0 then
- error("no stack at " .. _x .. "/" .. _y)
+ return nil
end
for _, item in ipairs(stack) do
@@ -347,7 +347,7 @@ function iter.stack_search (coord, term, extra)
end
end
- return false
+ return nil
end
function iter.stack_destroy(coord, extra)
diff --git a/crawl-ref/source/dat/clua/test.lua b/crawl-ref/source/dat/clua/test.lua
index 404b2e1d1f..22a4005d20 100644
--- a/crawl-ref/source/dat/clua/test.lua
+++ b/crawl-ref/source/dat/clua/test.lua
@@ -20,4 +20,15 @@ function test.regenerate_level(place)
debug.flush_map_memory()
dgn.reset_level()
debug.generate_level()
+end
+
+function test.level_contains_item(item)
+ for y = 1, dgn.GYM - 2 do
+ for x = 1, dgn.GXM - 2 do
+ if iter.stack_search(x, y, item) then
+ return true
+ end
+ end
+ end
+ return false
end \ No newline at end of file
diff --git a/crawl-ref/source/test/rune-gen.lua b/crawl-ref/source/test/rune-gen.lua
new file mode 100644
index 0000000000..ef81d22b4e
--- /dev/null
+++ b/crawl-ref/source/test/rune-gen.lua
@@ -0,0 +1,31 @@
+local niters = 100
+
+local function test_item_level(place, item, nlevels)
+ debug.goto_place(place)
+ for i = 1, nlevels do
+ crawl.mesclr()
+ crawl.mpr(place .. " rune test " .. i .. " of " .. nlevels)
+ test.regenerate_level()
+ test.map_assert(test.level_contains_item(item),
+ "No " .. item .. " created at " .. place)
+ end
+end
+
+local function test_item_places(nlevels, level_items)
+ for _, place in ipairs(level_items) do
+ test_item_level(place[1], place[2], nlevels)
+ end
+end
+
+test_item_places(niters,
+ { { "Snake:$", "serpentine rune" },
+ { "Shoal:$", "barnacled rune" },
+ { "Swamp:$", "decaying rune" },
+ { "Slime:$", "slimy rune" },
+ { "Vault:$", "silver rune" },
+ { "Coc:$", "icy rune" },
+ { "Tar:$", "bone rune" },
+ { "Dis:$", "iron rune" },
+ { "Geh:$", "obsidian rune" },
+ { "Tomb:$", "golden rune" },
+ { "Zot:$", "Orb of Zot" } })