@@ -46,25 +46,93 @@ describe('floydWarshall', () =>{
4646const { distances, previousVertices } = floydWarshall ( graph ) ;
4747
4848const 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+
49114const 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 ) ;
68136} ) ;
69137
70138it ( 'should find minimum paths to all vertices for directed graph with negative edge weights' , ( ) => {
@@ -100,22 +168,28 @@ describe('floydWarshall', () =>{
100168const { distances, previousVertices } = floydWarshall ( graph ) ;
101169
102170const 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 ) ;
103178const 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 ) ;
120194} ) ;
121195} ) ;
0 commit comments