@@ -8,20 +8,26 @@ var scenarios = require('./PathTestScenarios');
88function 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) {
6168pathTests ( {
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
84106pathTests ( {
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} ) ;
0 commit comments