1 describe("Lua star", function()
3 -- start is always top left (1,1)
4 -- goal is always bottom right (10, 10)
5 local start = { x = 1, y = 1 }
6 local goal = { x = 10, y = 10 }
9 -- define some test maps (10 x 10)
24 local openmapSolution = {
50 local simplemapSolution = {
83 local complexmapSolution = {
124 local unsolvablemap = [[
137 -- convert a string map into a table
138 local function makemap(template)
140 template:gsub(".", function(c)
141 if c == "0" or c == "1" then
147 -- get the value at position xy on a map
148 local function mapTileIsOpen(x, y)
149 return map[ ((y-1) * 10) + x ] == "0"
152 local function printSolution(path)
153 print(#path, "points")
154 for i, v in ipairs(path) do
155 print(string.format("{ x = %d, y = %d },", v.x, v.y))
160 for _, p in ipairs(path) do
161 if p.x == w and p.y == h then
177 it("find a path with no obstacles", function()
179 local luastar = require("lua-star")
181 local path = luastar:find(mapsize, mapsize, start, goal, mapTileIsOpen)
182 --printSolution(path)
183 assert.are.equal(10, #path)
184 assert.are.same(openmapSolution, path)
188 it("find a path on a simple map", function()
190 local luastar = require("lua-star")
192 local path = luastar:find(mapsize, mapsize, start, goal, mapTileIsOpen)
193 --printSolution(path)
194 assert.are.equal(17, #path)
195 assert.are.same(simplemapSolution, path)
199 it("find a path on a complex map", function()
201 local luastar = require("lua-star")
203 local path = luastar:find(mapsize, mapsize, start, goal, mapTileIsOpen)
204 --printSolution(path)
205 assert.are.equal(38, #path)
206 assert.are.same(complexmapSolution, path)
210 it("find no path", function()
212 local luastar = require("lua-star")
213 makemap(unsolvablemap)
214 local path = luastar:find(mapsize, mapsize, start, goal, mapTileIsOpen)
215 assert.is_false(path)
219 it("does not cache paths by default", function()
221 local luastar = require("lua-star")
223 local path = luastar:find(mapsize, mapsize, start, goal, mapTileIsOpen)
224 local samepath = luastar:find(mapsize, mapsize, start, goal, mapTileIsOpen)
225 assert.is_not.equal(path, samepath)
229 it("caches paths", function()
231 local luastar = require("lua-star")
233 local path = luastar:find(mapsize, mapsize, start, goal, mapTileIsOpen, true)
234 local samepath = luastar:find(mapsize, mapsize, start, goal, mapTileIsOpen, true)
235 assert.are.equal(path, samepath)
239 it("clears cached paths", function()
241 local luastar = require("lua-star")
243 local path = luastar:find(mapsize, mapsize, start, goal, mapTileIsOpen, true)
244 luastar:clearCached()
245 assert.is_nil(luastar.cache)