Spaces:
Running
Running
describe("Path", function() { | |
/** | |
* ........ | |
* A###.### | |
* ..B#.#X# | |
* .###.### | |
* ....Z... | |
*/ | |
var MAP48 = [ /* transposed */ | |
[0, 0, 0, 0, 0], | |
[0, 1, 0, 1, 0], | |
[0, 1, 0, 1, 0], | |
[0, 1, 1, 1, 0], | |
[0, 0, 0, 0, 0], | |
[0, 1, 1, 1, 0], | |
[0, 1, 0, 1, 0], | |
[0, 1, 1, 1, 0] | |
]; | |
var PASSABLE_CALLBACK_48 = function(x, y) { | |
if (x<0 || y<0 || x>=MAP48.length || y>=MAP48[0].length) { return false; } | |
return (MAP48[x][y] == 0); | |
} | |
var A = [0, 1]; | |
var B = [2, 2]; | |
var Z = [4, 4]; | |
var X = [6, 2]; | |
var PATH = []; | |
var PATH_CALLBACK = function(x, y) { PATH.push(x, y); } | |
/* | |
* . . A # . B | |
* . # # . . | |
* . . # . . . | |
* # . . # . | |
* X # # # Z . | |
*/ | |
var MAP6 = [ /* transposed */ | |
[0, null, 0, null, 0], | |
[null, 0, null, 1, null], | |
[0, null, 0, null, 1], | |
[null, 1, null, 0, null], | |
[0, null, 1, null, 1], | |
[null, 1, null, 0, null], | |
[1, null, 0, null, 1], | |
[null, 0, null, 1, null], | |
[0, null, 0, null, 0], | |
[null, 0, null, 0, null], | |
[0, null, 0, null, 0] | |
]; | |
var A6 = [4, 0]; | |
var B6 = [10, 0]; | |
var Z6 = [8, 4]; | |
var X6 = [0, 4]; | |
var PASSABLE_CALLBACK_6 = function(x, y) { | |
if (x<0 || y<0 || x>=MAP6.length || y>=MAP6[0].length) { return false; } | |
return (MAP6[x][y] == 0); | |
} | |
beforeEach(function() { | |
PATH = []; | |
}); | |
describe("Dijkstra", function() { | |
describe("8-topology", function() { | |
var PATH_A = [0, 1, 0, 2, 0, 3, 1, 4, 2, 4, 3, 4, 4, 4]; | |
var PATH_B = [2, 2, 1, 2, 0, 3, 1, 4, 2, 4, 3, 4, 4, 4]; | |
var dijkstra = new ROT.Path.Dijkstra(Z[0], Z[1], PASSABLE_CALLBACK_48, {topology:8}); | |
it("should compute correct path A", function() { | |
path = []; | |
dijkstra.compute(A[0], A[1], PATH_CALLBACK); | |
expect(PATH.toString()).toEqual(PATH_A.toString()); | |
}); | |
it("should compute correct path B", function() { | |
dijkstra.compute(B[0], B[1], PATH_CALLBACK); | |
expect(PATH.toString()).toEqual(PATH_B.toString()); | |
}); | |
it("should survive non-existant path X", function() { | |
dijkstra.compute(X[0], X[1], PATH_CALLBACK); | |
expect(PATH.length).toEqual(0); | |
}); | |
}); /* 8-topology */ | |
describe("4-topology", function() { | |
var PATH_A = [0, 1, 0, 2, 0, 3, 0, 4, 1, 4, 2, 4, 3, 4, 4, 4]; | |
var PATH_B = [2, 2, 1, 2, 0, 2, 0, 3, 0, 4, 1, 4, 2, 4, 3, 4, 4, 4]; | |
var dijkstra = new ROT.Path.Dijkstra(Z[0], Z[1], PASSABLE_CALLBACK_48, {topology:4}); | |
it("should compute correct path A", function() { | |
dijkstra.compute(A[0], A[1], PATH_CALLBACK); | |
expect(PATH.toString()).toEqual(PATH_A.toString()); | |
}); | |
it("should compute correct path B", function() { | |
dijkstra.compute(B[0], B[1], PATH_CALLBACK); | |
expect(PATH.toString()).toEqual(PATH_B.toString()); | |
}); | |
it("should survive non-existant path X", function() { | |
dijkstra.compute(X[0], X[1], PATH_CALLBACK); | |
expect(PATH.length).toEqual(0); | |
}); | |
}); /* 4-topology */ | |
describe("6-topology", function() { | |
var PATH_A = [4, 0, 2, 0, 1, 1, 2, 2, 3, 3, 5, 3, 6, 2, 8, 2, 9, 3, 8, 4]; | |
var PATH_B = [10, 0, 9, 1, 8, 2, 9, 3, 8, 4]; | |
var dijkstra = new ROT.Path.Dijkstra(Z6[0], Z6[1], PASSABLE_CALLBACK_6, {topology:6}); | |
it("should compute correct path A", function() { | |
dijkstra.compute(A6[0], A6[1], PATH_CALLBACK); | |
expect(PATH.toString()).toEqual(PATH_A.toString()); | |
}); | |
it("should compute correct path B", function() { | |
dijkstra.compute(B6[0], B6[1], PATH_CALLBACK); | |
expect(PATH.toString()).toEqual(PATH_B.toString()); | |
}); | |
it("should survive non-existant path X", function() { | |
dijkstra.compute(X6[0], X6[1], PATH_CALLBACK); | |
expect(PATH.length).toEqual(0); | |
}); | |
}); /* 6-topology */ | |
}); /* dijkstra */ | |
describe("A*", function() { | |
describe("8-topology", function() { | |
var PATH_A = [0, 1, 0, 2, 0, 3, 1, 4, 2, 4, 3, 4, 4, 4]; | |
var PATH_B = [2, 2, 1, 2, 0, 3, 1, 4, 2, 4, 3, 4, 4, 4]; | |
var astar = new ROT.Path.AStar(Z[0], Z[1], PASSABLE_CALLBACK_48, {topology:8}); | |
it("should compute correct path A", function() { | |
path = []; | |
astar.compute(A[0], A[1], PATH_CALLBACK); | |
expect(PATH.toString()).toEqual(PATH_A.toString()); | |
}); | |
it("should compute correct path B", function() { | |
astar.compute(B[0], B[1], PATH_CALLBACK); | |
expect(PATH.toString()).toEqual(PATH_B.toString()); | |
}); | |
it("should survive non-existant path X", function() { | |
astar.compute(X[0], X[1], PATH_CALLBACK); | |
expect(PATH.length).toEqual(0); | |
}); | |
}); /* 8-topology */ | |
describe("4-topology", function() { | |
var PATH_A = [0, 1, 0, 2, 0, 3, 0, 4, 1, 4, 2, 4, 3, 4, 4, 4]; | |
var PATH_B = [2, 2, 1, 2, 0, 2, 0, 3, 0, 4, 1, 4, 2, 4, 3, 4, 4, 4]; | |
var astar = new ROT.Path.AStar(Z[0], Z[1], PASSABLE_CALLBACK_48, {topology:4}); | |
it("should compute correct path A", function() { | |
astar.compute(A[0], A[1], PATH_CALLBACK); | |
expect(PATH.toString()).toEqual(PATH_A.toString()); | |
}); | |
it("should compute correct path B", function() { | |
astar.compute(B[0], B[1], PATH_CALLBACK); | |
expect(PATH.toString()).toEqual(PATH_B.toString()); | |
}); | |
it("should survive non-existant path X", function() { | |
astar.compute(X[0], X[1], PATH_CALLBACK); | |
expect(PATH.length).toEqual(0); | |
}); | |
}); /* 4-topology */ | |
describe("6-topology", function() { | |
var PATH_A = [4, 0, 2, 0, 1, 1, 2, 2, 3, 3, 5, 3, 6, 2, 8, 2, 9, 3, 8, 4]; | |
var PATH_B = [10, 0, 9, 1, 8, 2, 9, 3, 8, 4]; | |
var astar = new ROT.Path.AStar(Z6[0], Z6[1], PASSABLE_CALLBACK_6, {topology:6}); | |
it("should compute correct path A", function() { | |
astar.compute(A6[0], A6[1], PATH_CALLBACK); | |
expect(PATH.toString()).toEqual(PATH_A.toString()); | |
}); | |
it("should compute correct path B", function() { | |
astar.compute(B6[0], B6[1], PATH_CALLBACK); | |
expect(PATH.toString()).toEqual(PATH_B.toString()); | |
}); | |
it("should survive non-existant path X", function() { | |
astar.compute(X6[0], X6[1], PATH_CALLBACK); | |
expect(PATH.length).toEqual(0); | |
}); | |
}); /* 6-topology */ | |
}); /* A* */ | |
}); /* path */ | |