UNPKG

peng-pathfinding

Version:

Comprehensive pathfinding library for grid based games

2 lines 59.7 kB
<!doctype html> <html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><meta name="viewport" content="width=device-width, initial-scale=1"/><title>Mochawesome Report</title><link rel="stylesheet" href="assets\app.css"/></head><body data-raw="{&quot;stats&quot;:{&quot;suites&quot;:19,&quot;tests&quot;:57,&quot;passes&quot;:57,&quot;pending&quot;:0,&quot;failures&quot;:0,&quot;start&quot;:&quot;2018-11-16T03:45:01.201Z&quot;,&quot;end&quot;:&quot;2018-11-16T03:45:01.251Z&quot;,&quot;duration&quot;:50,&quot;testsRegistered&quot;:57,&quot;passPercent&quot;:100,&quot;pendingPercent&quot;:0,&quot;other&quot;:0,&quot;hasOther&quot;:false,&quot;skipped&quot;:0,&quot;hasSkipped&quot;:false,&quot;passPercentClass&quot;:&quot;success&quot;,&quot;pendingPercentClass&quot;:&quot;danger&quot;},&quot;suites&quot;:{&quot;uuid&quot;:&quot;91504e35-0e0e-447f-8764-50c576506b40&quot;,&quot;title&quot;:&quot;&quot;,&quot;fullFile&quot;:&quot;&quot;,&quot;file&quot;:&quot;&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;8f9023c1-02a9-43c4-b86d-1511093ea491&quot;,&quot;title&quot;:&quot;Grid&quot;,&quot;fullFile&quot;:&quot;C:\\Users\\Administrator\\Desktop\\PathFinding.js-master\\test\\Grid.js&quot;,&quot;file&quot;:&quot;\\test\\Grid.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[],&quot;suites&quot;:[{&quot;uuid&quot;:&quot;f639bcdb-ac0d-40e5-83c2-4461703a68b9&quot;,&quot;title&quot;:&quot;generate without matrix&quot;,&quot;fullFile&quot;:&quot;C:\\Users\\Administrator\\Desktop\\PathFinding.js-master\\test\\Grid.js&quot;,&quot;file&quot;:&quot;\\test\\Grid.js&quot;,&quot;beforeHooks&quot;:[{&quot;title&quot;:&quot;\&quot;before each\&quot; hook&quot;,&quot;fullTitle&quot;:&quot;Grid generate without matrix \&quot;before each\&quot; hook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;pass&quot;:false,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;width = 10;\nheight = 20;\ngrid = new Grid(width, height);&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;ac8bdd86-5a1a-4eed-9d2c-ab634b9c68ec&quot;,&quot;isHook&quot;:true,&quot;skipped&quot;:false}],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;should have correct size&quot;,&quot;fullTitle&quot;:&quot;Grid generate without matrix should have correct size&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;grid.width.should.equal(width);\ngrid.height.should.equal(height);\ngrid.nodes.length.should.equal(height);\nfor (var i = 0; i &lt; height; ++i) {\n grid.nodes[i].length.should.equal(width); \n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;fa4f9131-4968-49fc-b554-3d7e4e173e6c&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;should set all nodes&#x27; walkable attribute&quot;,&quot;fullTitle&quot;:&quot;Grid generate without matrix should set all nodes&#x27; walkable attribute&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;for (var i = 0; i &lt; height; ++i) {\n for (var j = 0; j &lt; width; ++j) {\n grid.isWalkableAt(j, i).should.be.true;\n }\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;edf940cc-3874-4f4b-bfd5-fcd7e421672b&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;fa4f9131-4968-49fc-b554-3d7e4e173e6c&quot;,&quot;edf940cc-3874-4f4b-bfd5-fcd7e421672b&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;cb1a939f-71db-41ec-acb1-2c721e88a2c8&quot;,&quot;title&quot;:&quot;generate with matrix&quot;,&quot;fullFile&quot;:&quot;C:\\Users\\Administrator\\Desktop\\PathFinding.js-master\\test\\Grid.js&quot;,&quot;file&quot;:&quot;\\test\\Grid.js&quot;,&quot;beforeHooks&quot;:[{&quot;title&quot;:&quot;\&quot;before each\&quot; hook&quot;,&quot;fullTitle&quot;:&quot;Grid generate with matrix \&quot;before each\&quot; hook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;pass&quot;:false,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;matrix = [\n [1, 0, 0, 1],\n [0, 1, 0, 0],\n [0, 1, 0, 0],\n [0, 0, 0, 0],\n [1, 0, 0, 1],\n];\nheight = matrix.length;\nwidth = matrix[0].length;\ngrid = new Grid(width, height, matrix);&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;51094b8e-cdc3-46d3-9a3b-17e6d70c76e1&quot;,&quot;isHook&quot;:true,&quot;skipped&quot;:false}],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;should have correct size&quot;,&quot;fullTitle&quot;:&quot;Grid generate with matrix should have correct size&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;grid.width.should.equal(width);\ngrid.height.should.equal(height);\ngrid.nodes.length.should.equal(height);\nfor (var i = 0; i &lt; height; ++i) {\n grid.nodes[i].length.should.equal(width); \n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;f5e87b5b-89f3-4c43-8378-27e0a5619b76&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;should initiate all nodes&#x27; walkable attribute&quot;,&quot;fullTitle&quot;:&quot;Grid generate with matrix should initiate all nodes&#x27; walkable attribute&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;enumPos(function(x, y, g) {\n if (matrix[y][x]) {\n g.isWalkableAt(x, y).should.be.false;\n } else {\n g.isWalkableAt(x, y).should.be.true;\n }\n});&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;c551fe42-9e3a-4637-bb4c-73c4936ba514&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;should be able to set nodes&#x27; walkable attribute&quot;,&quot;fullTitle&quot;:&quot;Grid generate with matrix should be able to set nodes&#x27; walkable attribute&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;enumPos(function(x, y) {\n grid.setWalkableAt(x, y, false); \n});\nenumPos(function(x, y) {\n grid.isWalkableAt(x, y).should.be.false;\n})\nenumPos(function(x, y) {\n grid.setWalkableAt(x, y, true); \n});\nenumPos(function(x, y) {\n grid.isWalkableAt(x, y).should.be.true;\n})&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;efb37922-ad44-4993-b11d-d5e50ff8f2bc&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;should return correct answer for position validity query&quot;,&quot;fullTitle&quot;:&quot;Grid generate with matrix should return correct answer for position validity query&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;var asserts = [\n [0, 0, true],\n [0, height - 1, true],\n [width - 1, 0, true],\n [width - 1, height - 1, true],\n [-1, -1, false],\n [0, -1, false],\n [-1, 0, false],\n [0, height, false],\n [width, 0, false],\n [width, height, false],\n];\nasserts.forEach(function(v, i, a) {\n grid.isInside(v[0], v[1]).should.equal(v[2]);\n});&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;16fc74d5-f4d5-4795-8102-822f45453519&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;should return correct neighbors&quot;,&quot;fullTitle&quot;:&quot;Grid generate with matrix should return correct neighbors&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;grid.getNeighbors(grid.nodes[1][0], DiagonalMovement.Never).should.eql([ grid.nodes[2][0] ]);\nvar cmp = function(a, b) {\n return a.x * 100 + a.y - b.x * 100 - b.y;\n};\ngrid.getNeighbors(grid.nodes[0][2], DiagonalMovement.IfAtMostOneObstacle).sort(cmp).should.eql([\n grid.nodes[0][1], grid.nodes[1][2], grid.nodes[1][3]\n].sort(cmp))&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;d02adc6f-76db-4ae9-a0e7-4e9bc7e3aacb&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;f5e87b5b-89f3-4c43-8378-27e0a5619b76&quot;,&quot;c551fe42-9e3a-4637-bb4c-73c4936ba514&quot;,&quot;efb37922-ad44-4993-b11d-d5e50ff8f2bc&quot;,&quot;16fc74d5-f4d5-4795-8102-822f45453519&quot;,&quot;d02adc6f-76db-4ae9-a0e7-4e9bc7e3aacb&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:2,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;a9be21ba-f3c7-4025-bdcc-92c1ce29dbb4&quot;,&quot;title&quot;:&quot;generate with matrix and no width or height&quot;,&quot;fullFile&quot;:&quot;C:\\Users\\Administrator\\Desktop\\PathFinding.js-master\\test\\Grid.js&quot;,&quot;file&quot;:&quot;\\test\\Grid.js&quot;,&quot;beforeHooks&quot;:[{&quot;title&quot;:&quot;\&quot;before each\&quot; hook&quot;,&quot;fullTitle&quot;:&quot;Grid generate with matrix and no width or height \&quot;before each\&quot; hook&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;pass&quot;:false,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;matrix = [\n [1, 0, 0, 1],\n [0, 1, 0, 0],\n [0, 1, 0, 0],\n [0, 0, 0, 0],\n [1, 0, 0, 1],\n];\ngrid = new Grid(matrix);&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;640c6f72-7f68-4f17-b99a-a922abacc8e8&quot;,&quot;isHook&quot;:true,&quot;skipped&quot;:false}],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;should have correct size&quot;,&quot;fullTitle&quot;:&quot;Grid generate with matrix and no width or height should have correct size&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;var height = matrix.length;\nvar width = matrix[0].length;\ngrid.width.should.equal(width);\ngrid.height.should.equal(height);\ngrid.nodes.length.should.equal(height);\nfor (var i = 0; i &lt; height; ++i) {\n grid.nodes[i].length.should.equal(width);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;2eedbc49-708e-44c8-b1fc-afcfb7a9e0b8&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;2eedbc49-708e-44c8-b1fc-afcfb7a9e0b8&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000}],&quot;passes&quot;:[],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;7eaf9bde-75e0-4dca-933c-937a2292aea6&quot;,&quot;title&quot;:&quot;AStar&quot;,&quot;fullFile&quot;:&quot;C:\\Users\\Administrator\\Desktop\\PathFinding.js-master\\test\\PathTest.js&quot;,&quot;file&quot;:&quot;\\test\\PathTest.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;should solve maze 1&quot;,&quot;fullTitle&quot;:&quot;AStar should solve maze 1&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;29c2a46b-4cab-4a07-856b-93a017cd0f84&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;should solve maze 2&quot;,&quot;fullTitle&quot;:&quot;AStar should solve maze 2&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;b3a08bbb-0efd-4b50-9dba-c39187789621&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;should solve maze 3&quot;,&quot;fullTitle&quot;:&quot;AStar should solve maze 3&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;331eb905-ed38-4768-93d4-c3b2174a15f2&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;should solve maze 4&quot;,&quot;fullTitle&quot;:&quot;AStar should solve maze 4&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;984929d8-02ba-4db0-81a3-e6c46eef0d81&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;29c2a46b-4cab-4a07-856b-93a017cd0f84&quot;,&quot;b3a08bbb-0efd-4b50-9dba-c39187789621&quot;,&quot;331eb905-ed38-4768-93d4-c3b2174a15f2&quot;,&quot;984929d8-02ba-4db0-81a3-e6c46eef0d81&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;7682f499-03c3-4530-bcbc-afa04ac27ecb&quot;,&quot;title&quot;:&quot;BreadthFirst&quot;,&quot;fullFile&quot;:&quot;C:\\Users\\Administrator\\Desktop\\PathFinding.js-master\\test\\PathTest.js&quot;,&quot;file&quot;:&quot;\\test\\PathTest.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;should solve maze 1&quot;,&quot;fullTitle&quot;:&quot;BreadthFirst should solve maze 1&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;22baf471-4f08-4cb9-aa6c-d6ae480d9fb5&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;should solve maze 2&quot;,&quot;fullTitle&quot;:&quot;BreadthFirst should solve maze 2&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;4fb1edd8-7199-4cac-a75f-6c6231ab3f4d&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;should solve maze 3&quot;,&quot;fullTitle&quot;:&quot;BreadthFirst should solve maze 3&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;7153ee36-bab4-427d-b9f8-6c7af273eccd&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;should solve maze 4&quot;,&quot;fullTitle&quot;:&quot;BreadthFirst should solve maze 4&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;e1796b0f-57c0-431a-8a72-a7e9f80e8932&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;22baf471-4f08-4cb9-aa6c-d6ae480d9fb5&quot;,&quot;4fb1edd8-7199-4cac-a75f-6c6231ab3f4d&quot;,&quot;7153ee36-bab4-427d-b9f8-6c7af273eccd&quot;,&quot;e1796b0f-57c0-431a-8a72-a7e9f80e8932&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;73a23ecb-57c2-4e56-85c2-7d6793a29956&quot;,&quot;title&quot;:&quot;Dijkstra&quot;,&quot;fullFile&quot;:&quot;C:\\Users\\Administrator\\Desktop\\PathFinding.js-master\\test\\PathTest.js&quot;,&quot;file&quot;:&quot;\\test\\PathTest.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;should solve maze 1&quot;,&quot;fullTitle&quot;:&quot;Dijkstra should solve maze 1&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;27d3799f-dc43-45e6-a0fc-2bdc32bb44da&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;should solve maze 2&quot;,&quot;fullTitle&quot;:&quot;Dijkstra should solve maze 2&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;00af45b4-3034-4e07-9605-7ff70f24cc5b&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;should solve maze 3&quot;,&quot;fullTitle&quot;:&quot;Dijkstra should solve maze 3&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;a0ffa901-8f42-4443-952a-beb4f4b312ab&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;should solve maze 4&quot;,&quot;fullTitle&quot;:&quot;Dijkstra should solve maze 4&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;447259c4-a074-448e-842f-97916e06017e&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;27d3799f-dc43-45e6-a0fc-2bdc32bb44da&quot;,&quot;00af45b4-3034-4e07-9605-7ff70f24cc5b&quot;,&quot;a0ffa901-8f42-4443-952a-beb4f4b312ab&quot;,&quot;447259c4-a074-448e-842f-97916e06017e&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:1,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;4ee4aa52-c4ca-4710-b3df-76c34a7bfabb&quot;,&quot;title&quot;:&quot;BiBreadthFirst&quot;,&quot;fullFile&quot;:&quot;C:\\Users\\Administrator\\Desktop\\PathFinding.js-master\\test\\PathTest.js&quot;,&quot;file&quot;:&quot;\\test\\PathTest.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;should solve maze 1&quot;,&quot;fullTitle&quot;:&quot;BiBreadthFirst should solve maze 1&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;cf92e4e3-dee0-47b0-8574-1dc05db25583&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;should solve maze 2&quot;,&quot;fullTitle&quot;:&quot;BiBreadthFirst should solve maze 2&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;de2ec2e4-e30e-4131-b8dc-e6cdc8cdb050&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;should solve maze 3&quot;,&quot;fullTitle&quot;:&quot;BiBreadthFirst should solve maze 3&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;fb7ecfe8-46fb-461e-b838-442ebbb059f4&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;should solve maze 4&quot;,&quot;fullTitle&quot;:&quot;BiBreadthFirst should solve maze 4&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;107b4387-9d11-484d-9725-51ad7936702e&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;cf92e4e3-dee0-47b0-8574-1dc05db25583&quot;,&quot;de2ec2e4-e30e-4131-b8dc-e6cdc8cdb050&quot;,&quot;fb7ecfe8-46fb-461e-b838-442ebbb059f4&quot;,&quot;107b4387-9d11-484d-9725-51ad7936702e&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;29cdd41d-0e7f-402f-af40-67eb3799785c&quot;,&quot;title&quot;:&quot;BiDijkstra&quot;,&quot;fullFile&quot;:&quot;C:\\Users\\Administrator\\Desktop\\PathFinding.js-master\\test\\PathTest.js&quot;,&quot;file&quot;:&quot;\\test\\PathTest.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;should solve maze 1&quot;,&quot;fullTitle&quot;:&quot;BiDijkstra should solve maze 1&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;a66f2ed4-af7c-49f2-a9e5-68707be1365a&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;should solve maze 2&quot;,&quot;fullTitle&quot;:&quot;BiDijkstra should solve maze 2&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;6ba45b8c-eb6f-4c88-bdbc-60d8963446cd&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;should solve maze 3&quot;,&quot;fullTitle&quot;:&quot;BiDijkstra should solve maze 3&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;d3d39ffd-b1bb-4597-8d2a-88b38b62b87e&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;should solve maze 4&quot;,&quot;fullTitle&quot;:&quot;BiDijkstra should solve maze 4&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;6a3a0d96-da44-49a3-80d0-e0a70e80f9b2&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;a66f2ed4-af7c-49f2-a9e5-68707be1365a&quot;,&quot;6ba45b8c-eb6f-4c88-bdbc-60d8963446cd&quot;,&quot;d3d39ffd-b1bb-4597-8d2a-88b38b62b87e&quot;,&quot;6a3a0d96-da44-49a3-80d0-e0a70e80f9b2&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:1,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;d4a7508a-5e60-419c-91b1-dff11173f24b&quot;,&quot;title&quot;:&quot;BiAStar&quot;,&quot;fullFile&quot;:&quot;C:\\Users\\Administrator\\Desktop\\PathFinding.js-master\\test\\PathTest.js&quot;,&quot;file&quot;:&quot;\\test\\PathTest.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;should solve maze 1&quot;,&quot;fullTitle&quot;:&quot;BiAStar should solve maze 1&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;faa5f31c-2d10-44e3-bb9f-7a8b6eed805c&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;should solve maze 2&quot;,&quot;fullTitle&quot;:&quot;BiAStar should solve maze 2&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;ca6c91f2-473e-462e-9b18-4fd14f2793aa&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;should solve maze 3&quot;,&quot;fullTitle&quot;:&quot;BiAStar should solve maze 3&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;f3fc494c-7da6-43b5-9e05-6cb8a9a02407&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;should solve maze 4&quot;,&quot;fullTitle&quot;:&quot;BiAStar should solve maze 4&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;cbae4265-9669-4835-8e24-57194f8694f2&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;faa5f31c-2d10-44e3-bb9f-7a8b6eed805c&quot;,&quot;ca6c91f2-473e-462e-9b18-4fd14f2793aa&quot;,&quot;f3fc494c-7da6-43b5-9e05-6cb8a9a02407&quot;,&quot;cbae4265-9669-4835-8e24-57194f8694f2&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;eda27dcd-af58-4ac5-8281-e31aaa2c35ea&quot;,&quot;title&quot;:&quot;BestFirst&quot;,&quot;fullFile&quot;:&quot;C:\\Users\\Administrator\\Desktop\\PathFinding.js-master\\test\\PathTest.js&quot;,&quot;file&quot;:&quot;\\test\\PathTest.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;should solve maze 1&quot;,&quot;fullTitle&quot;:&quot;BestFirst should solve maze 1&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;4bdb889f-e63c-4b45-a460-3d6fe2b80dce&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;should solve maze 2&quot;,&quot;fullTitle&quot;:&quot;BestFirst should solve maze 2&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;9848069c-8d3b-4494-8d93-452625d49142&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;should solve maze 3&quot;,&quot;fullTitle&quot;:&quot;BestFirst should solve maze 3&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;6d22a800-2dbf-40fb-aa2f-a4abccfe161c&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;should solve maze 4&quot;,&quot;fullTitle&quot;:&quot;BestFirst should solve maze 4&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;23564bd0-c55e-4ae9-bbc9-33cdb4728e81&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;4bdb889f-e63c-4b45-a460-3d6fe2b80dce&quot;,&quot;9848069c-8d3b-4494-8d93-452625d49142&quot;,&quot;6d22a800-2dbf-40fb-aa2f-a4abccfe161c&quot;,&quot;23564bd0-c55e-4ae9-bbc9-33cdb4728e81&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;60d04cea-c2af-4460-b9e5-380c73dafe6c&quot;,&quot;title&quot;:&quot;BiBestFirst&quot;,&quot;fullFile&quot;:&quot;C:\\Users\\Administrator\\Desktop\\PathFinding.js-master\\test\\PathTest.js&quot;,&quot;file&quot;:&quot;\\test\\PathTest.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;should solve maze 1&quot;,&quot;fullTitle&quot;:&quot;BiBestFirst should solve maze 1&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;1326359f-bc02-417a-b7e3-51e06ad25dd1&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;should solve maze 2&quot;,&quot;fullTitle&quot;:&quot;BiBestFirst should solve maze 2&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;4b054d06-f701-4ec8-b8df-28ec810e34d3&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;should solve maze 3&quot;,&quot;fullTitle&quot;:&quot;BiBestFirst should solve maze 3&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;664c8b7c-f636-4580-a80d-d0354bcdab8b&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;should solve maze 4&quot;,&quot;fullTitle&quot;:&quot;BiBestFirst should solve maze 4&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;287c2b03-c390-4859-9800-a4c3a1a01185&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;1326359f-bc02-417a-b7e3-51e06ad25dd1&quot;,&quot;4b054d06-f701-4ec8-b8df-28ec810e34d3&quot;,&quot;664c8b7c-f636-4580-a80d-d0354bcdab8b&quot;,&quot;287c2b03-c390-4859-9800-a4c3a1a01185&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:0,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;2d1d6a12-172e-4681-961b-75c90e0b6264&quot;,&quot;title&quot;:&quot;IDAStar&quot;,&quot;fullFile&quot;:&quot;C:\\Users\\Administrator\\Desktop\\PathFinding.js-master\\test\\PathTest.js&quot;,&quot;file&quot;:&quot;\\test\\PathTest.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;should solve maze 1&quot;,&quot;fullTitle&quot;:&quot;IDAStar should solve maze 1&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;e67ffdd8-7e84-43dd-9ed9-a4fbaee50bac&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;should solve maze 2&quot;,&quot;fullTitle&quot;:&quot;IDAStar should solve maze 2&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;4343f59d-e572-42fb-b943-4a6751a2f2a4&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;should solve maze 3&quot;,&quot;fullTitle&quot;:&quot;IDAStar should solve maze 3&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;29d2dc2d-f472-474c-81e9-c949df1eee56&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;should solve maze 4&quot;,&quot;fullTitle&quot;:&quot;IDAStar should solve maze 4&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;ff2c6987-bcd6-40ea-898a-dd6cd45c495d&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;e67ffdd8-7e84-43dd-9ed9-a4fbaee50bac&quot;,&quot;4343f59d-e572-42fb-b943-4a6751a2f2a4&quot;,&quot;29d2dc2d-f472-474c-81e9-c949df1eee56&quot;,&quot;ff2c6987-bcd6-40ea-898a-dd6cd45c495d&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:2,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;a06a9faa-4b6e-4060-8618-f150164593c5&quot;,&quot;title&quot;:&quot;JPFMoveDiagonallyIfAtMostOneObstacle&quot;,&quot;fullFile&quot;:&quot;C:\\Users\\Administrator\\Desktop\\PathFinding.js-master\\test\\PathTest.js&quot;,&quot;file&quot;:&quot;\\test\\PathTest.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;should solve maze 1&quot;,&quot;fullTitle&quot;:&quot;JPFMoveDiagonallyIfAtMostOneObstacle should solve maze 1&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;bbedd7e3-e52c-4ad0-b813-1b5bba9ad156&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;should solve maze 2&quot;,&quot;fullTitle&quot;:&quot;JPFMoveDiagonallyIfAtMostOneObstacle should solve maze 2&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;6f0e93fb-7a60-4819-8a94-1f4e520fb650&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;should solve maze 3&quot;,&quot;fullTitle&quot;:&quot;JPFMoveDiagonallyIfAtMostOneObstacle should solve maze 3&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;263542e6-c92a-407a-97c0-6fdb69613079&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;should solve maze 4&quot;,&quot;fullTitle&quot;:&quot;JPFMoveDiagonallyIfAtMostOneObstacle should solve maze 4&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:0,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;20725eb9-a96a-4527-b9da-2cc14f1d364c&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false}],&quot;suites&quot;:[],&quot;passes&quot;:[&quot;bbedd7e3-e52c-4ad0-b813-1b5bba9ad156&quot;,&quot;6f0e93fb-7a60-4819-8a94-1f4e520fb650&quot;,&quot;263542e6-c92a-407a-97c0-6fdb69613079&quot;,&quot;20725eb9-a96a-4527-b9da-2cc14f1d364c&quot;],&quot;failures&quot;:[],&quot;pending&quot;:[],&quot;skipped&quot;:[],&quot;duration&quot;:1,&quot;root&quot;:false,&quot;rootEmpty&quot;:false,&quot;_timeout&quot;:2000},{&quot;uuid&quot;:&quot;b433d3a1-a0cb-4106-a933-c89ff7bdfc85&quot;,&quot;title&quot;:&quot;JPFNeverMoveDiagonally&quot;,&quot;fullFile&quot;:&quot;C:\\Users\\Administrator\\Desktop\\PathFinding.js-master\\test\\PathTest.js&quot;,&quot;file&quot;:&quot;\\test\\PathTest.js&quot;,&quot;beforeHooks&quot;:[],&quot;afterHooks&quot;:[],&quot;tests&quot;:[{&quot;title&quot;:&quot;should solve maze 1&quot;,&quot;fullTitle&quot;:&quot;JPFNeverMoveDiagonally should solve maze 1&quot;,&quot;timedOut&quot;:false,&quot;duration&quot;:1,&quot;state&quot;:&quot;passed&quot;,&quot;speed&quot;:&quot;fast&quot;,&quot;pass&quot;:true,&quot;fail&quot;:false,&quot;pending&quot;:false,&quot;code&quot;:&quot;path = finder.findPath(startX, startY, endX, endY, grid);\nif (optimal) {\n path.length.should.equal(expectedLength);\n} else {\n path[0].should.eql([startX, startY]);\n path[path.length - 1].should.eql([endX, endY]);\n}&quot;,&quot;err&quot;:{},&quot;isRoot&quot;:false,&quot;uuid&quot;:&quot;eb33a745-5d4d-4148-848d-945ff328612b&quot;,&quot;isHook&quot;:false,&quot;skipped&quot;:false},{&quot;title&quot;:&quot;should solve maze 2&quot;,&quot;fullTitle&quot;:&quot;JPFNeverMoveDiagonally should solve maze 2&quot;,&quot;timedOut&quot;:false,