@gkucmierz/utils 1.28.3 → 1.28.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/README.md +55 -4
  2. package/package.json +31 -2
  3. package/src/SetCnt.mjs +52 -6
  4. package/src/Trie.mjs +35 -2
  5. package/src/base64.mjs +24 -0
  6. package/src/bijective-numeration.mjs +24 -0
  7. package/src/binary-search.mjs +25 -5
  8. package/src/copy-case.mjs +5 -5
  9. package/src/egcd.mjs +8 -0
  10. package/src/factors.mjs +6 -8
  11. package/src/gcd.mjs +8 -8
  12. package/src/get-type.mjs +6 -2
  13. package/src/gpn.mjs +14 -0
  14. package/src/heap.mjs +26 -0
  15. package/src/herons-formula.mjs +17 -0
  16. package/src/lcm.mjs +13 -0
  17. package/src/list-node.mjs +19 -0
  18. package/src/matrix.mjs +6 -3
  19. package/src/memoize.mjs +5 -5
  20. package/src/mod.mjs +8 -14
  21. package/src/phi.mjs +13 -0
  22. package/src/pow-mod.mjs +12 -12
  23. package/src/range-array.mjs +12 -0
  24. package/src/square-root.mjs +6 -8
  25. package/src/tonelli-shanks.mjs +7 -2
  26. package/.github/workflows/deploy-docs.yml +0 -22
  27. package/.github/workflows/npm-publish.yml +0 -25
  28. package/.husky/pre-commit +0 -4
  29. package/jsdoc.json +0 -10
  30. package/package-lock.json +0 -1422
  31. package/scripts/generate_main.mjs +0 -43
  32. package/spec/SetCnt.spec.mjs +0 -58
  33. package/spec/Trie.spec.mjs +0 -69
  34. package/spec/base64.spec.mjs +0 -29
  35. package/spec/bijective-numeration.spec.mjs +0 -123
  36. package/spec/binary-search.spec.mjs +0 -91
  37. package/spec/copy-case.spec.mjs +0 -12
  38. package/spec/factors.spec.mjs +0 -35
  39. package/spec/gcd.spec.mjs +0 -27
  40. package/spec/get-type.spec.mjs +0 -75
  41. package/spec/gpn.spec.mjs +0 -35
  42. package/spec/heap.spec.mjs +0 -32
  43. package/spec/herons-formula.spec.mjs +0 -41
  44. package/spec/list-node.spec.mjs +0 -33
  45. package/spec/main.spec.mjs +0 -8
  46. package/spec/matrix.spec.mjs +0 -19
  47. package/spec/memoize.spec.mjs +0 -46
  48. package/spec/mod.spec.mjs +0 -39
  49. package/spec/phi.spec.mjs +0 -60
  50. package/spec/pow-mod.spec.mjs +0 -21
  51. package/spec/range-array.spec.mjs +0 -19
  52. package/spec/square-root.spec.mjs +0 -22
  53. package/spec/support/jasmine.json +0 -16
  54. package/spec/tonelli-shanks.spec.mjs +0 -15
@@ -1,33 +0,0 @@
1
-
2
- import { ListNode } from '../src/list-node.mjs';
3
-
4
- describe('ListNode', () => {
5
- it('constructor', () => {
6
- expect(new ListNode().val).toEqual(0);
7
- expect(new ListNode().next).toEqual(null);
8
- expect(new ListNode(123).val).toEqual(123);
9
- expect(new ListNode(123).next).toEqual(null);
10
- expect(new ListNode(123, 'next').next).toEqual('next');
11
- });
12
-
13
- it('toArr', () => {
14
- expect(new ListNode().toArr()).toEqual([0]);
15
- expect(new ListNode(123).toArr()).toEqual([123]);
16
- expect(new ListNode(1, new ListNode(2)).toArr()).toEqual([1, 2]);
17
- });
18
-
19
- it('fromArr', () => {
20
- expect(ListNode.fromArr([1, 2])).toEqual(new ListNode(1, new ListNode(2)));
21
- });
22
-
23
- it('both', () => {
24
- const arr = [1, 2, 3, 4, 5];
25
- expect(ListNode.fromArr(arr).toArr()).toEqual(arr);
26
- });
27
-
28
- it('cyclic reference', () => {
29
- const node = ListNode.fromArr([1, 2]);
30
- node.next.next = node;
31
- expect(() => node.toArr()).toThrow(new Error('Cyclic reference detected'));
32
- });
33
- });
@@ -1,8 +0,0 @@
1
-
2
- import * as all from '../main.mjs';
3
-
4
- describe('main', () => {
5
- it('default', () => {
6
- expect(all.default).toBeDefined();
7
- });
8
- });
@@ -1,19 +0,0 @@
1
-
2
- import {
3
- matrixAsArray,
4
- } from '../src/matrix.mjs';
5
-
6
- describe('matrix', () => {
7
- it('matrixAsArray', () => {
8
- const m = [
9
- [1, 2],
10
- [3, 4],
11
- ];
12
- const arr = matrixAsArray(m);
13
- expect(arr.length).toBe(4);
14
- expect(arr[0]).toBe(1);
15
- expect(arr[1]).toBe(2);
16
- expect(arr[2]).toBe(3);
17
- expect(arr[3]).toBe(4);
18
- });
19
- });
@@ -1,46 +0,0 @@
1
-
2
- import {
3
- memoize,
4
- } from '../src/memoize.mjs';
5
-
6
- describe('memoize', () => {
7
- it('called once', () => {
8
- let cnt = 0;
9
- const add = memoize((a, b) => {
10
- ++cnt;
11
- return a + b;
12
- });
13
-
14
- expect(add(1, 2)).toBe(3);
15
- expect(cnt).toBe(1);
16
- expect(add(1, 2)).toBe(3);
17
- expect(cnt).toBe(1);
18
-
19
- expect(add(2, 1)).toBe(3);
20
- expect(cnt).toBe(2);
21
- });
22
-
23
- it('variable args length', () => {
24
- const fn = memoize((...args) => args.length);
25
-
26
- expect(fn()).toBe(0);
27
- expect(fn(1)).toBe(1);
28
- expect(fn(1, 2)).toBe(2);
29
- expect(fn(1, 2, 3)).toBe(3);
30
- });
31
-
32
- it('different empty object arrays', () => {
33
- let cnt = 0;
34
- const fn = memoize(() => ++cnt);
35
- const emptyArr = [];
36
- fn(emptyArr);
37
- expect(cnt).toBe(1);
38
- fn(emptyArr);
39
- expect(cnt).toBe(1);
40
- fn([]);
41
- expect(cnt).toBe(2);
42
- fn([]);
43
- expect(cnt).toBe(3);
44
- });
45
- });
46
-
package/spec/mod.spec.mjs DELETED
@@ -1,39 +0,0 @@
1
-
2
- import {
3
- mod,
4
- modBI,
5
- } from '../src/mod.mjs';
6
-
7
- describe('mod', () => {
8
- it('mod', () => {
9
- expect(mod(4, 100)).toEqual(4);
10
- expect(mod(104, 100)).toEqual(4);
11
- expect(mod(4 - 100, 100)).toEqual(4);
12
- expect(mod(4 + 96, 100)).toEqual(0);
13
- expect(mod(-4 - 96, 100)).toEqual(0);
14
- });
15
-
16
- it('mod sign', () => {
17
- expect(mod(4, 100)).toEqual(4);
18
- expect(mod(-4, 100)).toEqual(96);
19
- expect(mod(4, -100)).toEqual(-96);
20
- expect(mod(-4, -100)).toEqual(-4);
21
- });
22
- });
23
-
24
- describe('mod BI', () => {
25
- it('mod', () => {
26
- expect(modBI(4n, 100n)).toEqual(4n);
27
- expect(modBI(104n, 100n)).toEqual(4n);
28
- expect(modBI(4n - 100n, 100n)).toEqual(4n);
29
- expect(modBI(4n + 96n, 100n)).toEqual(0n);
30
- expect(modBI(-4n - 96n, 100n)).toEqual(0n);
31
- });
32
-
33
- it('mod sign', () => {
34
- expect(modBI(4n, 100n)).toEqual(4n);
35
- expect(modBI(-4n, 100n)).toEqual(96n);
36
- expect(modBI(4n, -100n)).toEqual(-96n);
37
- expect(modBI(-4n, -100n)).toEqual(-4n);
38
- });
39
- });
package/spec/phi.spec.mjs DELETED
@@ -1,60 +0,0 @@
1
-
2
- import {
3
- phi,
4
- phiBI,
5
- } from '../src/phi.mjs';
6
-
7
- describe('phi', () => {
8
- it('Number x1', () => {
9
- expect(phi(1)).toBe(1);
10
- expect(phi(11)).toBe(10);
11
- expect(phi(21)).toBe(12);
12
- expect(phi(31)).toBe(30);
13
- expect(phi(41)).toBe(40);
14
- expect(phi(51)).toBe(32);
15
- expect(phi(61)).toBe(60);
16
- expect(phi(71)).toBe(70);
17
- expect(phi(81)).toBe(54);
18
- expect(phi(91)).toBe(72);
19
- });
20
-
21
- it('Number x5', () => {
22
- expect(phi(5)).toBe(4);
23
- expect(phi(15)).toBe(8);
24
- expect(phi(25)).toBe(20);
25
- expect(phi(35)).toBe(24);
26
- expect(phi(45)).toBe(24);
27
- expect(phi(55)).toBe(40);
28
- expect(phi(65)).toBe(48);
29
- expect(phi(75)).toBe(40);
30
- expect(phi(85)).toBe(64);
31
- expect(phi(95)).toBe(72);
32
- });
33
-
34
- it('BigInt x1', () => {
35
- expect(phiBI(1n)).toBe(1n);
36
- expect(phiBI(11n)).toBe(10n);
37
- expect(phiBI(21n)).toBe(12n);
38
- expect(phiBI(31n)).toBe(30n);
39
- expect(phiBI(41n)).toBe(40n);
40
- expect(phiBI(51n)).toBe(32n);
41
- expect(phiBI(61n)).toBe(60n);
42
- expect(phiBI(71n)).toBe(70n);
43
- expect(phiBI(81n)).toBe(54n);
44
- expect(phiBI(91n)).toBe(72n);
45
- });
46
-
47
- it('BigInt x5', () => {
48
- expect(phiBI(5n)).toBe(4n);
49
- expect(phiBI(15n)).toBe(8n);
50
- expect(phiBI(25n)).toBe(20n);
51
- expect(phiBI(35n)).toBe(24n);
52
- expect(phiBI(45n)).toBe(24n);
53
- expect(phiBI(55n)).toBe(40n);
54
- expect(phiBI(65n)).toBe(48n);
55
- expect(phiBI(75n)).toBe(40n);
56
- expect(phiBI(85n)).toBe(64n);
57
- expect(phiBI(95n)).toBe(72n);
58
- });
59
- });
60
-
@@ -1,21 +0,0 @@
1
-
2
- import {
3
- powMod,
4
- powModBI,
5
- } from '../src/pow-mod.mjs';
6
-
7
- describe('pow-mod', () => {
8
- it('powMod', () => {
9
- expect(powMod(2, 1)).toEqual(2);
10
- expect(powMod(2, 1, 10)).toEqual(2);
11
- expect(powMod(2, 1, 2)).toEqual(0);
12
- expect(powMod(2, 0, 2)).toEqual(1);
13
- });
14
-
15
- it('powModBI', () => {
16
- expect(powModBI(2n, 1n)).toEqual(2n);
17
- expect(powModBI(2n, 1n, 10n)).toEqual(2n);
18
- expect(powModBI(2n, 1n, 2n)).toEqual(0n);
19
- expect(powModBI(2n, 0n, 2n)).toEqual(1n);
20
- });
21
- });
@@ -1,19 +0,0 @@
1
-
2
- import {
3
- range2array,
4
- array2range,
5
- } from '../src/range-array.mjs';
6
-
7
- describe('range-array', () => {
8
- it('array2range', () => {
9
- expect(array2range([])).toEqual([]);
10
- expect(array2range([1,3,4,5,7,9,10])).toEqual([[1,1],[3,5],[7,7],[9,10]]);
11
- expect(array2range([10,12,13,14,15,16,17,20,22,23,27])).toEqual([[10,10],[12,17],[20,20],[22,23],[27,27]]);
12
- });
13
-
14
- it('range2array', () => {
15
- expect(range2array([])).toEqual([]);
16
- expect(range2array([[1],[3,5],[7],[9,10]])).toEqual([1,3,4,5,7,9,10]);
17
- expect(range2array([[10],[12,17],[20],[22,23],[27]])).toEqual([10,12,13,14,15,16,17,20,22,23,27]);
18
- });
19
- });
@@ -1,22 +0,0 @@
1
-
2
- import {
3
- squareRoot,
4
- squareRootBI,
5
- } from '../src/square-root.mjs';
6
-
7
- describe('square-root', () => {
8
- it('squareRootBI small', () => {
9
- expect(squareRootBI(0n)).toEqual(0n);
10
- expect(squareRootBI(1n)).toEqual(1n);
11
- expect(squareRootBI(2n)).toEqual(1n);
12
- expect(squareRootBI(3n)).toEqual(1n);
13
- expect(squareRootBI(4n)).toEqual(2n);
14
- });
15
-
16
- it('squareRootBI 0-1e3', () => {
17
- for (let i = 0; i < 1e3; ++i) {
18
- const sqf = BigInt(Math.floor(i ** 0.5));
19
- expect(squareRootBI(BigInt(i))).toEqual(sqf);
20
- }
21
- });
22
- });
@@ -1,16 +0,0 @@
1
- {
2
- "spec_dir": "spec",
3
- "spec_files": [
4
- "**/*[sS]pec.?(m)js"
5
- ],
6
- "helpers": [
7
- "helpers/**/*.?(m)js"
8
- ],
9
- "env": {
10
- "stopSpecOnExpectationFailure": false,
11
- "random": true
12
- },
13
- "client": {
14
- "captureConsole": false
15
- }
16
- }
@@ -1,15 +0,0 @@
1
-
2
- import {
3
- tonelliShanksBI,
4
- } from '../src/tonelli-shanks.mjs';
5
-
6
- describe('tonelli-shanks', () => {
7
- it('tonelliShanksBI', () => {
8
- const a = 8479994658316772151941616510097127087554541274812435112009425778595495359700244470400642403747058566807127814165396640215844192327900454116257979487432016769329970767046735091249898678088061634796559556704959846424131820416048436501387617211770124292793308079214153179977624440438616958575058361193975686620046439877308339989295604537867493683872778843921771307305602776398786978353866231661453376056771972069776398999013769588936194859344941268223184197231368887060609212875507518936172060702209557124430477137421847130682601666968691651447236917018634902407704797328509461854842432015009878011354022108661461024768n;
9
- const p = 30531851861994333252675935111487950694414332763909083514133769861350960895076504687261369815735742549428789138300843082086550059082835141454526618160634109969195486322015775943030060449557090064811940139431735209185996454739163555910726493597222646855506445602953689527405362207926990442391705014604777038685880527537489845359101552442292804398472642356609304810680731556542002301547846635101455995732584071355903010856718680732337369128498655255277003643669031694516851390505923416710601212618443109844041514942401969629158975457079026906304328749039997262960301209158175920051890620947063936347307238412281568760161n;
10
- const r = tonelliShanksBI(a, p);
11
-
12
- expect((r * r) % p).toEqual(a);
13
- });
14
-
15
- });