UNPKG

dist-javascript-algorithms-and-data-structures

Version:

Algorithms and data-structures implemented on JavaScript

70 lines (64 loc) 4.01 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 _hamiltonianCycle = _interopRequireDefault(require("../hamiltonianCycle")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } describe('hamiltonianCycle', () => { it('should find hamiltonian paths in 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 edgeAB = new _GraphEdge.default(vertexA, vertexB); const edgeAE = new _GraphEdge.default(vertexA, vertexE); const edgeAC = new _GraphEdge.default(vertexA, vertexC); const edgeBE = new _GraphEdge.default(vertexB, vertexE); const edgeBC = new _GraphEdge.default(vertexB, vertexC); const edgeBD = new _GraphEdge.default(vertexB, vertexD); const edgeCD = new _GraphEdge.default(vertexC, vertexD); const edgeDE = new _GraphEdge.default(vertexD, vertexE); const graph = new _Graph.default(); graph.addEdge(edgeAB).addEdge(edgeAE).addEdge(edgeAC).addEdge(edgeBE).addEdge(edgeBC).addEdge(edgeBD).addEdge(edgeCD).addEdge(edgeDE); const hamiltonianCycleSet = (0, _hamiltonianCycle.default)(graph); expect(hamiltonianCycleSet.length).toBe(8); expect(hamiltonianCycleSet[0][0].getKey()).toBe(vertexA.getKey()); expect(hamiltonianCycleSet[0][1].getKey()).toBe(vertexB.getKey()); expect(hamiltonianCycleSet[0][2].getKey()).toBe(vertexE.getKey()); expect(hamiltonianCycleSet[0][3].getKey()).toBe(vertexD.getKey()); expect(hamiltonianCycleSet[0][4].getKey()).toBe(vertexC.getKey()); expect(hamiltonianCycleSet[1][0].getKey()).toBe(vertexA.getKey()); expect(hamiltonianCycleSet[1][1].getKey()).toBe(vertexB.getKey()); expect(hamiltonianCycleSet[1][2].getKey()).toBe(vertexC.getKey()); expect(hamiltonianCycleSet[1][3].getKey()).toBe(vertexD.getKey()); expect(hamiltonianCycleSet[1][4].getKey()).toBe(vertexE.getKey()); expect(hamiltonianCycleSet[2][0].getKey()).toBe(vertexA.getKey()); expect(hamiltonianCycleSet[2][1].getKey()).toBe(vertexE.getKey()); expect(hamiltonianCycleSet[2][2].getKey()).toBe(vertexB.getKey()); expect(hamiltonianCycleSet[2][3].getKey()).toBe(vertexD.getKey()); expect(hamiltonianCycleSet[2][4].getKey()).toBe(vertexC.getKey()); expect(hamiltonianCycleSet[3][0].getKey()).toBe(vertexA.getKey()); expect(hamiltonianCycleSet[3][1].getKey()).toBe(vertexE.getKey()); expect(hamiltonianCycleSet[3][2].getKey()).toBe(vertexD.getKey()); expect(hamiltonianCycleSet[3][3].getKey()).toBe(vertexB.getKey()); expect(hamiltonianCycleSet[3][4].getKey()).toBe(vertexC.getKey()); }); it('should return false for graph without Hamiltonian path', () => { 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 edgeAB = new _GraphEdge.default(vertexA, vertexB); const edgeAE = new _GraphEdge.default(vertexA, vertexE); const edgeBE = new _GraphEdge.default(vertexB, vertexE); const edgeBC = new _GraphEdge.default(vertexB, vertexC); const edgeBD = new _GraphEdge.default(vertexB, vertexD); const edgeCD = new _GraphEdge.default(vertexC, vertexD); const graph = new _Graph.default(); graph.addEdge(edgeAB).addEdge(edgeAE).addEdge(edgeBE).addEdge(edgeBC).addEdge(edgeBD).addEdge(edgeCD); const hamiltonianCycleSet = (0, _hamiltonianCycle.default)(graph); expect(hamiltonianCycleSet.length).toBe(0); }); });