@@ -48,11 +48,40 @@ describe('depthFirstSearch', () => {
48
48
leaveVertex : leaveVertexCallback ,
49
49
} ) ;
50
50
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
+ }
56
85
} ) ;
57
86
58
87
it ( 'allow users to redefine vertex visiting logic' , ( ) => {
@@ -93,15 +122,44 @@ describe('depthFirstSearch', () => {
93
122
depthFirstSearch ( graph , vertexA , {
94
123
enterVertex : enterVertexCallback ,
95
124
leaveVertex : leaveVertexCallback ,
96
- allowTraversal : ( vertex , neighbor ) => {
97
- return ! ( vertex === vertexA && neighbor === vertexB ) ;
125
+ allowTraversal : ( { currentVertex , nextVertex } ) => {
126
+ return ! ( currentVertex === vertexA && nextVertex === vertexB ) ;
98
127
} ,
99
128
} ) ;
100
129
101
130
expect ( enterVertexCallback ) . toHaveBeenCalledTimes ( 7 ) ;
102
131
expect ( leaveVertexCallback ) . toHaveBeenCalledTimes ( 7 ) ;
103
132
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
+ }
106
164
} ) ;
107
165
} ) ;
0 commit comments