data-structure-typed 1.52.6 → 1.52.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.
- package/CHANGELOG.md +1 -1
- package/README.md +33 -30
- package/benchmark/report.html +13 -13
- package/benchmark/report.json +156 -156
- package/dist/cjs/constants/index.d.ts +4 -0
- package/dist/cjs/constants/index.js +9 -0
- package/dist/cjs/constants/index.js.map +1 -0
- package/dist/cjs/data-structures/base/iterable-element-base.d.ts +8 -1
- package/dist/cjs/data-structures/base/iterable-element-base.js +10 -1
- package/dist/cjs/data-structures/base/iterable-element-base.js.map +1 -1
- package/dist/cjs/data-structures/base/iterable-entry-base.d.ts +8 -1
- package/dist/cjs/data-structures/base/iterable-entry-base.js +10 -10
- package/dist/cjs/data-structures/base/iterable-entry-base.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +31 -32
- package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js +43 -44
- package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/avl-tree.d.ts +23 -24
- package/dist/cjs/data-structures/binary-tree/avl-tree.js +71 -64
- package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/binary-indexed-tree.js +2 -2
- package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +534 -402
- package/dist/cjs/data-structures/binary-tree/binary-tree.js +668 -597
- package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/bst.d.ts +72 -65
- package/dist/cjs/data-structures/binary-tree/bst.js +115 -113
- package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/rb-tree.d.ts +21 -24
- package/dist/cjs/data-structures/binary-tree/rb-tree.js +40 -39
- package/dist/cjs/data-structures/binary-tree/rb-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/segment-tree.d.ts +2 -2
- package/dist/cjs/data-structures/binary-tree/segment-tree.js +2 -2
- package/dist/cjs/data-structures/binary-tree/tree-multi-map.d.ts +28 -31
- package/dist/cjs/data-structures/binary-tree/tree-multi-map.js +44 -43
- package/dist/cjs/data-structures/binary-tree/tree-multi-map.js.map +1 -1
- package/dist/cjs/data-structures/graph/abstract-graph.d.ts +2 -2
- package/dist/cjs/data-structures/graph/abstract-graph.js +7 -4
- package/dist/cjs/data-structures/graph/abstract-graph.js.map +1 -1
- package/dist/cjs/data-structures/graph/directed-graph.d.ts +2 -2
- package/dist/cjs/data-structures/graph/directed-graph.js +4 -2
- package/dist/cjs/data-structures/graph/directed-graph.js.map +1 -1
- package/dist/cjs/data-structures/graph/undirected-graph.d.ts +2 -2
- package/dist/cjs/data-structures/hash/hash-map.d.ts +2 -2
- package/dist/cjs/data-structures/hash/hash-map.js +1 -1
- package/dist/cjs/data-structures/hash/hash-map.js.map +1 -1
- package/dist/cjs/data-structures/heap/heap.js +3 -3
- package/dist/cjs/data-structures/heap/heap.js.map +1 -1
- package/dist/cjs/data-structures/linked-list/doubly-linked-list.d.ts +2 -2
- package/dist/cjs/data-structures/linked-list/doubly-linked-list.js +7 -7
- package/dist/cjs/data-structures/linked-list/doubly-linked-list.js.map +1 -1
- package/dist/cjs/data-structures/linked-list/singly-linked-list.d.ts +2 -2
- package/dist/cjs/data-structures/linked-list/singly-linked-list.js +6 -6
- package/dist/cjs/data-structures/linked-list/singly-linked-list.js.map +1 -1
- package/dist/cjs/data-structures/linked-list/skip-linked-list.d.ts +2 -2
- package/dist/cjs/data-structures/matrix/matrix.d.ts +2 -2
- package/dist/cjs/data-structures/matrix/navigator.d.ts +2 -2
- package/dist/cjs/data-structures/matrix/navigator.js +4 -2
- package/dist/cjs/data-structures/matrix/navigator.js.map +1 -1
- package/dist/cjs/data-structures/queue/deque.d.ts +3 -3
- package/dist/cjs/data-structures/queue/deque.js +29 -29
- package/dist/cjs/data-structures/queue/deque.js.map +1 -1
- package/dist/cjs/data-structures/queue/queue.d.ts +1 -1
- package/dist/cjs/data-structures/stack/stack.d.ts +2 -2
- package/dist/cjs/data-structures/trie/trie.d.ts +2 -2
- package/dist/cjs/data-structures/trie/trie.js +1 -1
- package/dist/cjs/data-structures/trie/trie.js.map +1 -1
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/interfaces/binary-tree.d.ts +2 -2
- package/dist/cjs/types/data-structures/binary-tree/binary-tree.d.ts +2 -4
- package/dist/cjs/types/data-structures/binary-tree/binary-tree.js +0 -6
- package/dist/cjs/types/data-structures/binary-tree/binary-tree.js.map +1 -1
- package/dist/mjs/constants/index.d.ts +4 -0
- package/dist/mjs/constants/index.js +5 -0
- package/dist/mjs/data-structures/base/iterable-element-base.d.ts +8 -1
- package/dist/mjs/data-structures/base/iterable-element-base.js +10 -1
- package/dist/mjs/data-structures/base/iterable-entry-base.d.ts +8 -1
- package/dist/mjs/data-structures/base/iterable-entry-base.js +10 -10
- package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +31 -32
- package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.js +44 -44
- package/dist/mjs/data-structures/binary-tree/avl-tree.d.ts +23 -24
- package/dist/mjs/data-structures/binary-tree/avl-tree.js +72 -64
- package/dist/mjs/data-structures/binary-tree/binary-indexed-tree.js +2 -2
- package/dist/mjs/data-structures/binary-tree/binary-tree.d.ts +534 -402
- package/dist/mjs/data-structures/binary-tree/binary-tree.js +667 -591
- package/dist/mjs/data-structures/binary-tree/bst.d.ts +72 -65
- package/dist/mjs/data-structures/binary-tree/bst.js +116 -112
- package/dist/mjs/data-structures/binary-tree/rb-tree.d.ts +21 -24
- package/dist/mjs/data-structures/binary-tree/rb-tree.js +41 -38
- package/dist/mjs/data-structures/binary-tree/segment-tree.d.ts +2 -2
- package/dist/mjs/data-structures/binary-tree/segment-tree.js +2 -2
- package/dist/mjs/data-structures/binary-tree/tree-multi-map.d.ts +28 -31
- package/dist/mjs/data-structures/binary-tree/tree-multi-map.js +45 -42
- package/dist/mjs/data-structures/graph/abstract-graph.d.ts +2 -2
- package/dist/mjs/data-structures/graph/abstract-graph.js +7 -4
- package/dist/mjs/data-structures/graph/directed-graph.d.ts +2 -2
- package/dist/mjs/data-structures/graph/directed-graph.js +4 -2
- package/dist/mjs/data-structures/graph/undirected-graph.d.ts +2 -2
- package/dist/mjs/data-structures/hash/hash-map.d.ts +2 -2
- package/dist/mjs/data-structures/hash/hash-map.js +1 -1
- package/dist/mjs/data-structures/heap/heap.js +3 -3
- package/dist/mjs/data-structures/linked-list/doubly-linked-list.d.ts +2 -2
- package/dist/mjs/data-structures/linked-list/doubly-linked-list.js +7 -7
- package/dist/mjs/data-structures/linked-list/singly-linked-list.d.ts +2 -2
- package/dist/mjs/data-structures/linked-list/singly-linked-list.js +6 -6
- package/dist/mjs/data-structures/linked-list/skip-linked-list.d.ts +2 -2
- package/dist/mjs/data-structures/matrix/matrix.d.ts +2 -2
- package/dist/mjs/data-structures/matrix/navigator.d.ts +2 -2
- package/dist/mjs/data-structures/matrix/navigator.js +4 -2
- package/dist/mjs/data-structures/queue/deque.d.ts +3 -3
- package/dist/mjs/data-structures/queue/deque.js +29 -29
- package/dist/mjs/data-structures/queue/queue.d.ts +1 -1
- package/dist/mjs/data-structures/stack/stack.d.ts +2 -2
- package/dist/mjs/data-structures/trie/trie.d.ts +2 -2
- package/dist/mjs/data-structures/trie/trie.js +1 -1
- package/dist/mjs/index.d.ts +1 -0
- package/dist/mjs/index.js +1 -0
- package/dist/mjs/interfaces/binary-tree.d.ts +2 -2
- package/dist/mjs/types/data-structures/binary-tree/binary-tree.d.ts +2 -4
- package/dist/mjs/types/data-structures/binary-tree/binary-tree.js +1 -5
- package/dist/umd/data-structure-typed.js +1343 -1615
- package/dist/umd/data-structure-typed.min.js +10 -3
- package/dist/umd/data-structure-typed.min.js.map +1 -1
- package/eslint.config.mjs +69 -0
- package/package.json +30 -28
- package/src/constants/index.ts +4 -0
- package/src/data-structures/base/iterable-element-base.ts +11 -1
- package/src/data-structures/base/iterable-entry-base.ts +11 -19
- package/src/data-structures/binary-tree/avl-tree-multi-map.ts +47 -50
- package/src/data-structures/binary-tree/avl-tree.ts +69 -71
- package/src/data-structures/binary-tree/binary-indexed-tree.ts +2 -2
- package/src/data-structures/binary-tree/binary-tree.ts +697 -725
- package/src/data-structures/binary-tree/bst.ts +123 -129
- package/src/data-structures/binary-tree/rb-tree.ts +44 -46
- package/src/data-structures/binary-tree/segment-tree.ts +2 -2
- package/src/data-structures/binary-tree/tree-multi-map.ts +48 -49
- package/src/data-structures/graph/abstract-graph.ts +6 -6
- package/src/data-structures/graph/directed-graph.ts +4 -4
- package/src/data-structures/graph/undirected-graph.ts +2 -2
- package/src/data-structures/hash/hash-map.ts +3 -3
- package/src/data-structures/heap/heap.ts +3 -3
- package/src/data-structures/linked-list/doubly-linked-list.ts +9 -9
- package/src/data-structures/linked-list/singly-linked-list.ts +8 -8
- package/src/data-structures/linked-list/skip-linked-list.ts +2 -2
- package/src/data-structures/matrix/matrix.ts +2 -2
- package/src/data-structures/matrix/navigator.ts +4 -4
- package/src/data-structures/queue/deque.ts +31 -31
- package/src/data-structures/queue/queue.ts +1 -1
- package/src/data-structures/stack/stack.ts +2 -2
- package/src/data-structures/trie/trie.ts +3 -3
- package/src/index.ts +1 -0
- package/src/interfaces/binary-tree.ts +3 -3
- package/src/types/data-structures/binary-tree/binary-tree.ts +3 -5
- package/test/config.ts +1 -7
- package/test/integration/all-in-one.test.ts +2 -2
- package/test/integration/avl-tree.test.ts +2 -2
- package/test/integration/bst.test.ts +17 -16
- package/test/integration/heap.test.js +6 -1
- package/test/unit/data-structures/binary-tree/avl-tree-multi-map.test.ts +39 -39
- package/test/unit/data-structures/binary-tree/avl-tree.test.ts +2 -2
- package/test/unit/data-structures/binary-tree/binary-tree.test.ts +51 -26
- package/test/unit/data-structures/binary-tree/bst.test.ts +41 -13
- package/test/unit/data-structures/binary-tree/overall.test.ts +0 -6
- package/test/unit/data-structures/binary-tree/rb-tree.test.ts +6 -6
- package/test/unit/data-structures/binary-tree/segment-tree.test.ts +88 -34
- package/test/unit/data-structures/binary-tree/tree-multi-map.test.ts +42 -42
- package/test/unit/data-structures/graph/abstract-graph.test.ts +1 -1
- package/test/unit/data-structures/graph/directed-graph.test.ts +4 -4
- package/test/unit/data-structures/graph/undirected-graph.test.ts +14 -2
- package/test/unit/data-structures/hash/hash-map.test.ts +1 -1
- package/test/unit/data-structures/linked-list/doubly-linked-list.test.ts +1 -1
- package/test/unit/data-structures/matrix/navigator.test.ts +2 -2
- package/test/unit/data-structures/priority-queue/min-priority-queue.test.ts +1 -1
- package/test/unit/data-structures/priority-queue/priority-queue.test.ts +4 -4
- package/test/unit/data-structures/stack/stack.test.ts +6 -0
- package/test/unit/unrestricted-interconversion.test.ts +24 -24
- package/test/utils/big-o.ts +5 -4
- package/.eslintrc.js +0 -64
|
@@ -414,7 +414,7 @@ describe('RedBlackTree 2', () => {
|
|
|
414
414
|
expect(node225F?.right).toBe(rbTree.NIL);
|
|
415
415
|
expect(node225F?.parent?.key).toBe(155);
|
|
416
416
|
rbTree.add(7);
|
|
417
|
-
isDebug
|
|
417
|
+
if (isDebug) rbTree.print();
|
|
418
418
|
|
|
419
419
|
const node15S = rbTree.getNode(15);
|
|
420
420
|
expect(node15S?.left?.key).toBe(10);
|
|
@@ -463,7 +463,7 @@ describe('RedBlackTree 2', () => {
|
|
|
463
463
|
rbTree.add(19);
|
|
464
464
|
rbTree.add(110);
|
|
465
465
|
|
|
466
|
-
isDebug
|
|
466
|
+
if (isDebug) rbTree.print();
|
|
467
467
|
|
|
468
468
|
expect(rbTree.dfs()).toEqual([
|
|
469
469
|
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 22, 23, 25, 28, 33, 50, 110, 111, 155, 225
|
|
@@ -525,19 +525,19 @@ describe('RedBlackTree 2', () => {
|
|
|
525
525
|
for (let i = 0; i < arr.length; i++) {
|
|
526
526
|
rbTree.add(arr[i]);
|
|
527
527
|
}
|
|
528
|
-
isDebug
|
|
528
|
+
if (isDebug) console.log(performance.now() - tS);
|
|
529
529
|
|
|
530
530
|
const cS = performance.now();
|
|
531
531
|
|
|
532
532
|
for (let i = 0; i < arr.length; i++) {
|
|
533
533
|
competitor.setElement(arr[i], arr[i]);
|
|
534
534
|
}
|
|
535
|
-
isDebug
|
|
535
|
+
if (isDebug) console.log(performance.now() - cS);
|
|
536
536
|
});
|
|
537
537
|
|
|
538
538
|
it('duplicates', () => {
|
|
539
539
|
rbTree.addMany([9, 8, 7, 8, 8, 8, 2, 3, 6, 5, 5, 4]);
|
|
540
|
-
isDebug
|
|
540
|
+
if (isDebug) rbTree.print();
|
|
541
541
|
|
|
542
542
|
expect(rbTree.size).toBe(8);
|
|
543
543
|
expect(rbTree.isBST()).toBe(true);
|
|
@@ -606,7 +606,7 @@ describe('RedBlackTree 2', () => {
|
|
|
606
606
|
expect(rbTree.getHeight()).toBe(-1);
|
|
607
607
|
expect(nanCount).toBeLessThanOrEqual(inputSize);
|
|
608
608
|
|
|
609
|
-
isDebug
|
|
609
|
+
if (isDebug) rbTree.print();
|
|
610
610
|
});
|
|
611
611
|
});
|
|
612
612
|
|
|
@@ -1,50 +1,104 @@
|
|
|
1
|
-
import { SegmentTree } from '../../../../src';
|
|
1
|
+
import { SegmentTree, SegmentTreeNode } from '../../../../src';
|
|
2
2
|
|
|
3
|
-
describe('
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
describe('SegmentTreeNode', () => {
|
|
4
|
+
it('should initialize with correct start, end, sum, and optional value', () => {
|
|
5
|
+
const node = new SegmentTreeNode(0, 1, 10, 2);
|
|
6
|
+
expect(node.start).toBe(0);
|
|
7
|
+
expect(node.end).toBe(1);
|
|
8
|
+
expect(node.sum).toBe(10);
|
|
9
|
+
expect(node.value).toBe(2);
|
|
10
10
|
});
|
|
11
11
|
|
|
12
|
-
it('should
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
it('should allow setting start, end, sum, value, left, and right', () => {
|
|
13
|
+
const node = new SegmentTreeNode(0, 1, 10);
|
|
14
|
+
node.start = 2;
|
|
15
|
+
node.end = 3;
|
|
16
|
+
node.sum = 15;
|
|
17
|
+
node.value = 2;
|
|
18
|
+
|
|
19
|
+
const leftNode = new SegmentTreeNode(0, 1, 5);
|
|
20
|
+
const rightNode = new SegmentTreeNode(2, 3, 10);
|
|
21
|
+
|
|
22
|
+
node.left = leftNode;
|
|
23
|
+
node.right = rightNode;
|
|
24
|
+
|
|
25
|
+
expect(node.start).toBe(2);
|
|
26
|
+
expect(node.end).toBe(3);
|
|
27
|
+
expect(node.sum).toBe(15);
|
|
28
|
+
expect(node.value).toBe(2);
|
|
29
|
+
expect(node.left).toBe(leftNode);
|
|
30
|
+
expect(node.right).toBe(rightNode);
|
|
15
31
|
});
|
|
32
|
+
});
|
|
16
33
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
34
|
+
describe('SegmentTree', () => {
|
|
35
|
+
it('should initialize with correct values, start, end, and root', () => {
|
|
36
|
+
const values = [1, 2, 3, 4];
|
|
37
|
+
const tree = new SegmentTree(values);
|
|
20
38
|
|
|
21
|
-
|
|
22
|
-
expect(
|
|
39
|
+
expect(tree.values).toEqual(values);
|
|
40
|
+
expect(tree.start).toBe(0);
|
|
41
|
+
expect(tree.end).toBe(3);
|
|
42
|
+
expect(tree.root).toBeDefined();
|
|
23
43
|
});
|
|
24
44
|
|
|
25
|
-
it('should
|
|
26
|
-
|
|
27
|
-
|
|
45
|
+
it('should correctly build segment tree with sum of values', () => {
|
|
46
|
+
const values = [1, 2, 3, 4];
|
|
47
|
+
const tree = new SegmentTree(values);
|
|
48
|
+
|
|
49
|
+
expect(tree.root?.sum).toBe(10); // 1 + 2 + 3 + 4
|
|
28
50
|
});
|
|
29
51
|
|
|
30
|
-
it('should handle
|
|
31
|
-
|
|
32
|
-
expect(
|
|
33
|
-
expect(
|
|
34
|
-
expect(segmentTree.querySumByRange(0, 10)).toBe(NaN); // Beyond upper bound, should return NaN
|
|
52
|
+
it('should handle empty values array gracefully', () => {
|
|
53
|
+
const tree = new SegmentTree([]);
|
|
54
|
+
expect(tree.values).toEqual([]);
|
|
55
|
+
expect(tree.root).toBeUndefined();
|
|
35
56
|
});
|
|
36
57
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
58
|
+
describe('updateNode', () => {
|
|
59
|
+
it('should update node value and sum correctly', () => {
|
|
60
|
+
const values = [1, 2, 3, 4];
|
|
61
|
+
const tree = new SegmentTree(values);
|
|
62
|
+
tree.updateNode(1, 5, 2);
|
|
63
|
+
|
|
64
|
+
expect(tree.root?.sum).toBe(13); // 1 + 5 + 3 + 4
|
|
65
|
+
expect(tree.root?.left?.right?.sum).toBe(5);
|
|
66
|
+
expect(tree.root?.left?.right?.value).toBe(2);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
it('should do nothing if root is undefined', () => {
|
|
70
|
+
const tree = new SegmentTree([]);
|
|
71
|
+
tree.updateNode(0, 10);
|
|
72
|
+
expect(tree.root).toBeUndefined();
|
|
73
|
+
});
|
|
42
74
|
});
|
|
43
75
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
76
|
+
describe('querySumByRange', () => {
|
|
77
|
+
it('should return sum for a given range', () => {
|
|
78
|
+
const values = [1, 2, 3, 4, 5];
|
|
79
|
+
const tree = new SegmentTree(values);
|
|
80
|
+
const result = tree.querySumByRange(1, 3); // 2 + 3 + 4 = 9
|
|
81
|
+
expect(result).toBe(9);
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
it('should return NaN for an invalid range', () => {
|
|
85
|
+
const values = [1, 2, 3, 4, 5];
|
|
86
|
+
const tree = new SegmentTree(values);
|
|
87
|
+
const result = tree.querySumByRange(3, 1); // Invalid range
|
|
88
|
+
expect(result).toBeNaN();
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
it('should return 0 if root is undefined', () => {
|
|
92
|
+
const tree = new SegmentTree([]);
|
|
93
|
+
const result = tree.querySumByRange(0, 1);
|
|
94
|
+
expect(result).toBe(0);
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
it('should return NaN if range is out of bounds', () => {
|
|
98
|
+
const values = [1, 2, 3, 4];
|
|
99
|
+
const tree = new SegmentTree(values);
|
|
100
|
+
const result = tree.querySumByRange(-1, 10);
|
|
101
|
+
expect(result).toBeNaN();
|
|
102
|
+
});
|
|
49
103
|
});
|
|
50
104
|
});
|
|
@@ -87,7 +87,7 @@ describe('TreeMultiMap operations test1', () => {
|
|
|
87
87
|
tmm.delete(11);
|
|
88
88
|
expect(tmm.count).toBe(17);
|
|
89
89
|
expect(tmm.getComputedCount()).toBe(17);
|
|
90
|
-
tmm.delete(3,
|
|
90
|
+
tmm.delete(3, true);
|
|
91
91
|
expect(tmm.count).toBe(15);
|
|
92
92
|
expect(tmm.getComputedCount()).toBe(15);
|
|
93
93
|
});
|
|
@@ -127,19 +127,19 @@ describe('TreeMultiMap operations test1', () => {
|
|
|
127
127
|
expect(tmm.getComputedCount()).toBe(18);
|
|
128
128
|
|
|
129
129
|
expect(tmm.has(6));
|
|
130
|
-
isDebug
|
|
130
|
+
if (isDebug) tmm.print();
|
|
131
131
|
expect(tmm.getHeight(6)).toBe(1);
|
|
132
132
|
expect(tmm.getDepth(6)).toBe(3);
|
|
133
133
|
const nodeId10 = tmm.getNode(10);
|
|
134
134
|
expect(nodeId10?.key).toBe(10);
|
|
135
135
|
|
|
136
|
-
const nodeVal9 = tmm.getNode(
|
|
136
|
+
const nodeVal9 = tmm.getNode(node => node.value === 9);
|
|
137
137
|
expect(nodeVal9?.key).toBe(9);
|
|
138
138
|
|
|
139
|
-
const nodesByCount1 = tmm.getNodes(
|
|
139
|
+
const nodesByCount1 = tmm.getNodes(node => node.count === 1);
|
|
140
140
|
expect(nodesByCount1.length).toBe(14);
|
|
141
141
|
|
|
142
|
-
const nodesByCount2 = tmm.getNodes(
|
|
142
|
+
const nodesByCount2 = tmm.getNodes(node => node.count === 2);
|
|
143
143
|
expect(nodesByCount2.length).toBe(2);
|
|
144
144
|
const leftMost = tmm.getLeftMost();
|
|
145
145
|
expect(leftMost).toBe(1);
|
|
@@ -149,7 +149,7 @@ describe('TreeMultiMap operations test1', () => {
|
|
|
149
149
|
expect(minNodeBySpecificNode?.key).toBe(14);
|
|
150
150
|
|
|
151
151
|
let subTreeSum = 0;
|
|
152
|
-
node15
|
|
152
|
+
if (node15) tmm.dfs(node => (subTreeSum += node.key), 'PRE', 15);
|
|
153
153
|
expect(subTreeSum).toBe(45);
|
|
154
154
|
let lesserSum = 0;
|
|
155
155
|
tmm.lesserOrGreaterTraverse(node => (lesserSum += node.key), -1, 10);
|
|
@@ -180,7 +180,7 @@ describe('TreeMultiMap operations test1', () => {
|
|
|
180
180
|
expect(bfsNodesAfterBalanced[0].key).toBe(6);
|
|
181
181
|
expect(bfsNodesAfterBalanced[bfsNodesAfterBalanced.length - 1].key).toBe(16);
|
|
182
182
|
|
|
183
|
-
const removed11 = tmm.delete(11,
|
|
183
|
+
const removed11 = tmm.delete(11, true);
|
|
184
184
|
expect(removed11 instanceof Array);
|
|
185
185
|
expect(removed11[0]);
|
|
186
186
|
expect(removed11[0].deleted);
|
|
@@ -191,7 +191,7 @@ describe('TreeMultiMap operations test1', () => {
|
|
|
191
191
|
|
|
192
192
|
expect(tmm.getHeight(15)).toBe(1);
|
|
193
193
|
|
|
194
|
-
const removed1 = tmm.delete(1,
|
|
194
|
+
const removed1 = tmm.delete(1, true);
|
|
195
195
|
expect(removed1 instanceof Array);
|
|
196
196
|
expect(removed1[0]);
|
|
197
197
|
expect(removed1[0].deleted);
|
|
@@ -201,7 +201,7 @@ describe('TreeMultiMap operations test1', () => {
|
|
|
201
201
|
|
|
202
202
|
expect(tmm.getHeight()).toBe(5);
|
|
203
203
|
|
|
204
|
-
const removed4 = tmm.delete(4,
|
|
204
|
+
const removed4 = tmm.delete(4, true);
|
|
205
205
|
expect(removed4 instanceof Array);
|
|
206
206
|
expect(removed4[0]);
|
|
207
207
|
expect(removed4[0].deleted);
|
|
@@ -210,7 +210,7 @@ describe('TreeMultiMap operations test1', () => {
|
|
|
210
210
|
expect(tmm.isAVLBalanced()).toBe(false);
|
|
211
211
|
expect(tmm.getHeight()).toBe(5);
|
|
212
212
|
|
|
213
|
-
const removed10 = tmm.delete(10,
|
|
213
|
+
const removed10 = tmm.delete(10, true);
|
|
214
214
|
expect(removed10 instanceof Array);
|
|
215
215
|
expect(removed10[0]);
|
|
216
216
|
expect(removed10[0].deleted);
|
|
@@ -219,7 +219,7 @@ describe('TreeMultiMap operations test1', () => {
|
|
|
219
219
|
|
|
220
220
|
expect(tmm.getHeight()).toBe(4);
|
|
221
221
|
|
|
222
|
-
const removed15 = tmm.delete(15,
|
|
222
|
+
const removed15 = tmm.delete(15, true);
|
|
223
223
|
expect(removed15 instanceof Array);
|
|
224
224
|
expect(removed15[0]);
|
|
225
225
|
expect(removed15[0].deleted);
|
|
@@ -228,7 +228,7 @@ describe('TreeMultiMap operations test1', () => {
|
|
|
228
228
|
expect(tmm.isAVLBalanced()).toBe(false);
|
|
229
229
|
expect(tmm.getHeight()).toBe(3);
|
|
230
230
|
|
|
231
|
-
const removed5 = tmm.delete(5,
|
|
231
|
+
const removed5 = tmm.delete(5, true);
|
|
232
232
|
expect(removed5 instanceof Array);
|
|
233
233
|
expect(removed5[0]);
|
|
234
234
|
expect(removed5[0].deleted);
|
|
@@ -237,7 +237,7 @@ describe('TreeMultiMap operations test1', () => {
|
|
|
237
237
|
expect(tmm.isAVLBalanced()).toBe(true);
|
|
238
238
|
expect(tmm.getHeight()).toBe(3);
|
|
239
239
|
|
|
240
|
-
const removed13 = tmm.delete(13,
|
|
240
|
+
const removed13 = tmm.delete(13, true);
|
|
241
241
|
expect(removed13 instanceof Array);
|
|
242
242
|
expect(removed13[0]);
|
|
243
243
|
expect(removed13[0].deleted);
|
|
@@ -245,7 +245,7 @@ describe('TreeMultiMap operations test1', () => {
|
|
|
245
245
|
expect(tmm.isAVLBalanced()).toBe(true);
|
|
246
246
|
expect(tmm.getHeight()).toBe(3);
|
|
247
247
|
|
|
248
|
-
const removed3 = tmm.delete(3,
|
|
248
|
+
const removed3 = tmm.delete(3, true);
|
|
249
249
|
expect(removed3 instanceof Array);
|
|
250
250
|
expect(removed3[0]);
|
|
251
251
|
expect(removed3[0].deleted);
|
|
@@ -253,7 +253,7 @@ describe('TreeMultiMap operations test1', () => {
|
|
|
253
253
|
expect(tmm.isAVLBalanced()).toBe(false);
|
|
254
254
|
expect(tmm.getHeight()).toBe(3);
|
|
255
255
|
|
|
256
|
-
const removed8 = tmm.delete(8,
|
|
256
|
+
const removed8 = tmm.delete(8, true);
|
|
257
257
|
expect(removed8 instanceof Array);
|
|
258
258
|
expect(removed8[0]);
|
|
259
259
|
expect(removed8[0].deleted);
|
|
@@ -261,17 +261,17 @@ describe('TreeMultiMap operations test1', () => {
|
|
|
261
261
|
expect(tmm.isAVLBalanced()).toBe(false);
|
|
262
262
|
expect(tmm.getHeight()).toBe(3);
|
|
263
263
|
|
|
264
|
-
const removed6 = tmm.delete(6,
|
|
264
|
+
const removed6 = tmm.delete(6, true);
|
|
265
265
|
expect(removed6 instanceof Array);
|
|
266
266
|
expect(removed6[0]);
|
|
267
267
|
expect(removed6[0].deleted);
|
|
268
268
|
if (removed6[0].deleted) expect(removed6[0].deleted.key).toBe(6);
|
|
269
|
-
expect(tmm.delete(6,
|
|
269
|
+
expect(tmm.delete(6, true).length).toBe(0);
|
|
270
270
|
expect(tmm.isAVLBalanced()).toBe(false);
|
|
271
271
|
|
|
272
272
|
expect(tmm.getHeight()).toBe(3);
|
|
273
273
|
|
|
274
|
-
const removed7 = tmm.delete(7,
|
|
274
|
+
const removed7 = tmm.delete(7, true);
|
|
275
275
|
expect(removed7 instanceof Array);
|
|
276
276
|
expect(removed7[0]);
|
|
277
277
|
expect(removed7[0].deleted);
|
|
@@ -279,7 +279,7 @@ describe('TreeMultiMap operations test1', () => {
|
|
|
279
279
|
expect(tmm.isAVLBalanced()).toBe(false);
|
|
280
280
|
expect(tmm.getHeight()).toBe(3);
|
|
281
281
|
|
|
282
|
-
const removed9 = tmm.delete(9,
|
|
282
|
+
const removed9 = tmm.delete(9, true);
|
|
283
283
|
expect(removed9 instanceof Array);
|
|
284
284
|
expect(removed9[0]);
|
|
285
285
|
expect(removed9[0].deleted);
|
|
@@ -287,7 +287,7 @@ describe('TreeMultiMap operations test1', () => {
|
|
|
287
287
|
expect(tmm.isAVLBalanced()).toBe(true);
|
|
288
288
|
expect(tmm.getHeight()).toBe(2);
|
|
289
289
|
|
|
290
|
-
const removed14 = tmm.delete(14,
|
|
290
|
+
const removed14 = tmm.delete(14, true);
|
|
291
291
|
expect(removed14 instanceof Array);
|
|
292
292
|
expect(removed14[0]);
|
|
293
293
|
expect(removed14[0].deleted);
|
|
@@ -391,13 +391,13 @@ describe('TreeMultiMap operations test recursively1', () => {
|
|
|
391
391
|
const nodeId10 = tmm.getNode(10);
|
|
392
392
|
expect(nodeId10?.key).toBe(10);
|
|
393
393
|
|
|
394
|
-
const nodeVal9 = tmm.getNode(
|
|
394
|
+
const nodeVal9 = tmm.getNode(node => node.value === 9);
|
|
395
395
|
expect(nodeVal9?.key).toBe(9);
|
|
396
396
|
|
|
397
|
-
const nodesByCount1 = tmm.getNodes(
|
|
397
|
+
const nodesByCount1 = tmm.getNodes(node => node.count === 1);
|
|
398
398
|
expect(nodesByCount1.length).toBe(14);
|
|
399
399
|
|
|
400
|
-
const nodesByCount2 = tmm.getNodes(
|
|
400
|
+
const nodesByCount2 = tmm.getNodes(node => node.count === 2);
|
|
401
401
|
expect(nodesByCount2.length).toBe(2);
|
|
402
402
|
const leftMost = tmm.getLeftMost();
|
|
403
403
|
expect(leftMost).toBe(1);
|
|
@@ -407,7 +407,7 @@ describe('TreeMultiMap operations test recursively1', () => {
|
|
|
407
407
|
expect(minNodeBySpecificNode?.key).toBe(14);
|
|
408
408
|
|
|
409
409
|
let subTreeSum = 0;
|
|
410
|
-
node15
|
|
410
|
+
if (node15) tmm.dfs(node => (subTreeSum += node.key), 'PRE', 15);
|
|
411
411
|
expect(subTreeSum).toBe(45);
|
|
412
412
|
let lesserSum = 0;
|
|
413
413
|
expect(tmm.has(9)).toBe(true);
|
|
@@ -447,7 +447,7 @@ describe('TreeMultiMap operations test recursively1', () => {
|
|
|
447
447
|
expect(bfsNodesAfterBalanced[0].key).toBe(6);
|
|
448
448
|
expect(bfsNodesAfterBalanced[bfsNodesAfterBalanced.length - 1].key).toBe(16);
|
|
449
449
|
|
|
450
|
-
const removed11 = tmm.delete(11,
|
|
450
|
+
const removed11 = tmm.delete(11, true);
|
|
451
451
|
expect(removed11 instanceof Array);
|
|
452
452
|
expect(removed11[0]);
|
|
453
453
|
expect(removed11[0].deleted);
|
|
@@ -458,7 +458,7 @@ describe('TreeMultiMap operations test recursively1', () => {
|
|
|
458
458
|
|
|
459
459
|
expect(tmm.getHeight(15)).toBe(1);
|
|
460
460
|
|
|
461
|
-
const removed1 = tmm.delete(1,
|
|
461
|
+
const removed1 = tmm.delete(1, true);
|
|
462
462
|
expect(removed1 instanceof Array);
|
|
463
463
|
expect(removed1[0]);
|
|
464
464
|
expect(removed1[0].deleted);
|
|
@@ -468,7 +468,7 @@ describe('TreeMultiMap operations test recursively1', () => {
|
|
|
468
468
|
|
|
469
469
|
expect(tmm.getHeight()).toBe(5);
|
|
470
470
|
|
|
471
|
-
const removed4 = tmm.delete(4,
|
|
471
|
+
const removed4 = tmm.delete(4, true);
|
|
472
472
|
expect(removed4 instanceof Array);
|
|
473
473
|
expect(removed4[0]);
|
|
474
474
|
expect(removed4[0].deleted);
|
|
@@ -477,7 +477,7 @@ describe('TreeMultiMap operations test recursively1', () => {
|
|
|
477
477
|
expect(tmm.isAVLBalanced()).toBe(false);
|
|
478
478
|
expect(tmm.getHeight()).toBe(5);
|
|
479
479
|
|
|
480
|
-
const removed10 = tmm.delete(10,
|
|
480
|
+
const removed10 = tmm.delete(10, true);
|
|
481
481
|
expect(removed10 instanceof Array);
|
|
482
482
|
expect(removed10[0]);
|
|
483
483
|
expect(removed10[0].deleted);
|
|
@@ -486,7 +486,7 @@ describe('TreeMultiMap operations test recursively1', () => {
|
|
|
486
486
|
|
|
487
487
|
expect(tmm.getHeight()).toBe(4);
|
|
488
488
|
|
|
489
|
-
const removed15 = tmm.delete(15,
|
|
489
|
+
const removed15 = tmm.delete(15, true);
|
|
490
490
|
expect(removed15 instanceof Array);
|
|
491
491
|
expect(removed15[0]);
|
|
492
492
|
expect(removed15[0].deleted);
|
|
@@ -495,7 +495,7 @@ describe('TreeMultiMap operations test recursively1', () => {
|
|
|
495
495
|
expect(tmm.isAVLBalanced()).toBe(false);
|
|
496
496
|
expect(tmm.getHeight()).toBe(3);
|
|
497
497
|
|
|
498
|
-
const removed5 = tmm.delete(5,
|
|
498
|
+
const removed5 = tmm.delete(5, true);
|
|
499
499
|
expect(removed5 instanceof Array);
|
|
500
500
|
expect(removed5[0]);
|
|
501
501
|
expect(removed5[0].deleted);
|
|
@@ -504,7 +504,7 @@ describe('TreeMultiMap operations test recursively1', () => {
|
|
|
504
504
|
expect(tmm.isAVLBalanced()).toBe(true);
|
|
505
505
|
expect(tmm.getHeight()).toBe(3);
|
|
506
506
|
|
|
507
|
-
const removed13 = tmm.delete(13,
|
|
507
|
+
const removed13 = tmm.delete(13, true);
|
|
508
508
|
expect(removed13 instanceof Array);
|
|
509
509
|
expect(removed13[0]);
|
|
510
510
|
expect(removed13[0].deleted);
|
|
@@ -512,7 +512,7 @@ describe('TreeMultiMap operations test recursively1', () => {
|
|
|
512
512
|
expect(tmm.isAVLBalanced()).toBe(true);
|
|
513
513
|
expect(tmm.getHeight()).toBe(3);
|
|
514
514
|
|
|
515
|
-
const removed3 = tmm.delete(3,
|
|
515
|
+
const removed3 = tmm.delete(3, true);
|
|
516
516
|
expect(removed3 instanceof Array);
|
|
517
517
|
expect(removed3[0]);
|
|
518
518
|
expect(removed3[0].deleted);
|
|
@@ -520,7 +520,7 @@ describe('TreeMultiMap operations test recursively1', () => {
|
|
|
520
520
|
expect(tmm.isAVLBalanced()).toBe(false);
|
|
521
521
|
expect(tmm.getHeight()).toBe(3);
|
|
522
522
|
|
|
523
|
-
const removed8 = tmm.delete(8,
|
|
523
|
+
const removed8 = tmm.delete(8, true);
|
|
524
524
|
expect(removed8 instanceof Array);
|
|
525
525
|
expect(removed8[0]);
|
|
526
526
|
expect(removed8[0].deleted);
|
|
@@ -528,17 +528,17 @@ describe('TreeMultiMap operations test recursively1', () => {
|
|
|
528
528
|
expect(tmm.isAVLBalanced()).toBe(false);
|
|
529
529
|
expect(tmm.getHeight()).toBe(3);
|
|
530
530
|
|
|
531
|
-
const removed6 = tmm.delete(6,
|
|
531
|
+
const removed6 = tmm.delete(6, true);
|
|
532
532
|
expect(removed6 instanceof Array);
|
|
533
533
|
expect(removed6[0]);
|
|
534
534
|
expect(removed6[0].deleted);
|
|
535
535
|
if (removed6[0].deleted) expect(removed6[0].deleted.key).toBe(6);
|
|
536
|
-
expect(tmm.delete(6,
|
|
536
|
+
expect(tmm.delete(6, true).length).toBe(0);
|
|
537
537
|
expect(tmm.isAVLBalanced()).toBe(false);
|
|
538
538
|
|
|
539
539
|
expect(tmm.getHeight()).toBe(3);
|
|
540
540
|
|
|
541
|
-
const removed7 = tmm.delete(7,
|
|
541
|
+
const removed7 = tmm.delete(7, true);
|
|
542
542
|
expect(removed7 instanceof Array);
|
|
543
543
|
expect(removed7[0]);
|
|
544
544
|
expect(removed7[0].deleted);
|
|
@@ -546,7 +546,7 @@ describe('TreeMultiMap operations test recursively1', () => {
|
|
|
546
546
|
expect(tmm.isAVLBalanced()).toBe(false);
|
|
547
547
|
expect(tmm.getHeight()).toBe(3);
|
|
548
548
|
|
|
549
|
-
const removed9 = tmm.delete(9,
|
|
549
|
+
const removed9 = tmm.delete(9, true);
|
|
550
550
|
expect(removed9 instanceof Array);
|
|
551
551
|
expect(removed9[0]);
|
|
552
552
|
expect(removed9[0].deleted);
|
|
@@ -554,7 +554,7 @@ describe('TreeMultiMap operations test recursively1', () => {
|
|
|
554
554
|
expect(tmm.isAVLBalanced()).toBe(true);
|
|
555
555
|
expect(tmm.getHeight()).toBe(2);
|
|
556
556
|
|
|
557
|
-
const removed14 = tmm.delete(14,
|
|
557
|
+
const removed14 = tmm.delete(14, true);
|
|
558
558
|
expect(removed14 instanceof Array);
|
|
559
559
|
expect(removed14[0]);
|
|
560
560
|
expect(removed14[0].deleted);
|
|
@@ -626,7 +626,7 @@ describe('TreeMultiMap delete test', function () {
|
|
|
626
626
|
it(`Observe the time consumption of TreeMultiMap.dfs be good`, function () {
|
|
627
627
|
const startDFS = performance.now();
|
|
628
628
|
const dfs = tmm.dfs(node => node);
|
|
629
|
-
isDebug
|
|
629
|
+
if (isDebug) console.log('---bfs', performance.now() - startDFS, dfs.length);
|
|
630
630
|
});
|
|
631
631
|
|
|
632
632
|
it('The structure remains normal after random deletion', function () {
|
|
@@ -664,7 +664,7 @@ describe('TreeMultiMap delete test', function () {
|
|
|
664
664
|
}
|
|
665
665
|
|
|
666
666
|
for (let i = 0; i < inputSize; i++) {
|
|
667
|
-
tmm.delete(i,
|
|
667
|
+
tmm.delete(i, true);
|
|
668
668
|
}
|
|
669
669
|
|
|
670
670
|
let nilCount = 0;
|
|
@@ -679,7 +679,7 @@ describe('TreeMultiMap delete test', function () {
|
|
|
679
679
|
expect(tmm.getHeight()).toBe(-1);
|
|
680
680
|
expect(nilCount).toBe(tmm.size + 1);
|
|
681
681
|
|
|
682
|
-
isDebug
|
|
682
|
+
if (isDebug) tmm.print();
|
|
683
683
|
});
|
|
684
684
|
|
|
685
685
|
it(`Random additions, count deletions of structures are normal`, function () {
|
|
@@ -705,7 +705,7 @@ describe('TreeMultiMap delete test', function () {
|
|
|
705
705
|
expect(tmm.getHeight()).toBeGreaterThanOrEqual(0);
|
|
706
706
|
expect(nanCount).toBeLessThanOrEqual(inputSize);
|
|
707
707
|
|
|
708
|
-
isDebug
|
|
708
|
+
if (isDebug) tmm.print();
|
|
709
709
|
});
|
|
710
710
|
|
|
711
711
|
it('should the clone method', () => {
|
|
@@ -209,8 +209,8 @@ describe('Inherit from DirectedGraph and perform operations', () => {
|
|
|
209
209
|
|
|
210
210
|
expect(removedEdge).toBeInstanceOf(MyEdge);
|
|
211
211
|
if (removedEdge) {
|
|
212
|
-
removedEdge
|
|
213
|
-
removedEdge
|
|
212
|
+
if (removedEdge) expect(removedEdge.value).toBe('edge-data1-2');
|
|
213
|
+
if (removedEdge) expect(removedEdge.src).toBe(1);
|
|
214
214
|
}
|
|
215
215
|
expect(edgeAfterRemoval).toBe(undefined);
|
|
216
216
|
});
|
|
@@ -241,8 +241,8 @@ describe('Inherit from DirectedGraph and perform operations', () => {
|
|
|
241
241
|
if (sorted && sorted.length > 0) {
|
|
242
242
|
expect(sorted.length).toBe(9);
|
|
243
243
|
if (sorted[0] instanceof MyVertex) expect(sorted[0].data).toBe('data9');
|
|
244
|
-
sorted[3] instanceof MyVertex
|
|
245
|
-
sorted[8] instanceof MyVertex
|
|
244
|
+
if (sorted[3] instanceof MyVertex) expect(sorted[3].data).toBe('data6');
|
|
245
|
+
if (sorted[8] instanceof MyVertex) expect(sorted[8].key).toBe(1);
|
|
246
246
|
}
|
|
247
247
|
});
|
|
248
248
|
|
|
@@ -18,14 +18,19 @@ describe('UndirectedGraph Operation Test', () => {
|
|
|
18
18
|
});
|
|
19
19
|
|
|
20
20
|
it('should add vertices', () => {
|
|
21
|
+
expect(graph.isEmpty()).toBe(true);
|
|
21
22
|
const vertex1 = new UndirectedVertex('A');
|
|
22
23
|
const vertex2 = new UndirectedVertex('B');
|
|
23
24
|
|
|
24
25
|
graph.addVertex(vertex1);
|
|
26
|
+
expect(graph.isEmpty()).toBe(false);
|
|
25
27
|
graph.addVertex(vertex2);
|
|
26
28
|
|
|
27
29
|
expect(graph.hasVertex(vertex1)).toBe(true);
|
|
28
30
|
expect(graph.hasVertex(vertex2)).toBe(true);
|
|
31
|
+
expect(graph.isEmpty()).toBe(false);
|
|
32
|
+
graph.clear();
|
|
33
|
+
expect(graph.isEmpty()).toBe(true);
|
|
29
34
|
});
|
|
30
35
|
|
|
31
36
|
it('should add edges', () => {
|
|
@@ -39,6 +44,8 @@ describe('UndirectedGraph Operation Test', () => {
|
|
|
39
44
|
|
|
40
45
|
expect(graph.hasEdge('A', 'B')).toBe(true);
|
|
41
46
|
expect(graph.hasEdge('B', 'A')).toBe(true);
|
|
47
|
+
expect(graph.has('A')).toBe(true);
|
|
48
|
+
expect(graph.get('A')).toBe(undefined);
|
|
42
49
|
});
|
|
43
50
|
|
|
44
51
|
it('should delete edges', () => {
|
|
@@ -577,7 +584,7 @@ describe('UndirectedGraph tarjan', () => {
|
|
|
577
584
|
const graph = createExampleGraph5();
|
|
578
585
|
const cycles = graph.getCycles();
|
|
579
586
|
expect(cycles.length).toBe(13);
|
|
580
|
-
|
|
587
|
+
const expectedCycles = [
|
|
581
588
|
['A', 'B', 'C', 'D', 'I', 'H', 'F', 'E'],
|
|
582
589
|
['A', 'B', 'C', 'D', 'I', 'H', 'F', 'G', 'E'],
|
|
583
590
|
['A', 'B', 'C', 'H', 'F', 'E'],
|
|
@@ -591,7 +598,12 @@ describe('UndirectedGraph tarjan', () => {
|
|
|
591
598
|
['C', 'D', 'I', 'H'],
|
|
592
599
|
['E', 'F', 'G'],
|
|
593
600
|
['H', 'J', 'K']
|
|
594
|
-
]
|
|
601
|
+
];
|
|
602
|
+
expect(cycles).toEqual(expectedCycles);
|
|
603
|
+
const cloned = graph.clone();
|
|
604
|
+
const clonedCycles = cloned.getCycles();
|
|
605
|
+
expect(clonedCycles.length).toBe(13);
|
|
606
|
+
expect(clonedCycles).toEqual(expectedCycles);
|
|
595
607
|
});
|
|
596
608
|
|
|
597
609
|
// it('should uncuttable graph tarjan SCCs return correct result', () => {
|
|
@@ -65,7 +65,7 @@ describe('DoublyLinkedList Operation Test', () => {
|
|
|
65
65
|
dList.delete('5');
|
|
66
66
|
expect([...dList]).toEqual(['1', '6', '0', '9']);
|
|
67
67
|
expect([...cloned]).toEqual(['1', '6', '0', '5', '9']);
|
|
68
|
-
expect(cloned.
|
|
68
|
+
expect(cloned.toVisual()).toEqual(['1', '6', '0', '5', '9']);
|
|
69
69
|
});
|
|
70
70
|
|
|
71
71
|
it('should find undefined', () => {
|
|
@@ -176,7 +176,7 @@ describe('Navigator', () => {
|
|
|
176
176
|
navigator.start();
|
|
177
177
|
|
|
178
178
|
// The character should not move
|
|
179
|
-
isDebug
|
|
179
|
+
if (isDebug) console.log(visitedCells);
|
|
180
180
|
expect(visitedCells).toEqual([
|
|
181
181
|
[0, 1],
|
|
182
182
|
[1, 1],
|
|
@@ -226,7 +226,7 @@ describe('Navigator', () => {
|
|
|
226
226
|
navigator.start();
|
|
227
227
|
|
|
228
228
|
// The character should have navigated the grid, handled turns, and edge cases
|
|
229
|
-
isDebug
|
|
229
|
+
if (isDebug) console.log(visitedCells);
|
|
230
230
|
expect(visitedCells).toEqual([
|
|
231
231
|
[0, 1],
|
|
232
232
|
[0, 2],
|
|
@@ -76,6 +76,6 @@ describe('MinPriorityQueue Operation Test', () => {
|
|
|
76
76
|
);
|
|
77
77
|
expect(mapped instanceof MinPriorityQueue).toBe(true);
|
|
78
78
|
expect([...mapped]).toEqual([{ key: 1 }, { key: 5 }, { key: 7 }]);
|
|
79
|
-
expect(mapped.
|
|
79
|
+
expect(mapped.toVisual()).toEqual([{ key: 1 }, { key: 5 }, { key: 7 }]);
|
|
80
80
|
});
|
|
81
81
|
});
|