dist-javascript-algorithms-and-data-structures
Version:
Algorithms and data-structures implemented on JavaScript
70 lines (64 loc) • 4.01 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 _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);
});
});