dist-javascript-algorithms-and-data-structures
Version:
Algorithms and data-structures implemented on JavaScript
68 lines (61 loc) • 3.53 kB
JavaScript
"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');
});
});