@@ -8,20 +8,26 @@ var scenarios = require('./PathTestScenarios');
8
8
function pathTest ( opt ) {
9
9
var name = opt . name ,
10
10
finder = opt . finder ,
11
- optimal = opt . optimal ;
11
+ optimal = opt . optimal ,
12
+ useCost = opt . useCost ;
13
+
12
14
13
15
describe ( name , function ( ) {
14
16
var startX , startY , endX , endY , grid , expectedLength ,
15
- width , height , matrix , path , i , scen ;
17
+ width , height , matrix , costs , path , i , scen ;
16
18
17
19
var test = ( function ( ) {
18
20
var testId = 0 ;
19
21
20
- return function ( startX , startY , endX , endY , grid , expectedLength ) {
22
+ return function ( startX , startY , endX , endY , grid , expectedLength , expectedCostLength ) {
21
23
it ( 'should solve maze ' + ++ testId , function ( ) {
22
24
path = finder . findPath ( startX , startY , endX , endY , grid ) ;
23
25
if ( optimal ) {
26
+ if ( useCost && expectedCostLength !== undefined ) {
27
+ path . length . should . equal ( expectedCostLength ) ;
28
+ } else {
24
29
path . length . should . equal ( expectedLength ) ;
30
+ }
25
31
} else {
26
32
path [ 0 ] . should . eql ( [ startX , startY ] ) ;
27
33
path [ path . length - 1 ] . should . eql ( [ endX , endY ] ) ;
@@ -35,16 +41,17 @@ function pathTest(opt) {
35
41
scen = scenarios [ i ] ;
36
42
37
43
matrix = scen . matrix ;
44
+ costs = useCost ? scen . costs : undefined ;
38
45
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 ) ;
42
48
43
49
test (
44
50
scen . startX , scen . startY ,
45
51
scen . endX , scen . endY ,
46
52
grid ,
47
- scen . expectedLength
53
+ scen . expectedLength ,
54
+ scen . expectedCostLength
48
55
) ;
49
56
}
50
57
} ) ;
@@ -61,52 +68,73 @@ function pathTests(tests) {
61
68
pathTests ( {
62
69
name : 'AStar' ,
63
70
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
65
78
} , {
66
79
name : 'BreadthFirst' ,
67
80
finder : new PF . BreadthFirstFinder ( ) ,
68
- optimal : true
81
+ optimal : true ,
82
+ useCost : false
69
83
} , {
70
84
name : 'Dijkstra' ,
71
85
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
73
93
} , {
74
94
name : 'BiBreadthFirst' ,
75
95
finder : new PF . BiBreadthFirstFinder ( ) ,
76
- optimal : true
96
+ optimal : true ,
97
+ useCost : false
77
98
} , {
78
99
name : 'BiDijkstra' ,
79
100
finder : new PF . BiDijkstraFinder ( ) ,
80
- optimal : true
101
+ optimal : true ,
102
+ useCost : false
81
103
} ) ;
82
104
83
105
// finders NOT guaranteed to find the shortest path
84
106
pathTests ( {
85
107
name : 'BiAStar' ,
86
108
finder : new PF . BiAStarFinder ( ) ,
87
- optimal : false
109
+ optimal : false ,
110
+ useCost : false
88
111
} , {
89
112
name : 'BestFirst' ,
90
113
finder : new PF . BestFirstFinder ( ) ,
91
- optimal : false
114
+ optimal : false ,
115
+ useCost : false
92
116
} , {
93
117
name : 'BiBestFirst' ,
94
118
finder : new PF . BiBestFirstFinder ( ) ,
95
- optimal : false
119
+ optimal : false ,
120
+ useCost : false
96
121
} , {
97
122
name : 'IDAStar' ,
98
123
finder : new PF . IDAStarFinder ( ) ,
99
- optimal : false
124
+ optimal : false ,
125
+ useCost : false
100
126
} , {
101
127
name : 'JPFMoveDiagonallyIfAtMostOneObstacle' ,
102
128
finder : new PF . JumpPointFinder ( {
103
129
diagonalMovement : PF . DiagonalMovement . IfAtMostOneObstacle
104
130
} ) ,
105
- optimal : false
131
+ optimal : false ,
132
+ useCost : false
106
133
} , {
107
134
name : 'JPFNeverMoveDiagonally' ,
108
135
finder : new PF . JumpPointFinder ( {
109
136
diagonalMovement : PF . DiagonalMovement . Never
110
137
} ) ,
111
- optimal : false
138
+ optimal : false ,
139
+ useCost : false
112
140
} ) ;
0 commit comments