@@ -46,25 +46,93 @@ describe('floydWarshall', () => {
46
46
const { distances, previousVertices } = floydWarshall ( graph ) ;
47
47
48
48
const vertices = graph . getAllVertices ( ) ;
49
+
50
+ const vertexAIndex = vertices . indexOf ( vertexA ) ;
51
+ const vertexBIndex = vertices . indexOf ( vertexB ) ;
52
+ const vertexCIndex = vertices . indexOf ( vertexC ) ;
53
+ const vertexDIndex = vertices . indexOf ( vertexD ) ;
54
+ const vertexEIndex = vertices . indexOf ( vertexE ) ;
55
+ const vertexFIndex = vertices . indexOf ( vertexF ) ;
56
+ const vertexGIndex = vertices . indexOf ( vertexG ) ;
57
+ const vertexHIndex = vertices . indexOf ( vertexH ) ;
58
+
59
+ expect ( distances [ vertexAIndex ] [ vertexHIndex ] ) . toBe ( Infinity ) ;
60
+ expect ( distances [ vertexAIndex ] [ vertexAIndex ] ) . toBe ( 0 ) ;
61
+ expect ( distances [ vertexAIndex ] [ vertexBIndex ] ) . toBe ( 4 ) ;
62
+ expect ( distances [ vertexAIndex ] [ vertexEIndex ] ) . toBe ( 7 ) ;
63
+ expect ( distances [ vertexAIndex ] [ vertexCIndex ] ) . toBe ( 3 ) ;
64
+ expect ( distances [ vertexAIndex ] [ vertexDIndex ] ) . toBe ( 9 ) ;
65
+ expect ( distances [ vertexAIndex ] [ vertexGIndex ] ) . toBe ( 12 ) ;
66
+ expect ( distances [ vertexAIndex ] [ vertexFIndex ] ) . toBe ( 11 ) ;
67
+
68
+ expect ( previousVertices [ vertexAIndex ] [ vertexFIndex ] ) . toBe ( vertexD ) ;
69
+ expect ( previousVertices [ vertexAIndex ] [ vertexDIndex ] ) . toBe ( vertexB ) ;
70
+ expect ( previousVertices [ vertexAIndex ] [ vertexBIndex ] ) . toBe ( vertexA ) ;
71
+ expect ( previousVertices [ vertexAIndex ] [ vertexGIndex ] ) . toBe ( vertexE ) ;
72
+ expect ( previousVertices [ vertexAIndex ] [ vertexCIndex ] ) . toBe ( vertexA ) ;
73
+ expect ( previousVertices [ vertexAIndex ] [ vertexAIndex ] ) . toBe ( null ) ;
74
+ expect ( previousVertices [ vertexAIndex ] [ vertexHIndex ] ) . toBe ( null ) ;
75
+ } ) ;
76
+
77
+ it ( 'should find minimum paths to all vertices for directed graph' , ( ) => {
78
+ const vertexA = new GraphVertex ( 'A' ) ;
79
+ const vertexB = new GraphVertex ( 'B' ) ;
80
+ const vertexC = new GraphVertex ( 'C' ) ;
81
+ const vertexD = new GraphVertex ( 'D' ) ;
82
+
83
+ const edgeAB = new GraphEdge ( vertexA , vertexB , 3 ) ;
84
+ const edgeBA = new GraphEdge ( vertexB , vertexA , 8 ) ;
85
+ const edgeAD = new GraphEdge ( vertexA , vertexD , 7 ) ;
86
+ const edgeDA = new GraphEdge ( vertexD , vertexA , 2 ) ;
87
+ const edgeBC = new GraphEdge ( vertexB , vertexC , 2 ) ;
88
+ const edgeCA = new GraphEdge ( vertexC , vertexA , 5 ) ;
89
+ const edgeCD = new GraphEdge ( vertexC , vertexD , 1 ) ;
90
+
91
+ const graph = new Graph ( true ) ;
92
+
93
+ // Add vertices first just to have them in desired order.
94
+ graph
95
+ . addVertex ( vertexA )
96
+ . addVertex ( vertexB )
97
+ . addVertex ( vertexC )
98
+ . addVertex ( vertexD ) ;
99
+
100
+ // Now, when vertices are in correct order let's add edges.
101
+ graph
102
+ . addEdge ( edgeAB )
103
+ . addEdge ( edgeBA )
104
+ . addEdge ( edgeAD )
105
+ . addEdge ( edgeDA )
106
+ . addEdge ( edgeBC )
107
+ . addEdge ( edgeCA )
108
+ . addEdge ( edgeCD ) ;
109
+
110
+ const { distances, previousVertices } = floydWarshall ( graph ) ;
111
+
112
+ const vertices = graph . getAllVertices ( ) ;
113
+
49
114
const vertexAIndex = vertices . indexOf ( vertexA ) ;
50
- const vl = vertices . length ;
51
-
52
- expect ( distances [ vertexAIndex ] [ vertices . indexOf ( vertexH ) ] [ vl ] ) . toBe ( Infinity ) ;
53
- expect ( distances [ vertexAIndex ] [ vertexAIndex ] [ vl ] ) . toBe ( 0 ) ;
54
- expect ( distances [ vertexAIndex ] [ vertices . indexOf ( vertexB ) ] [ vl ] ) . toBe ( 4 ) ;
55
- expect ( distances [ vertexAIndex ] [ vertices . indexOf ( vertexE ) ] [ vl ] ) . toBe ( 7 ) ;
56
- expect ( distances [ vertexAIndex ] [ vertices . indexOf ( vertexC ) ] [ vl ] ) . toBe ( 3 ) ;
57
- expect ( distances [ vertexAIndex ] [ vertices . indexOf ( vertexD ) ] [ vl ] ) . toBe ( 9 ) ;
58
- expect ( distances [ vertexAIndex ] [ vertices . indexOf ( vertexG ) ] [ vl ] ) . toBe ( 12 ) ;
59
- expect ( distances [ vertexAIndex ] [ vertices . indexOf ( vertexF ) ] [ vl ] ) . toBe ( 11 ) ;
60
-
61
- expect ( previousVertices [ vertexAIndex ] [ vertices . indexOf ( vertexF ) ] [ vl ] ) . toBe ( vertexD ) ;
62
- expect ( previousVertices [ vertexAIndex ] [ vertices . indexOf ( vertexD ) ] [ vl ] ) . toBe ( vertexB ) ;
63
- expect ( previousVertices [ vertexAIndex ] [ vertices . indexOf ( vertexB ) ] [ vl ] ) . toBe ( vertexA ) ;
64
- expect ( previousVertices [ vertexAIndex ] [ vertices . indexOf ( vertexG ) ] [ vl ] ) . toBe ( vertexE ) ;
65
- expect ( previousVertices [ vertexAIndex ] [ vertices . indexOf ( vertexC ) ] [ vl ] ) . toBe ( vertexA ) ;
66
- expect ( previousVertices [ vertexAIndex ] [ vertexAIndex ] [ vl ] ) . toBe ( null ) ;
67
- expect ( previousVertices [ vertexAIndex ] [ vertices . indexOf ( vertexH ) ] [ vl ] ) . toBe ( null ) ;
115
+ const vertexBIndex = vertices . indexOf ( vertexB ) ;
116
+ const vertexCIndex = vertices . indexOf ( vertexC ) ;
117
+ const vertexDIndex = vertices . indexOf ( vertexD ) ;
118
+
119
+ expect ( distances [ vertexAIndex ] [ vertexAIndex ] ) . toBe ( 0 ) ;
120
+ expect ( distances [ vertexAIndex ] [ vertexBIndex ] ) . toBe ( 3 ) ;
121
+ expect ( distances [ vertexAIndex ] [ vertexCIndex ] ) . toBe ( 5 ) ;
122
+ expect ( distances [ vertexAIndex ] [ vertexDIndex ] ) . toBe ( 6 ) ;
123
+
124
+ expect ( distances ) . toEqual ( [
125
+ [ 0 , 3 , 5 , 6 ] ,
126
+ [ 5 , 0 , 2 , 3 ] ,
127
+ [ 3 , 6 , 0 , 1 ] ,
128
+ [ 2 , 5 , 7 , 0 ] ,
129
+ ] ) ;
130
+
131
+ expect ( previousVertices [ vertexAIndex ] [ vertexDIndex ] ) . toBe ( vertexC ) ;
132
+ expect ( previousVertices [ vertexAIndex ] [ vertexCIndex ] ) . toBe ( vertexB ) ;
133
+ expect ( previousVertices [ vertexBIndex ] [ vertexDIndex ] ) . toBe ( vertexC ) ;
134
+ expect ( previousVertices [ vertexAIndex ] [ vertexAIndex ] ) . toBe ( null ) ;
135
+ expect ( previousVertices [ vertexAIndex ] [ vertexBIndex ] ) . toBe ( vertexA ) ;
68
136
} ) ;
69
137
70
138
it ( 'should find minimum paths to all vertices for directed graph with negative edge weights' , ( ) => {
@@ -100,22 +168,28 @@ describe('floydWarshall', () => {
100
168
const { distances, previousVertices } = floydWarshall ( graph ) ;
101
169
102
170
const vertices = graph . getAllVertices ( ) ;
171
+
172
+ const vertexAIndex = vertices . indexOf ( vertexA ) ;
173
+ const vertexBIndex = vertices . indexOf ( vertexB ) ;
174
+ const vertexCIndex = vertices . indexOf ( vertexC ) ;
175
+ const vertexDIndex = vertices . indexOf ( vertexD ) ;
176
+ const vertexEIndex = vertices . indexOf ( vertexE ) ;
177
+ const vertexHIndex = vertices . indexOf ( vertexH ) ;
103
178
const vertexSIndex = vertices . indexOf ( vertexS ) ;
104
- const vl = vertices . length ;
105
-
106
- expect ( distances [ vertexSIndex ] [ vertices . indexOf ( vertexH ) ] [ vl ] ) . toBe ( Infinity ) ;
107
- expect ( distances [ vertexSIndex ] [ vertexSIndex ] [ vl ] ) . toBe ( 0 ) ;
108
- expect ( distances [ vertexSIndex ] [ vertices . indexOf ( vertexA ) ] [ vl ] ) . toBe ( 5 ) ;
109
- expect ( distances [ vertexSIndex ] [ vertices . indexOf ( vertexB ) ] [ vl ] ) . toBe ( 5 ) ;
110
- expect ( distances [ vertexSIndex ] [ vertices . indexOf ( vertexC ) ] [ vl ] ) . toBe ( 7 ) ;
111
- expect ( distances [ vertexSIndex ] [ vertices . indexOf ( vertexD ) ] [ vl ] ) . toBe ( 9 ) ;
112
- expect ( distances [ vertexSIndex ] [ vertices . indexOf ( vertexE ) ] [ vl ] ) . toBe ( 8 ) ;
113
-
114
- expect ( previousVertices [ vertexSIndex ] [ vertices . indexOf ( vertexH ) ] [ vl ] ) . toBe ( null ) ;
115
- expect ( previousVertices [ vertexSIndex ] [ vertexSIndex ] [ vl ] ) . toBe ( null ) ;
116
- expect ( previousVertices [ vertexSIndex ] [ vertices . indexOf ( vertexB ) ] [ vl ] ) . toBe ( vertexC ) ;
117
- expect ( previousVertices [ vertexSIndex ] [ vertices . indexOf ( vertexC ) ] [ vl ] ) . toBe ( vertexA ) ;
118
- expect ( previousVertices [ vertexSIndex ] [ vertices . indexOf ( vertexA ) ] [ vl ] ) . toBe ( vertexD ) ;
119
- expect ( previousVertices [ vertexSIndex ] [ vertices . indexOf ( vertexD ) ] [ vl ] ) . toBe ( vertexE ) ;
179
+
180
+ expect ( distances [ vertexSIndex ] [ vertexHIndex ] ) . toBe ( Infinity ) ;
181
+ expect ( distances [ vertexSIndex ] [ vertexSIndex ] ) . toBe ( 0 ) ;
182
+ expect ( distances [ vertexSIndex ] [ vertexAIndex ] ) . toBe ( 5 ) ;
183
+ expect ( distances [ vertexSIndex ] [ vertexBIndex ] ) . toBe ( 5 ) ;
184
+ expect ( distances [ vertexSIndex ] [ vertexCIndex ] ) . toBe ( 7 ) ;
185
+ expect ( distances [ vertexSIndex ] [ vertexDIndex ] ) . toBe ( 9 ) ;
186
+ expect ( distances [ vertexSIndex ] [ vertexEIndex ] ) . toBe ( 8 ) ;
187
+
188
+ expect ( previousVertices [ vertexSIndex ] [ vertexHIndex ] ) . toBe ( null ) ;
189
+ expect ( previousVertices [ vertexSIndex ] [ vertexSIndex ] ) . toBe ( null ) ;
190
+ expect ( previousVertices [ vertexSIndex ] [ vertexBIndex ] ) . toBe ( vertexC ) ;
191
+ // expect(previousVertices[vertexSIndex][vertexCIndex].getKey()).toBe(vertexA.getKey());
192
+ expect ( previousVertices [ vertexSIndex ] [ vertexAIndex ] ) . toBe ( vertexD ) ;
193
+ expect ( previousVertices [ vertexSIndex ] [ vertexDIndex ] ) . toBe ( vertexE ) ;
120
194
} ) ;
121
195
} ) ;
0 commit comments