UNPKG

dist-javascript-algorithms-and-data-structures

Version:

Algorithms and data-structures implemented on JavaScript

97 lines (91 loc) 4.31 kB
"use strict"; var _GraphVertex = _interopRequireDefault(require("../../../../data-structures/graph/GraphVertex")); var _GraphEdge = _interopRequireDefault(require("../../../../data-structures/graph/GraphEdge")); var _Graph = _interopRequireDefault(require("../../../../data-structures/graph/Graph")); var _dijkstra = _interopRequireDefault(require("../dijkstra")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } describe('dijkstra', () => { it('should find minimum paths to all vertices for undirected graph', () => { const vertexA = new _GraphVertex.default('A'); const vertexB = new _GraphVertex.default('B'); const vertexC = new _GraphVertex.default('C'); const vertexD = new _GraphVertex.default('D'); const vertexE = new _GraphVertex.default('E'); const vertexF = new _GraphVertex.default('F'); const vertexG = new _GraphVertex.default('G'); const vertexH = new _GraphVertex.default('H'); const edgeAB = new _GraphEdge.default(vertexA, vertexB, 4); const edgeAE = new _GraphEdge.default(vertexA, vertexE, 7); const edgeAC = new _GraphEdge.default(vertexA, vertexC, 3); const edgeBC = new _GraphEdge.default(vertexB, vertexC, 6); const edgeBD = new _GraphEdge.default(vertexB, vertexD, 5); const edgeEC = new _GraphEdge.default(vertexE, vertexC, 8); const edgeED = new _GraphEdge.default(vertexE, vertexD, 2); const edgeDC = new _GraphEdge.default(vertexD, vertexC, 11); const edgeDG = new _GraphEdge.default(vertexD, vertexG, 10); const edgeDF = new _GraphEdge.default(vertexD, vertexF, 2); const edgeFG = new _GraphEdge.default(vertexF, vertexG, 3); const edgeEG = new _GraphEdge.default(vertexE, vertexG, 5); const graph = new _Graph.default(); graph.addVertex(vertexH).addEdge(edgeAB).addEdge(edgeAE).addEdge(edgeAC).addEdge(edgeBC).addEdge(edgeBD).addEdge(edgeEC).addEdge(edgeED).addEdge(edgeDC).addEdge(edgeDG).addEdge(edgeDF).addEdge(edgeFG).addEdge(edgeEG); const { distances, previousVertices } = (0, _dijkstra.default)(graph, vertexA); expect(distances).toEqual({ H: Infinity, A: 0, B: 4, E: 7, C: 3, D: 9, G: 12, F: 11 }); expect(previousVertices.F.getKey()).toBe('D'); expect(previousVertices.D.getKey()).toBe('B'); expect(previousVertices.B.getKey()).toBe('A'); expect(previousVertices.G.getKey()).toBe('E'); expect(previousVertices.C.getKey()).toBe('A'); expect(previousVertices.A).toBeNull(); expect(previousVertices.H).toBeNull(); }); it('should find minimum paths to all vertices for directed graph with negative edge weights', () => { const vertexS = new _GraphVertex.default('S'); const vertexE = new _GraphVertex.default('E'); const vertexA = new _GraphVertex.default('A'); const vertexD = new _GraphVertex.default('D'); const vertexB = new _GraphVertex.default('B'); const vertexC = new _GraphVertex.default('C'); const vertexH = new _GraphVertex.default('H'); const edgeSE = new _GraphEdge.default(vertexS, vertexE, 8); const edgeSA = new _GraphEdge.default(vertexS, vertexA, 10); const edgeED = new _GraphEdge.default(vertexE, vertexD, 1); const edgeDA = new _GraphEdge.default(vertexD, vertexA, -4); const edgeDC = new _GraphEdge.default(vertexD, vertexC, -1); const edgeAC = new _GraphEdge.default(vertexA, vertexC, 2); const edgeCB = new _GraphEdge.default(vertexC, vertexB, -2); const edgeBA = new _GraphEdge.default(vertexB, vertexA, 1); const graph = new _Graph.default(true); graph.addVertex(vertexH).addEdge(edgeSE).addEdge(edgeSA).addEdge(edgeED).addEdge(edgeDA).addEdge(edgeDC).addEdge(edgeAC).addEdge(edgeCB).addEdge(edgeBA); const { distances, previousVertices } = (0, _dijkstra.default)(graph, vertexS); expect(distances).toEqual({ H: Infinity, S: 0, A: 5, B: 5, C: 7, D: 9, E: 8 }); expect(previousVertices.H).toBeNull(); expect(previousVertices.S).toBeNull(); expect(previousVertices.B.getKey()).toBe('C'); expect(previousVertices.C.getKey()).toBe('A'); expect(previousVertices.A.getKey()).toBe('D'); expect(previousVertices.D.getKey()).toBe('E'); }); });