Skip to content

Commit 3840d6e

Browse files
committed
Added tests using node costs for AStarFinder and DijkstraFinder
1 parent 5ef686d commit 3840d6e

File tree

2 files changed

+64
-18
lines changed

2 files changed

+64
-18
lines changed

test/PathTest.js

Lines changed: 46 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,26 @@ var scenarios = require('./PathTestScenarios');
88
function pathTest(opt) {
99
var name = opt.name,
1010
finder = opt.finder,
11-
optimal = opt.optimal;
11+
optimal = opt.optimal,
12+
useCost = opt.useCost;
13+
1214

1315
describe(name, function() {
1416
var startX, startY, endX, endY, grid, expectedLength,
15-
width, height, matrix, path, i, scen;
17+
width, height, matrix, costs, path, i, scen;
1618

1719
var test = (function() {
1820
var testId = 0;
1921

20-
return function(startX, startY, endX, endY, grid, expectedLength) {
22+
return function(startX, startY, endX, endY, grid, expectedLength, expectedCostLength) {
2123
it('should solve maze '+ ++testId, function() {
2224
path = finder.findPath(startX, startY, endX, endY, grid);
2325
if (optimal) {
26+
if (useCost && expectedCostLength !== undefined) {
27+
path.length.should.equal(expectedCostLength);
28+
} else {
2429
path.length.should.equal(expectedLength);
30+
}
2531
} else {
2632
path[0].should.eql([startX, startY]);
2733
path[path.length - 1].should.eql([endX, endY]);
@@ -35,16 +41,17 @@ function pathTest(opt) {
3541
scen = scenarios[i];
3642

3743
matrix = scen.matrix;
44+
costs = useCost ? scen.costs : undefined;
3845
height = matrix.length;
39-
width = matrix[0].length;
40-
41-
grid = new PF.Grid(width, height, matrix);
46+
width = matrix[0].length;
47+
grid = new PF.Grid(width, height, matrix, costs);
4248

4349
test(
4450
scen.startX, scen.startY,
4551
scen.endX, scen.endY,
4652
grid,
47-
scen.expectedLength
53+
scen.expectedLength,
54+
scen.expectedCostLength
4855
);
4956
}
5057
});
@@ -61,52 +68,73 @@ function pathTests(tests) {
6168
pathTests({
6269
name: 'AStar',
6370
finder: new PF.AStarFinder(),
64-
optimal: true
71+
optimal: true,
72+
useCost: false
73+
}, {
74+
name: 'AStar Cost',
75+
finder: new PF.AStarFinder(),
76+
optimal: true,
77+
useCost: true
6578
}, {
6679
name: 'BreadthFirst',
6780
finder: new PF.BreadthFirstFinder(),
68-
optimal: true
81+
optimal: true,
82+
useCost: false
6983
}, {
7084
name: 'Dijkstra',
7185
finder: new PF.DijkstraFinder(),
72-
optimal: true
86+
optimal: true,
87+
useCost: false
88+
}, {
89+
name: 'Dijkstra Cost',
90+
finder: new PF.DijkstraFinder(),
91+
optimal: true,
92+
useCost: true
7393
}, {
7494
name: 'BiBreadthFirst',
7595
finder: new PF.BiBreadthFirstFinder(),
76-
optimal: true
96+
optimal: true,
97+
useCost: false
7798
}, {
7899
name: 'BiDijkstra',
79100
finder: new PF.BiDijkstraFinder(),
80-
optimal: true
101+
optimal: true,
102+
useCost: false
81103
});
82104

83105
// finders NOT guaranteed to find the shortest path
84106
pathTests({
85107
name: 'BiAStar',
86108
finder: new PF.BiAStarFinder(),
87-
optimal: false
109+
optimal: false,
110+
useCost: false
88111
}, {
89112
name: 'BestFirst',
90113
finder: new PF.BestFirstFinder(),
91-
optimal: false
114+
optimal: false,
115+
useCost: false
92116
}, {
93117
name: 'BiBestFirst',
94118
finder: new PF.BiBestFirstFinder(),
95-
optimal: false
119+
optimal: false,
120+
useCost: false
96121
}, {
97122
name: 'IDAStar',
98123
finder: new PF.IDAStarFinder(),
99-
optimal: false
124+
optimal: false,
125+
useCost: false
100126
}, {
101127
name: 'JPFMoveDiagonallyIfAtMostOneObstacle',
102128
finder: new PF.JumpPointFinder({
103129
diagonalMovement: PF.DiagonalMovement.IfAtMostOneObstacle
104130
}),
105-
optimal: false
131+
optimal: false,
132+
useCost: false
106133
}, {
107134
name: 'JPFNeverMoveDiagonally',
108135
finder: new PF.JumpPointFinder({
109136
diagonalMovement: PF.DiagonalMovement.Never
110137
}),
111-
optimal: false
138+
optimal: false,
139+
useCost: false
112140
});

test/PathTestScenarios.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,24 @@ module.exports = [
88
[1, 0]],
99
expectedLength: 3,
1010
},
11+
{
12+
startX: 0,
13+
startY: 0,
14+
endX: 4,
15+
endY: 4,
16+
matrix: [[0, 0, 0, 0, 0],
17+
[0, 0, 0, 0, 0],
18+
[0, 0, 0, 0, 0],
19+
[0, 0, 0, 0, 0],
20+
[0, 0, 0, 0, 0]],
21+
costs: [[0, 0, 0, 0, 0],
22+
[9, 9, 9, 9, 0],
23+
[0, 0, 0, 0, 0],
24+
[0, 9, 9, 9, 9],
25+
[0, 0, 0, 0, 0]],
26+
expectedLength: 9,
27+
expectedCostLength: 17,
28+
},
1129
{
1230
startX: 1,
1331
startY: 1,

0 commit comments

Comments
 (0)