@@ -48,11 +48,40 @@ describe('depthFirstSearch', () => {
4848 leaveVertex : leaveVertexCallback ,
4949 } ) ;
5050
51- expect ( enterVertexCallback ) . toHaveBeenCalledTimes ( 7 ) ;
52- expect ( leaveVertexCallback ) . toHaveBeenCalledTimes ( 7 ) ;
53-
54- expect ( enterVertexCallback . mock . calls . toString ( ) ) . toBe ( 'A,B,C,G,D,E,F' ) ;
55- expect ( leaveVertexCallback . mock . calls . toString ( ) ) . toBe ( 'G,C,B,D,F,E,A' ) ;
51+ expect ( enterVertexCallback ) . toHaveBeenCalledTimes ( graph . getAllVertices ( ) . length ) ;
52+ expect ( leaveVertexCallback ) . toHaveBeenCalledTimes ( graph . getAllVertices ( ) . length ) ;
53+
54+ const enterVertexParamsMap = [
55+ { currentVertex : vertexA , previousVertex : null } ,
56+ { currentVertex : vertexB , previousVertex : vertexA } ,
57+ { currentVertex : vertexC , previousVertex : vertexB } ,
58+ { currentVertex : vertexG , previousVertex : vertexC } ,
59+ { currentVertex : vertexD , previousVertex : vertexA } ,
60+ { currentVertex : vertexE , previousVertex : vertexA } ,
61+ { currentVertex : vertexF , previousVertex : vertexE } ,
62+ ] ;
63+
64+ for ( let callIndex = 0 ; callIndex < graph . getAllVertices ( ) . length ; callIndex += 1 ) {
65+ const params = enterVertexCallback . mock . calls [ callIndex ] [ 0 ] ;
66+ expect ( params . currentVertex ) . toEqual ( enterVertexParamsMap [ callIndex ] . currentVertex ) ;
67+ expect ( params . previousVertex ) . toEqual ( enterVertexParamsMap [ callIndex ] . previousVertex ) ;
68+ }
69+
70+ const leavingVertexParamsMap = [
71+ { currentVertex : vertexG , previousVertex : vertexC } ,
72+ { currentVertex : vertexC , previousVertex : vertexB } ,
73+ { currentVertex : vertexB , previousVertex : vertexA } ,
74+ { currentVertex : vertexD , previousVertex : vertexA } ,
75+ { currentVertex : vertexF , previousVertex : vertexE } ,
76+ { currentVertex : vertexE , previousVertex : vertexA } ,
77+ { currentVertex : vertexA , previousVertex : null } ,
78+ ] ;
79+
80+ for ( let callIndex = 0 ; callIndex < graph . getAllVertices ( ) . length ; callIndex += 1 ) {
81+ const params = leaveVertexCallback . mock . calls [ callIndex ] [ 0 ] ;
82+ expect ( params . currentVertex ) . toEqual ( leavingVertexParamsMap [ callIndex ] . currentVertex ) ;
83+ expect ( params . previousVertex ) . toEqual ( leavingVertexParamsMap [ callIndex ] . previousVertex ) ;
84+ }
5685 } ) ;
5786
5887 it ( 'allow users to redefine vertex visiting logic' , ( ) => {
@@ -93,15 +122,44 @@ describe('depthFirstSearch', () => {
93122 depthFirstSearch ( graph , vertexA , {
94123 enterVertex : enterVertexCallback ,
95124 leaveVertex : leaveVertexCallback ,
96- allowTraversal : ( vertex , neighbor ) => {
97- return ! ( vertex === vertexA && neighbor === vertexB ) ;
125+ allowTraversal : ( { currentVertex , nextVertex } ) => {
126+ return ! ( currentVertex === vertexA && nextVertex === vertexB ) ;
98127 } ,
99128 } ) ;
100129
101130 expect ( enterVertexCallback ) . toHaveBeenCalledTimes ( 7 ) ;
102131 expect ( leaveVertexCallback ) . toHaveBeenCalledTimes ( 7 ) ;
103132
104- expect ( enterVertexCallback . mock . calls . toString ( ) ) . toBe ( 'A,D,G,E,F,D,G' ) ;
105- expect ( leaveVertexCallback . mock . calls . toString ( ) ) . toBe ( 'G,D,G,D,F,E,A' ) ;
133+ const enterVertexParamsMap = [
134+ { currentVertex : vertexA , previousVertex : null } ,
135+ { currentVertex : vertexD , previousVertex : vertexA } ,
136+ { currentVertex : vertexG , previousVertex : vertexD } ,
137+ { currentVertex : vertexE , previousVertex : vertexA } ,
138+ { currentVertex : vertexF , previousVertex : vertexE } ,
139+ { currentVertex : vertexD , previousVertex : vertexF } ,
140+ { currentVertex : vertexG , previousVertex : vertexD } ,
141+ ] ;
142+
143+ for ( let callIndex = 0 ; callIndex < graph . getAllVertices ( ) . length ; callIndex += 1 ) {
144+ const params = enterVertexCallback . mock . calls [ callIndex ] [ 0 ] ;
145+ expect ( params . currentVertex ) . toEqual ( enterVertexParamsMap [ callIndex ] . currentVertex ) ;
146+ expect ( params . previousVertex ) . toEqual ( enterVertexParamsMap [ callIndex ] . previousVertex ) ;
147+ }
148+
149+ const leavingVertexParamsMap = [
150+ { currentVertex : vertexG , previousVertex : vertexD } ,
151+ { currentVertex : vertexD , previousVertex : vertexA } ,
152+ { currentVertex : vertexG , previousVertex : vertexD } ,
153+ { currentVertex : vertexD , previousVertex : vertexF } ,
154+ { currentVertex : vertexF , previousVertex : vertexE } ,
155+ { currentVertex : vertexE , previousVertex : vertexA } ,
156+ { currentVertex : vertexA , previousVertex : null } ,
157+ ] ;
158+
159+ for ( let callIndex = 0 ; callIndex < graph . getAllVertices ( ) . length ; callIndex += 1 ) {
160+ const params = leaveVertexCallback . mock . calls [ callIndex ] [ 0 ] ;
161+ expect ( params . currentVertex ) . toEqual ( leavingVertexParamsMap [ callIndex ] . currentVertex ) ;
162+ expect ( params . previousVertex ) . toEqual ( leavingVertexParamsMap [ callIndex ] . previousVertex ) ;
163+ }
106164 } ) ;
107165} ) ;
0 commit comments