UNPKG

lin-kernighan

Version:

Adaptive k-opt heuristic improving TSP tours by swapping edges to shorten routes.

168 lines (167 loc) 4.93 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const _nodetest = /*#__PURE__*/ _interop_require_default(require("node:test")); const _nodeassert = /*#__PURE__*/ _interop_require_default(require("node:assert")); const _ = /*#__PURE__*/ _interop_require_default(require(".")); function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const testPoints = [ { latitude: 40.7128, longitude: -74.006 }, { latitude: 34.0522, longitude: -118.2437 }, { latitude: -33.8688, longitude: 151.2093 }, { latitude: 55.7558, longitude: 37.6173 }, { latitude: -22.9068, longitude: -43.1729 } // Rio de Janeiro ]; (0, _nodetest.default)('should handle empty array', ()=>{ const result = (0, _.default)([]); _nodeassert.default.deepStrictEqual(result, []); }); (0, _nodetest.default)('should handle single point', ()=>{ const points = [ { latitude: 40.7128, longitude: -74.006 } ]; const result = (0, _.default)(points); _nodeassert.default.deepStrictEqual(result, points); }); (0, _nodetest.default)('should handle two points', ()=>{ const points = [ { latitude: 40.7128, longitude: -74.006 }, { latitude: 34.0522, longitude: -118.2437 } ]; const result = (0, _.default)(points); _nodeassert.default.strictEqual(result.length, 2); _nodeassert.default.deepStrictEqual(result, points); }); (0, _nodetest.default)('should return valid tour for three points', ()=>{ const points = [ { latitude: 0, longitude: 0 }, { latitude: 1, longitude: 0 }, { latitude: 0, longitude: 1 } ]; const result = (0, _.default)(points); _nodeassert.default.strictEqual(result.length, 3); // Verify all original points are included for (const point of points){ (0, _nodeassert.default)(result.some((p)=>p.latitude === point.latitude && p.longitude === point.longitude)); } }); (0, _nodetest.default)('should optimize tour for README example points', ()=>{ const result = (0, _.default)(testPoints); _nodeassert.default.strictEqual(result.length, 5); // Verify all original points are included for (const point of testPoints){ (0, _nodeassert.default)(result.some((p)=>p.latitude === point.latitude && p.longitude === point.longitude)); } // The algorithm should produce a valid tour (0, _nodeassert.default)(Array.isArray(result)); (0, _nodeassert.default)(result.every((point)=>typeof point.latitude === 'number' && typeof point.longitude === 'number')); }); (0, _nodetest.default)('should handle duplicate coordinates', ()=>{ const points = [ { latitude: 40.7128, longitude: -74.006 }, { latitude: 40.7128, longitude: -74.006 }, { latitude: 34.0522, longitude: -118.2437 } ]; const result = (0, _.default)(points); _nodeassert.default.strictEqual(result.length, 3); // Should still include all points even if duplicated for (const point of points){ (0, _nodeassert.default)(result.some((p)=>p.latitude === point.latitude && p.longitude === point.longitude)); } }); (0, _nodetest.default)('should produce consistent results', ()=>{ const result1 = (0, _.default)(testPoints); const result2 = (0, _.default)(testPoints); // Results should be deterministic _nodeassert.default.deepStrictEqual(result1, result2); }); (0, _nodetest.default)('should handle larger dataset', ()=>{ const largePoints = [ { latitude: 40.7128, longitude: -74.006 }, { latitude: 34.0522, longitude: -118.2437 }, { latitude: 41.8781, longitude: -87.6298 }, { latitude: 29.7604, longitude: -95.3698 }, { latitude: 39.9526, longitude: -75.1652 }, { latitude: 33.4484, longitude: -112.074 }, { latitude: 37.7749, longitude: -122.4194 }, { latitude: 32.7767, longitude: -96.797 } // Dallas ]; const result = (0, _.default)(largePoints); _nodeassert.default.strictEqual(result.length, 8); // Verify all points are included for (const point of largePoints){ (0, _nodeassert.default)(result.some((p)=>p.latitude === point.latitude && p.longitude === point.longitude)); } }); //# sourceMappingURL=index.test.js.map