@prelude/array
Advanced tools
| export {}; |
| "use strict"; | ||
| var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||
| if (k2 === undefined) k2 = k; | ||
| Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); | ||
| }) : (function(o, m, k, k2) { | ||
| if (k2 === undefined) k2 = k; | ||
| o[k2] = m[k]; | ||
| })); | ||
| var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { | ||
| Object.defineProperty(o, "default", { enumerable: true, value: v }); | ||
| }) : function(o, v) { | ||
| o["default"] = v; | ||
| }); | ||
| var __importStar = (this && this.__importStar) || function (mod) { | ||
| if (mod && mod.__esModule) return mod; | ||
| var result = {}; | ||
| if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); | ||
| __setModuleDefault(result, mod); | ||
| return result; | ||
| }; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| const A = __importStar(require("./index.js")); | ||
| const p = _ => Array.from(A.permutations(_.split(''))).map(_ => _.join('')); | ||
| test('permutations', () => { | ||
| expect(p('')).toEqual([ | ||
| '' | ||
| ]); | ||
| expect(p('a')).toEqual([ | ||
| 'a' | ||
| ]); | ||
| expect(p('ab')).toEqual([ | ||
| 'ab', | ||
| 'ba' | ||
| ]); | ||
| expect(p('abc')).toEqual([ | ||
| 'abc', | ||
| 'bac', | ||
| 'cab', | ||
| 'acb', | ||
| 'bca', | ||
| 'cba' | ||
| ]); | ||
| expect(p('abcd')).toEqual([ | ||
| 'abcd', | ||
| 'bacd', | ||
| 'cabd', | ||
| 'acbd', | ||
| 'bcad', | ||
| 'cbad', | ||
| 'dbac', | ||
| 'bdac', | ||
| 'adbc', | ||
| 'dabc', | ||
| 'badc', | ||
| 'abdc', | ||
| 'acdb', | ||
| 'cadb', | ||
| 'dacb', | ||
| 'adcb', | ||
| 'cdab', | ||
| 'dcab', | ||
| 'dcba', | ||
| 'cdba', | ||
| 'bdca', | ||
| 'dbca', | ||
| 'cbda', | ||
| 'bcda' | ||
| ]); | ||
| }); | ||
| //# sourceMappingURL=permutations.test.js.map |
| {"version":3,"file":"permutations.test.js","sourceRoot":"","sources":["../src/permutations.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,8CAA+B;AAE/B,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;AAE3E,IAAI,CAAC,cAAc,EAAE,GAAG,EAAE;IACxB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QACpB,EAAE;KACH,CAAC,CAAA;IACF,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;QACrB,GAAG;KACJ,CAAC,CAAA;IACF,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;QACtB,IAAI;QACJ,IAAI;KACL,CAAC,CAAA;IACF,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;QACvB,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;KACN,CAAC,CAAA;IACF,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QACxB,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;KACP,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"} |
| export {}; |
| "use strict"; | ||
| var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||
| if (k2 === undefined) k2 = k; | ||
| Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); | ||
| }) : (function(o, m, k, k2) { | ||
| if (k2 === undefined) k2 = k; | ||
| o[k2] = m[k]; | ||
| })); | ||
| var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { | ||
| Object.defineProperty(o, "default", { enumerable: true, value: v }); | ||
| }) : function(o, v) { | ||
| o["default"] = v; | ||
| }); | ||
| var __importStar = (this && this.__importStar) || function (mod) { | ||
| if (mod && mod.__esModule) return mod; | ||
| var result = {}; | ||
| if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); | ||
| __setModuleDefault(result, mod); | ||
| return result; | ||
| }; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| const A = __importStar(require("./index.js")); | ||
| test('deleteSwapRandom', () => { | ||
| const a = A.indices(1000); | ||
| const b = A.clone(a); | ||
| expect(a).toEqual(b); | ||
| const c = []; | ||
| while (b.length) { | ||
| c.push(A.deleteSwapRandom(b)); | ||
| } | ||
| expect(c).toHaveLength(1000); | ||
| expect(A.sorted(c, A.Cmp.numbers)).toEqual(a); | ||
| }); | ||
| test('unique', () => { | ||
| expect(A.unique([3, 5, 5, 7, 3, 7], _ => _)).toEqual([3, 5, 7]); | ||
| }); | ||
| test('groups', () => { | ||
| expect(A.groups([3, 5, 4, 2, 5, 7, 2], _ => _ % 2)).toEqual([ | ||
| [3, 5, 5, 7], | ||
| [4, 2, 2] | ||
| ]); | ||
| }); | ||
| //# sourceMappingURL=simple.test.js.map |
| {"version":3,"file":"simple.test.js","sourceRoot":"","sources":["../src/simple.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,8CAA+B;AAE/B,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAC5B,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACzB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACpB,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IACpB,MAAM,CAAC,GAAa,EAAE,CAAA;IACtB,OAAO,CAAC,CAAC,MAAM,EAAE;QACf,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAA;KAC9B;IACD,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;IAC5B,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;AAC/C,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE;IAClB,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE,CAAC,CAAA;AACrE,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE;IAClB,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QAC5D,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE;QACd,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE;KACZ,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"} |
| const resolveSnapshotPath = | ||
| (testPath, snapshotExtension) => | ||
| testPath | ||
| .replace('.test' + '.js', '.test' + snapshotExtension) | ||
| .replace('/cjs/', '/src/') | ||
| const resolveTestPath = | ||
| (snapshotFilePath, snapshotExtension) => | ||
| snapshotFilePath | ||
| .replace(snapshotExtension, '.js') | ||
| .replace('/src/', '/cjs/') | ||
| const testPathForConsistencyCheck = | ||
| './cjs/index.test.js' | ||
| module.exports = { | ||
| resolveSnapshotPath, | ||
| resolveTestPath, | ||
| testPathForConsistencyCheck | ||
| } |
| export {}; |
| import * as A from './index.js'; | ||
| const p = _ => Array.from(A.permutations(_.split(''))).map(_ => _.join('')); | ||
| test('permutations', () => { | ||
| expect(p('')).toEqual([ | ||
| '' | ||
| ]); | ||
| expect(p('a')).toEqual([ | ||
| 'a' | ||
| ]); | ||
| expect(p('ab')).toEqual([ | ||
| 'ab', | ||
| 'ba' | ||
| ]); | ||
| expect(p('abc')).toEqual([ | ||
| 'abc', | ||
| 'bac', | ||
| 'cab', | ||
| 'acb', | ||
| 'bca', | ||
| 'cba' | ||
| ]); | ||
| expect(p('abcd')).toEqual([ | ||
| 'abcd', | ||
| 'bacd', | ||
| 'cabd', | ||
| 'acbd', | ||
| 'bcad', | ||
| 'cbad', | ||
| 'dbac', | ||
| 'bdac', | ||
| 'adbc', | ||
| 'dabc', | ||
| 'badc', | ||
| 'abdc', | ||
| 'acdb', | ||
| 'cadb', | ||
| 'dacb', | ||
| 'adcb', | ||
| 'cdab', | ||
| 'dcab', | ||
| 'dcba', | ||
| 'cdba', | ||
| 'bdca', | ||
| 'dbca', | ||
| 'cbda', | ||
| 'bcda' | ||
| ]); | ||
| }); | ||
| //# sourceMappingURL=permutations.test.js.map |
| {"version":3,"file":"permutations.test.js","sourceRoot":"","sources":["../src/permutations.test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,YAAY,CAAA;AAE/B,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;AAE3E,IAAI,CAAC,cAAc,EAAE,GAAG,EAAE;IACxB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QACpB,EAAE;KACH,CAAC,CAAA;IACF,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;QACrB,GAAG;KACJ,CAAC,CAAA;IACF,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;QACtB,IAAI;QACJ,IAAI;KACL,CAAC,CAAA;IACF,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;QACvB,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;KACN,CAAC,CAAA;IACF,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QACxB,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;KACP,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"} |
| export {}; |
| import * as A from './index.js'; | ||
| test('deleteSwapRandom', () => { | ||
| const a = A.indices(1000); | ||
| const b = A.clone(a); | ||
| expect(a).toEqual(b); | ||
| const c = []; | ||
| while (b.length) { | ||
| c.push(A.deleteSwapRandom(b)); | ||
| } | ||
| expect(c).toHaveLength(1000); | ||
| expect(A.sorted(c, A.Cmp.numbers)).toEqual(a); | ||
| }); | ||
| test('unique', () => { | ||
| expect(A.unique([3, 5, 5, 7, 3, 7], _ => _)).toEqual([3, 5, 7]); | ||
| }); | ||
| test('groups', () => { | ||
| expect(A.groups([3, 5, 4, 2, 5, 7, 2], _ => _ % 2)).toEqual([ | ||
| [3, 5, 5, 7], | ||
| [4, 2, 2] | ||
| ]); | ||
| }); | ||
| //# sourceMappingURL=simple.test.js.map |
| {"version":3,"file":"simple.test.js","sourceRoot":"","sources":["../src/simple.test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,YAAY,CAAA;AAE/B,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAC5B,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACzB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACpB,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IACpB,MAAM,CAAC,GAAa,EAAE,CAAA;IACtB,OAAO,CAAC,CAAC,MAAM,EAAE;QACf,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAA;KAC9B;IACD,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;IAC5B,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;AAC/C,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE;IAClB,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE,CAAC,CAAA;AACrE,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE;IAClB,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QAC5D,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE;QACd,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE;KACZ,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"} |
| import * as A from './index.js' | ||
| const p = _ => Array.from(A.permutations(_.split(''))).map(_ => _.join('')) | ||
| test('permutations', () => { | ||
| expect(p('')).toEqual([ | ||
| '' | ||
| ]) | ||
| expect(p('a')).toEqual([ | ||
| 'a' | ||
| ]) | ||
| expect(p('ab')).toEqual([ | ||
| 'ab', | ||
| 'ba' | ||
| ]) | ||
| expect(p('abc')).toEqual([ | ||
| 'abc', | ||
| 'bac', | ||
| 'cab', | ||
| 'acb', | ||
| 'bca', | ||
| 'cba' | ||
| ]) | ||
| expect(p('abcd')).toEqual([ | ||
| 'abcd', | ||
| 'bacd', | ||
| 'cabd', | ||
| 'acbd', | ||
| 'bcad', | ||
| 'cbad', | ||
| 'dbac', | ||
| 'bdac', | ||
| 'adbc', | ||
| 'dabc', | ||
| 'badc', | ||
| 'abdc', | ||
| 'acdb', | ||
| 'cadb', | ||
| 'dacb', | ||
| 'adcb', | ||
| 'cdab', | ||
| 'dcab', | ||
| 'dcba', | ||
| 'cdba', | ||
| 'bdca', | ||
| 'dbca', | ||
| 'cbda', | ||
| 'bcda' | ||
| ]) | ||
| }) |
| import * as A from './index.js' | ||
| test('deleteSwapRandom', () => { | ||
| const a = A.indices(1000) | ||
| const b = A.clone(a) | ||
| expect(a).toEqual(b) | ||
| const c: number[] = [] | ||
| while (b.length) { | ||
| c.push(A.deleteSwapRandom(b)) | ||
| } | ||
| expect(c).toHaveLength(1000) | ||
| expect(A.sorted(c, A.Cmp.numbers)).toEqual(a) | ||
| }) | ||
| test('unique', () => { | ||
| expect(A.unique([ 3, 5, 5, 7, 3, 7 ], _ => _)).toEqual([ 3, 5, 7 ]) | ||
| }) | ||
| test('groups', () => { | ||
| expect(A.groups([ 3, 5, 4, 2, 5, 7, 2 ], _ => _ % 2)).toEqual([ | ||
| [ 3, 5, 5, 7 ], | ||
| [ 4, 2, 2 ] | ||
| ]) | ||
| }) |
+1
-1
| /** | ||
| * Like `at` but wraps using modulo on length. | ||
| * @throws {TypeError} if array is empty or index is negative or not safe integer. | ||
| * @throws {TypeError} if array is empty or index is not a safe integer. | ||
| */ | ||
| declare const modulo: <T>(values: T[], index: number) => T; | ||
| export default modulo; |
+7
-6
@@ -5,14 +5,15 @@ "use strict"; | ||
| * Like `at` but wraps using modulo on length. | ||
| * @throws {TypeError} if array is empty or index is negative or not safe integer. | ||
| * @throws {TypeError} if array is empty or index is not a safe integer. | ||
| */ | ||
| const modulo = (values, index) => { | ||
| if (values.length === 0) { | ||
| if (!Number.isSafeInteger(index)) { | ||
| throw new TypeError(`Expected safe integer index, got ${index}.`); | ||
| } | ||
| const n = values.length; | ||
| if (n === 0) { | ||
| throw new TypeError('Expected non empty array.'); | ||
| } | ||
| if (!Number.isSafeInteger(index) || index < 0) { | ||
| throw new TypeError(`Expected non negative safe integer index, got ${index}.`); | ||
| } | ||
| return values[index % values.length]; | ||
| return values[((index % n) + n) % n]; | ||
| }; | ||
| exports.default = modulo; | ||
| //# sourceMappingURL=modulo.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"modulo.js","sourceRoot":"","sources":["../src/modulo.ts"],"names":[],"mappings":";;AAAA;;;GAGG;AACH,MAAM,MAAM,GACV,CAAI,MAAW,EAAE,KAAa,EAAK,EAAE;IACnC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QACvB,MAAM,IAAI,SAAS,CAAC,2BAA2B,CAAC,CAAA;KACjD;IACD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE;QAC7C,MAAM,IAAI,SAAS,CAAC,iDAAiD,KAAK,GAAG,CAAC,CAAA;KAC/E;IACD,OAAO,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;AACtC,CAAC,CAAA;AAEH,kBAAe,MAAM,CAAA"} | ||
| {"version":3,"file":"modulo.js","sourceRoot":"","sources":["../src/modulo.ts"],"names":[],"mappings":";;AAAA;;;GAGG;AACH,MAAM,MAAM,GACV,CAAI,MAAW,EAAE,KAAa,EAAK,EAAE;IACnC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;QAChC,MAAM,IAAI,SAAS,CAAC,oCAAoC,KAAK,GAAG,CAAC,CAAA;KAClE;IACD,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAA;IACvB,IAAI,CAAC,KAAK,CAAC,EAAE;QACX,MAAM,IAAI,SAAS,CAAC,2BAA2B,CAAC,CAAA;KACjD;IACD,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;AACtC,CAAC,CAAA;AAEH,kBAAe,MAAM,CAAA"} |
+1
-4
@@ -13,7 +13,4 @@ clean: | ||
| build-test: | ||
| @npx tsc -m commonjs -p test/tsconfig.json | ||
| build: build-cjs build-mjs | ||
| build: build-cjs build-mjs build-test | ||
| rebuild: clean build | ||
@@ -20,0 +17,0 @@ |
+1
-1
| /** | ||
| * Like `at` but wraps using modulo on length. | ||
| * @throws {TypeError} if array is empty or index is negative or not safe integer. | ||
| * @throws {TypeError} if array is empty or index is not a safe integer. | ||
| */ | ||
| declare const modulo: <T>(values: T[], index: number) => T; | ||
| export default modulo; |
+7
-6
| /** | ||
| * Like `at` but wraps using modulo on length. | ||
| * @throws {TypeError} if array is empty or index is negative or not safe integer. | ||
| * @throws {TypeError} if array is empty or index is not a safe integer. | ||
| */ | ||
| const modulo = (values, index) => { | ||
| if (values.length === 0) { | ||
| if (!Number.isSafeInteger(index)) { | ||
| throw new TypeError(`Expected safe integer index, got ${index}.`); | ||
| } | ||
| const n = values.length; | ||
| if (n === 0) { | ||
| throw new TypeError('Expected non empty array.'); | ||
| } | ||
| if (!Number.isSafeInteger(index) || index < 0) { | ||
| throw new TypeError(`Expected non negative safe integer index, got ${index}.`); | ||
| } | ||
| return values[index % values.length]; | ||
| return values[((index % n) + n) % n]; | ||
| }; | ||
| export default modulo; | ||
| //# sourceMappingURL=modulo.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"modulo.js","sourceRoot":"","sources":["../src/modulo.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,GACV,CAAI,MAAW,EAAE,KAAa,EAAK,EAAE;IACnC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;QACvB,MAAM,IAAI,SAAS,CAAC,2BAA2B,CAAC,CAAA;KACjD;IACD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE;QAC7C,MAAM,IAAI,SAAS,CAAC,iDAAiD,KAAK,GAAG,CAAC,CAAA;KAC/E;IACD,OAAO,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;AACtC,CAAC,CAAA;AAEH,eAAe,MAAM,CAAA"} | ||
| {"version":3,"file":"modulo.js","sourceRoot":"","sources":["../src/modulo.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,GACV,CAAI,MAAW,EAAE,KAAa,EAAK,EAAE;IACnC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;QAChC,MAAM,IAAI,SAAS,CAAC,oCAAoC,KAAK,GAAG,CAAC,CAAA;KAClE;IACD,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAA;IACvB,IAAI,CAAC,KAAK,CAAC,EAAE;QACX,MAAM,IAAI,SAAS,CAAC,2BAA2B,CAAC,CAAA;KACjD;IACD,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;AACtC,CAAC,CAAA;AAEH,eAAe,MAAM,CAAA"} |
+6
-6
| { | ||
| "name": "@prelude/array", | ||
| "version": "2.2.0", | ||
| "version": "2.3.0", | ||
| "description": "Array module.", | ||
@@ -29,9 +29,9 @@ "type": "module", | ||
| "@tsconfig/node16": "1.0.2", | ||
| "@types/jest": "27.0.3", | ||
| "eslint": "8.5.0", | ||
| "jest": "27.4.5", | ||
| "typescript": "4.5.4" | ||
| "@types/jest": "27.4.0", | ||
| "eslint": "8.8.0", | ||
| "jest": "27.4.7", | ||
| "typescript": "4.5.5" | ||
| }, | ||
| "dependencies": { | ||
| "@prelude/cmp": "1.4.3" | ||
| "@prelude/cmp": "2.0.0" | ||
| }, | ||
@@ -38,0 +38,0 @@ "module": "./mjs/index.js", |
+7
-6
| /** | ||
| * Like `at` but wraps using modulo on length. | ||
| * @throws {TypeError} if array is empty or index is negative or not safe integer. | ||
| * @throws {TypeError} if array is empty or index is not a safe integer. | ||
| */ | ||
| const modulo = | ||
| <T>(values: T[], index: number): T => { | ||
| if (values.length === 0) { | ||
| if (!Number.isSafeInteger(index)) { | ||
| throw new TypeError(`Expected safe integer index, got ${index}.`) | ||
| } | ||
| const n = values.length | ||
| if (n === 0) { | ||
| throw new TypeError('Expected non empty array.') | ||
| } | ||
| if (!Number.isSafeInteger(index) || index < 0) { | ||
| throw new TypeError(`Expected non negative safe integer index, got ${index}.`) | ||
| } | ||
| return values[index % values.length] | ||
| return values[((index % n) + n) % n] | ||
| } | ||
| export default modulo |
88616
14.69%238
6.73%1599
20.59%+ Added
- Removed
Updated