UNPKG

dist-javascript-algorithms-and-data-structures

Version:

Algorithms and data-structures implemented on JavaScript

68 lines (61 loc) 3.53 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 _prim = _interopRequireDefault(require("../prim")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } describe('prim', () => { it('should fire an error for directed graph', () => { function applyPrimToDirectedGraph() { const graph = new _Graph.default(true); (0, _prim.default)(graph); } expect(applyPrimToDirectedGraph).toThrowError(); }); it('should find minimum spanning tree', () => { 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 edgeAB = new _GraphEdge.default(vertexA, vertexB, 2); const edgeAD = new _GraphEdge.default(vertexA, vertexD, 3); const edgeAC = new _GraphEdge.default(vertexA, vertexC, 3); const edgeBC = new _GraphEdge.default(vertexB, vertexC, 4); const edgeBE = new _GraphEdge.default(vertexB, vertexE, 3); const edgeDF = new _GraphEdge.default(vertexD, vertexF, 7); const edgeEC = new _GraphEdge.default(vertexE, vertexC, 1); const edgeEF = new _GraphEdge.default(vertexE, vertexF, 8); const edgeFG = new _GraphEdge.default(vertexF, vertexG, 9); const edgeFC = new _GraphEdge.default(vertexF, vertexC, 6); const graph = new _Graph.default(); graph.addEdge(edgeAB).addEdge(edgeAD).addEdge(edgeAC).addEdge(edgeBC).addEdge(edgeBE).addEdge(edgeDF).addEdge(edgeEC).addEdge(edgeEF).addEdge(edgeFC).addEdge(edgeFG); expect(graph.getWeight()).toEqual(46); const minimumSpanningTree = (0, _prim.default)(graph); expect(minimumSpanningTree.getWeight()).toBe(24); expect(minimumSpanningTree.getAllVertices().length).toBe(graph.getAllVertices().length); expect(minimumSpanningTree.getAllEdges().length).toBe(graph.getAllVertices().length - 1); expect(minimumSpanningTree.toString()).toBe('A,B,C,E,D,F,G'); }); it('should find minimum spanning tree for simple 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 edgeAB = new _GraphEdge.default(vertexA, vertexB, 1); const edgeAD = new _GraphEdge.default(vertexA, vertexD, 3); const edgeBC = new _GraphEdge.default(vertexB, vertexC, 1); const edgeBD = new _GraphEdge.default(vertexB, vertexD, 3); const edgeCD = new _GraphEdge.default(vertexC, vertexD, 1); const graph = new _Graph.default(); graph.addEdge(edgeAB).addEdge(edgeAD).addEdge(edgeBC).addEdge(edgeBD).addEdge(edgeCD); expect(graph.getWeight()).toEqual(9); const minimumSpanningTree = (0, _prim.default)(graph); expect(minimumSpanningTree.getWeight()).toBe(3); expect(minimumSpanningTree.getAllVertices().length).toBe(graph.getAllVertices().length); expect(minimumSpanningTree.getAllEdges().length).toBe(graph.getAllVertices().length - 1); expect(minimumSpanningTree.toString()).toBe('A,B,C,D'); }); });