data-structure-typed 1.33.0 → 1.33.5
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/{.eslintrc.json → .eslintrc.js} +2 -1
- package/.github/workflows/ci.yml +15 -3
- package/.github/workflows/release-package.yml +32 -0
- package/{.prettierrc → .prettierrc.js} +1 -1
- package/CHANGELOG.md +5 -1
- package/README.md +196 -257
- package/coverage/coverage-final.json +64 -64
- package/coverage/coverage-summary.json +16 -16
- package/dist/data-structures/binary-tree/abstract-binary-tree.js +1 -16
- package/dist/data-structures/binary-tree/abstract-binary-tree.js.map +1 -1
- package/dist/data-structures/binary-tree/avl-tree.js +2 -2
- package/dist/data-structures/binary-tree/avl-tree.js.map +1 -1
- package/dist/data-structures/binary-tree/rb-tree.js +3 -4
- package/dist/data-structures/binary-tree/rb-tree.js.map +1 -1
- package/dist/data-structures/graph/abstract-graph.js +12 -12
- package/dist/data-structures/graph/abstract-graph.js.map +1 -1
- package/dist/data-structures/graph/directed-graph.js.map +1 -1
- package/dist/data-structures/graph/undirected-graph.js.map +1 -1
- package/dist/data-structures/hash/hash-table.js +107 -2
- package/dist/data-structures/hash/hash-table.js.map +1 -1
- package/dist/data-structures/heap/max-heap.js.map +1 -1
- package/dist/data-structures/heap/min-heap.js.map +1 -1
- package/dist/data-structures/linked-list/doubly-linked-list.js +30 -0
- package/dist/data-structures/linked-list/doubly-linked-list.js.map +1 -1
- package/dist/data-structures/matrix/matrix2d.js +5 -8
- package/dist/data-structures/matrix/matrix2d.js.map +1 -1
- package/dist/data-structures/priority-queue/max-priority-queue.js.map +1 -1
- package/dist/data-structures/priority-queue/min-priority-queue.js.map +1 -1
- package/dist/data-structures/priority-queue/priority-queue.js +6 -6
- package/dist/data-structures/priority-queue/priority-queue.js.map +1 -1
- package/dist/data-structures/queue/deque.js.map +1 -1
- package/docs/index.html +196 -256
- package/docs/modules.html +2 -0
- package/lib/data-structures/binary-tree/abstract-binary-tree.d.ts +8 -18
- package/lib/data-structures/binary-tree/abstract-binary-tree.js +5 -23
- package/lib/data-structures/binary-tree/avl-tree.d.ts +7 -10
- package/lib/data-structures/binary-tree/avl-tree.js +6 -9
- package/lib/data-structures/binary-tree/binary-tree.d.ts +2 -2
- package/lib/data-structures/binary-tree/bst.d.ts +2 -2
- package/lib/data-structures/binary-tree/rb-tree.d.ts +3 -3
- package/lib/data-structures/binary-tree/rb-tree.js +3 -3
- package/lib/data-structures/binary-tree/tree-multiset.d.ts +3 -3
- package/lib/data-structures/binary-tree/tree-multiset.js +1 -1
- package/lib/data-structures/graph/abstract-graph.d.ts +10 -10
- package/lib/data-structures/graph/abstract-graph.js +2 -2
- package/lib/data-structures/graph/directed-graph.d.ts +6 -6
- package/lib/data-structures/graph/directed-graph.js +2 -2
- package/lib/data-structures/graph/map-graph.d.ts +6 -6
- package/lib/data-structures/graph/map-graph.js +2 -2
- package/lib/data-structures/graph/undirected-graph.d.ts +6 -6
- package/lib/data-structures/graph/undirected-graph.js +2 -2
- package/lib/data-structures/hash/hash-table.d.ts +61 -1
- package/lib/data-structures/hash/hash-table.js +136 -0
- package/lib/data-structures/heap/heap.d.ts +31 -31
- package/lib/data-structures/heap/heap.js +11 -11
- package/lib/data-structures/heap/max-heap.d.ts +4 -4
- package/lib/data-structures/heap/max-heap.js +1 -1
- package/lib/data-structures/heap/min-heap.d.ts +4 -4
- package/lib/data-structures/heap/min-heap.js +1 -1
- package/lib/data-structures/linked-list/doubly-linked-list.d.ts +93 -54
- package/lib/data-structures/linked-list/doubly-linked-list.js +79 -22
- package/lib/data-structures/linked-list/singly-linked-list.d.ts +46 -46
- package/lib/data-structures/linked-list/singly-linked-list.js +20 -20
- package/lib/data-structures/matrix/matrix.d.ts +3 -3
- package/lib/data-structures/matrix/matrix2d.d.ts +1 -1
- package/lib/data-structures/matrix/matrix2d.js +3 -2
- package/lib/data-structures/priority-queue/max-priority-queue.d.ts +4 -4
- package/lib/data-structures/priority-queue/min-priority-queue.d.ts +4 -4
- package/lib/data-structures/priority-queue/priority-queue.d.ts +26 -26
- package/lib/data-structures/priority-queue/priority-queue.js +8 -8
- package/lib/data-structures/queue/deque.d.ts +30 -30
- package/lib/data-structures/queue/deque.js +7 -7
- package/lib/data-structures/queue/queue.d.ts +27 -27
- package/lib/data-structures/queue/queue.js +8 -8
- package/lib/data-structures/stack/stack.d.ts +15 -15
- package/lib/data-structures/stack/stack.js +6 -6
- package/lib/data-structures/tree/tree.d.ts +7 -7
- package/lib/interfaces/abstract-binary-tree.d.ts +0 -1
- package/lib/interfaces/avl-tree.d.ts +1 -1
- package/lib/types/data-structures/navigator.d.ts +1 -1
- package/package.json +68 -62
- package/src/data-structures/binary-tree/aa-tree.ts +1 -0
- package/src/data-structures/binary-tree/abstract-binary-tree.ts +1608 -0
- package/src/data-structures/binary-tree/avl-tree.ts +307 -0
- package/src/data-structures/binary-tree/b-tree.ts +1 -0
- package/src/data-structures/binary-tree/binary-indexed-tree.ts +76 -0
- package/src/data-structures/binary-tree/binary-tree.ts +47 -0
- package/src/data-structures/binary-tree/bst.ts +537 -0
- package/src/data-structures/binary-tree/index.ts +12 -0
- package/src/data-structures/binary-tree/rb-tree.ts +366 -0
- package/src/data-structures/binary-tree/segment-tree.ts +242 -0
- package/src/data-structures/binary-tree/splay-tree.ts +1 -0
- package/src/data-structures/binary-tree/tree-multiset.ts +700 -0
- package/src/data-structures/binary-tree/two-three-tree.ts +1 -0
- package/src/data-structures/graph/abstract-graph.ts +1040 -0
- package/src/data-structures/graph/directed-graph.ts +470 -0
- package/src/data-structures/graph/index.ts +4 -0
- package/src/data-structures/graph/map-graph.ts +129 -0
- package/src/data-structures/graph/undirected-graph.ts +274 -0
- package/src/data-structures/hash/coordinate-map.ts +67 -0
- package/src/data-structures/hash/coordinate-set.ts +56 -0
- package/src/data-structures/hash/hash-table.ts +157 -0
- package/src/data-structures/hash/index.ts +6 -0
- package/src/data-structures/hash/pair.ts +1 -0
- package/src/data-structures/hash/tree-map.ts +1 -0
- package/src/data-structures/hash/tree-set.ts +1 -0
- package/src/data-structures/heap/heap.ts +212 -0
- package/src/data-structures/heap/index.ts +3 -0
- package/src/data-structures/heap/max-heap.ts +31 -0
- package/src/data-structures/heap/min-heap.ts +32 -0
- package/src/data-structures/index.ts +11 -0
- package/src/data-structures/linked-list/doubly-linked-list.ts +636 -0
- package/src/data-structures/linked-list/index.ts +3 -0
- package/src/data-structures/linked-list/singly-linked-list.ts +501 -0
- package/src/data-structures/linked-list/skip-linked-list.ts +1 -0
- package/src/data-structures/matrix/index.ts +4 -0
- package/src/data-structures/matrix/matrix.ts +27 -0
- package/src/data-structures/matrix/matrix2d.ts +213 -0
- package/src/data-structures/matrix/navigator.ts +121 -0
- package/src/data-structures/matrix/vector2d.ts +316 -0
- package/src/data-structures/priority-queue/index.ts +3 -0
- package/src/data-structures/priority-queue/max-priority-queue.ts +56 -0
- package/src/data-structures/priority-queue/min-priority-queue.ts +57 -0
- package/src/data-structures/priority-queue/priority-queue.ts +359 -0
- package/src/data-structures/queue/deque.ts +297 -0
- package/src/data-structures/queue/index.ts +2 -0
- package/src/data-structures/queue/queue.ts +191 -0
- package/src/data-structures/stack/index.ts +1 -0
- package/src/data-structures/stack/stack.ts +98 -0
- package/src/data-structures/tree/index.ts +1 -0
- package/src/data-structures/tree/tree.ts +69 -0
- package/src/data-structures/trie/index.ts +1 -0
- package/src/data-structures/trie/trie.ts +225 -0
- package/src/index.ts +4 -0
- package/src/interfaces/abstract-binary-tree.ts +189 -0
- package/src/interfaces/abstract-graph.ts +31 -0
- package/src/interfaces/avl-tree.ts +25 -0
- package/src/interfaces/binary-tree.ts +6 -0
- package/src/interfaces/bst.ts +31 -0
- package/src/interfaces/directed-graph.ts +20 -0
- package/src/interfaces/doubly-linked-list.ts +1 -0
- package/src/interfaces/heap.ts +1 -0
- package/src/interfaces/index.ts +15 -0
- package/src/interfaces/navigator.ts +1 -0
- package/src/interfaces/priority-queue.ts +1 -0
- package/src/interfaces/rb-tree.ts +9 -0
- package/src/interfaces/segment-tree.ts +1 -0
- package/src/interfaces/singly-linked-list.ts +1 -0
- package/src/interfaces/tree-multiset.ts +7 -0
- package/src/interfaces/undirected-graph.ts +6 -0
- package/src/types/data-structures/abstract-binary-tree.ts +50 -0
- package/src/types/data-structures/abstract-graph.ts +11 -0
- package/src/types/data-structures/avl-tree.ts +5 -0
- package/src/types/data-structures/binary-tree.ts +5 -0
- package/src/types/data-structures/bst.ts +13 -0
- package/src/types/data-structures/directed-graph.ts +8 -0
- package/src/types/data-structures/doubly-linked-list.ts +1 -0
- package/src/types/data-structures/heap.ts +5 -0
- package/src/types/data-structures/index.ts +15 -0
- package/src/types/data-structures/map-graph.ts +1 -0
- package/src/types/data-structures/navigator.ts +13 -0
- package/src/types/data-structures/priority-queue.ts +9 -0
- package/src/types/data-structures/rb-tree.ts +8 -0
- package/src/types/data-structures/segment-tree.ts +1 -0
- package/src/types/data-structures/singly-linked-list.ts +1 -0
- package/src/types/data-structures/tree-multiset.ts +6 -0
- package/src/types/helpers.ts +1 -0
- package/src/types/index.ts +3 -0
- package/src/types/utils/index.ts +2 -0
- package/src/types/utils/utils.ts +6 -0
- package/src/types/utils/validate-type.ts +35 -0
- package/src/utils/index.ts +1 -0
- package/src/utils/utils.ts +79 -0
- package/test/integration/avl-tree.test.ts +14 -17
- package/test/integration/bst.test.ts +50 -41
- package/test/integration/heap.test.js +0 -3
- package/test/integration/index.html +6 -6
- package/test/unit/data-structures/binary-tree/avl-tree.test.ts +14 -17
- package/test/unit/data-structures/binary-tree/binary-tree.test.ts +142 -0
- package/test/unit/data-structures/binary-tree/bst.test.ts +50 -41
- package/test/unit/data-structures/binary-tree/overall.test.ts +36 -28
- package/test/unit/data-structures/binary-tree/rb-tree.test.ts +43 -0
- package/test/unit/data-structures/binary-tree/tree-multiset.test.ts +23 -12
- package/test/unit/data-structures/graph/directed-graph.test.ts +27 -25
- package/test/unit/data-structures/graph/map-graph.test.ts +4 -5
- package/test/unit/data-structures/graph/overall.test.ts +10 -11
- package/test/unit/data-structures/graph/undirected-graph.test.ts +0 -1
- package/test/unit/data-structures/hash/coordinate-map.test.ts +54 -0
- package/test/unit/data-structures/hash/coordinate-set.test.ts +41 -0
- package/test/unit/data-structures/hash/hash-table.test.ts +97 -0
- package/test/unit/data-structures/heap/heap.test.ts +7 -8
- package/test/unit/data-structures/heap/max-heap.test.ts +7 -5
- package/test/unit/data-structures/heap/min-heap.test.ts +6 -5
- package/test/unit/data-structures/linked-list/doubly-linked-list.test.ts +8 -9
- package/test/unit/data-structures/linked-list/linked-list.test.ts +2 -4
- package/test/unit/data-structures/linked-list/singly-linked-list.test.ts +57 -7
- package/test/unit/data-structures/linked-list/skip-linked-list.test.ts +3 -3
- package/test/unit/data-structures/matrix/matrix.test.ts +54 -0
- package/test/unit/data-structures/matrix/matrix2d.test.ts +138 -0
- package/test/unit/data-structures/matrix/navigator.test.ts +79 -0
- package/test/unit/data-structures/priority-queue/max-priority-queue.test.ts +5 -7
- package/test/unit/data-structures/priority-queue/min-priority-queue.test.ts +13 -13
- package/test/unit/data-structures/priority-queue/priority-queue.test.ts +8 -8
- package/test/unit/data-structures/queue/deque.test.ts +130 -0
- package/test/unit/data-structures/queue/queue.test.ts +167 -4
- package/test/unit/data-structures/stack/stack.test.ts +67 -0
- package/test/unit/data-structures/tree/tree.test.ts +39 -0
- package/test/unit/data-structures/trie/trie.test.ts +95 -0
- package/test/utils/magnitude.ts +3 -3
- package/tsconfig.json +3 -12
- package/tsconfig.prod.json +25 -0
- package/umd/bundle.min.js +1 -1
- package/umd/bundle.min.js.map +1 -1
- package/.auto-changelog +0 -9
- package/.gitattributes +0 -112
- package/.idea/data-structure-typed.iml +0 -19
- package/.idea/inspectionProfiles/Project_Default.xml +0 -6
- package/.idea/misc.xml +0 -6
- package/.idea/modules.xml +0 -8
- package/.idea/vcs.xml +0 -6
- package/.prettierignore +0 -6
- package/webpack.config.js +0 -28
|
@@ -3,7 +3,7 @@ import {bigO, magnitude} from '../../../utils';
|
|
|
3
3
|
|
|
4
4
|
describe('DoublyLinkedList Operation Test', () => {
|
|
5
5
|
let list: DoublyLinkedList<number>;
|
|
6
|
-
let objectList: DoublyLinkedList<{
|
|
6
|
+
let objectList: DoublyLinkedList<{keyA: number}>;
|
|
7
7
|
|
|
8
8
|
beforeEach(() => {
|
|
9
9
|
list = new DoublyLinkedList();
|
|
@@ -117,7 +117,7 @@ describe('DoublyLinkedList Operation Test', () => {
|
|
|
117
117
|
list.push(2);
|
|
118
118
|
list.push(3);
|
|
119
119
|
|
|
120
|
-
const mappedList = list.map(
|
|
120
|
+
const mappedList = list.map(val => val * 2);
|
|
121
121
|
|
|
122
122
|
expect(mappedList.toArray()).toEqual([2, 4, 6]);
|
|
123
123
|
});
|
|
@@ -128,7 +128,7 @@ describe('DoublyLinkedList Operation Test', () => {
|
|
|
128
128
|
list.push(3);
|
|
129
129
|
list.push(4);
|
|
130
130
|
|
|
131
|
-
const filteredList = list.filter(
|
|
131
|
+
const filteredList = list.filter(val => val % 2 === 0);
|
|
132
132
|
|
|
133
133
|
expect(filteredList.toArray()).toEqual([2, 4]);
|
|
134
134
|
});
|
|
@@ -168,7 +168,7 @@ describe('DoublyLinkedList Operation Test', () => {
|
|
|
168
168
|
list.push(2);
|
|
169
169
|
list.push(3);
|
|
170
170
|
|
|
171
|
-
const found = list.find(
|
|
171
|
+
const found = list.find(val => val % 2 === 0);
|
|
172
172
|
|
|
173
173
|
expect(found).toBe(2);
|
|
174
174
|
});
|
|
@@ -189,7 +189,7 @@ describe('DoublyLinkedList Operation Test', () => {
|
|
|
189
189
|
list.push(3);
|
|
190
190
|
list.push(4);
|
|
191
191
|
|
|
192
|
-
const lastEven = list.findLast(
|
|
192
|
+
const lastEven = list.findLast(val => val % 2 === 0);
|
|
193
193
|
|
|
194
194
|
expect(lastEven).toBe(4);
|
|
195
195
|
});
|
|
@@ -234,7 +234,7 @@ describe('DoublyLinkedList Operation Test', () => {
|
|
|
234
234
|
list.push(3);
|
|
235
235
|
|
|
236
236
|
const result: number[] = [];
|
|
237
|
-
list.forEach(
|
|
237
|
+
list.forEach(val => {
|
|
238
238
|
result.push(val * 2);
|
|
239
239
|
});
|
|
240
240
|
|
|
@@ -246,7 +246,7 @@ describe('DoublyLinkedList Operation Test', () => {
|
|
|
246
246
|
list.push(2);
|
|
247
247
|
list.push(3);
|
|
248
248
|
|
|
249
|
-
const mappedList = list.map(
|
|
249
|
+
const mappedList = list.map(val => val * 2);
|
|
250
250
|
|
|
251
251
|
expect(mappedList.toArray()).toEqual([2, 4, 6]);
|
|
252
252
|
});
|
|
@@ -257,7 +257,7 @@ describe('DoublyLinkedList Operation Test', () => {
|
|
|
257
257
|
list.push(3);
|
|
258
258
|
list.push(4);
|
|
259
259
|
|
|
260
|
-
const filteredList = list.filter(
|
|
260
|
+
const filteredList = list.filter(val => val % 2 === 0);
|
|
261
261
|
|
|
262
262
|
expect(filteredList.toArray()).toEqual([2, 4]);
|
|
263
263
|
});
|
|
@@ -339,7 +339,6 @@ describe('DoublyLinkedList Operation Test', () => {
|
|
|
339
339
|
const shiftedObj = objectList.shift();
|
|
340
340
|
expect(shiftedObj).toBe(obj1);
|
|
341
341
|
});
|
|
342
|
-
|
|
343
342
|
});
|
|
344
343
|
|
|
345
344
|
describe('DoublyLinkedList Performance Test', () => {
|
|
@@ -7,7 +7,7 @@ describe('LinkedList Performance Test', () => {
|
|
|
7
7
|
|
|
8
8
|
const startPushTime = performance.now();
|
|
9
9
|
let midNode: DoublyLinkedListNode | null = null;
|
|
10
|
-
const midIndex = Math.floor(
|
|
10
|
+
const midIndex = Math.floor(magnitude.SQUARED / 2);
|
|
11
11
|
for (let i = 0; i < magnitude.SQUARED; i++) {
|
|
12
12
|
doublyList.push(i);
|
|
13
13
|
if (i === midIndex) {
|
|
@@ -21,7 +21,6 @@ describe('LinkedList Performance Test', () => {
|
|
|
21
21
|
const singlyList = new SinglyLinkedList<number>();
|
|
22
22
|
let midSinglyNode: SinglyLinkedListNode | null = null;
|
|
23
23
|
|
|
24
|
-
const startSinglyPushTime = performance.now();
|
|
25
24
|
for (let i = 0; i < magnitude.SQUARED; i++) {
|
|
26
25
|
singlyList.push(i);
|
|
27
26
|
if (i === midIndex) {
|
|
@@ -31,7 +30,6 @@ describe('LinkedList Performance Test', () => {
|
|
|
31
30
|
}
|
|
32
31
|
}
|
|
33
32
|
|
|
34
|
-
|
|
35
|
-
expect(doublyListPushCost).toBeLessThan(bigO.SQUARED * 2);
|
|
33
|
+
expect(doublyListPushCost).toBeLessThan(bigO.SQUARED * 5);
|
|
36
34
|
});
|
|
37
35
|
});
|
|
@@ -3,10 +3,10 @@ import {bigO, magnitude} from '../../../utils';
|
|
|
3
3
|
|
|
4
4
|
describe('SinglyLinkedList Operation Test', () => {
|
|
5
5
|
let list: SinglyLinkedList<number>;
|
|
6
|
-
let objectList: SinglyLinkedList<{
|
|
6
|
+
let objectList: SinglyLinkedList<{keyA: number}>;
|
|
7
7
|
beforeEach(() => {
|
|
8
8
|
list = new SinglyLinkedList<number>();
|
|
9
|
-
objectList = new SinglyLinkedList<{
|
|
9
|
+
objectList = new SinglyLinkedList<{keyA: number}>();
|
|
10
10
|
});
|
|
11
11
|
|
|
12
12
|
describe('push', () => {
|
|
@@ -71,7 +71,6 @@ describe('SinglyLinkedList Operation Test', () => {
|
|
|
71
71
|
});
|
|
72
72
|
});
|
|
73
73
|
|
|
74
|
-
|
|
75
74
|
describe('insertAfter', () => {
|
|
76
75
|
it('should insert an element after an existing value', () => {
|
|
77
76
|
list.push(1);
|
|
@@ -129,7 +128,6 @@ describe('SinglyLinkedList Operation Test', () => {
|
|
|
129
128
|
});
|
|
130
129
|
});
|
|
131
130
|
|
|
132
|
-
|
|
133
131
|
describe('isEmpty', () => {
|
|
134
132
|
it('should return true for an empty list', () => {
|
|
135
133
|
expect(list.isEmpty()).toBe(true);
|
|
@@ -309,14 +307,14 @@ describe('SinglyLinkedList Operation Test', () => {
|
|
|
309
307
|
list.push(1);
|
|
310
308
|
list.push(2);
|
|
311
309
|
list.push(3);
|
|
312
|
-
const result = list.find(
|
|
310
|
+
const result = list.find(data => data % 2 === 0);
|
|
313
311
|
expect(result).toBe(2);
|
|
314
312
|
});
|
|
315
313
|
|
|
316
314
|
it('should return undefined if element is not found', () => {
|
|
317
315
|
list.push(1);
|
|
318
316
|
list.push(3);
|
|
319
|
-
const result = list.find(
|
|
317
|
+
const result = list.find(data => data % 2 === 0);
|
|
320
318
|
expect(result).toBeNull();
|
|
321
319
|
});
|
|
322
320
|
});
|
|
@@ -376,7 +374,6 @@ describe('SinglyLinkedList Operation Test', () => {
|
|
|
376
374
|
const shiftedObj = objectList.shift();
|
|
377
375
|
expect(shiftedObj).toBe(obj1);
|
|
378
376
|
});
|
|
379
|
-
|
|
380
377
|
});
|
|
381
378
|
|
|
382
379
|
describe('SinglyLinkedList Performance Test', () => {
|
|
@@ -399,3 +396,56 @@ describe('SinglyLinkedList Performance Test', () => {
|
|
|
399
396
|
expect(performance.now() - startPopTime).toBeLessThan(bigO.LINEAR * 300);
|
|
400
397
|
});
|
|
401
398
|
});
|
|
399
|
+
describe('SinglyLinkedList', () => {
|
|
400
|
+
let list: SinglyLinkedList<number>;
|
|
401
|
+
|
|
402
|
+
beforeEach(() => {
|
|
403
|
+
list = new SinglyLinkedList<number>();
|
|
404
|
+
});
|
|
405
|
+
|
|
406
|
+
it('should initialize an empty list', () => {
|
|
407
|
+
expect(list.head).toBeNull();
|
|
408
|
+
expect(list.tail).toBeNull();
|
|
409
|
+
expect(list.length).toBe(0);
|
|
410
|
+
});
|
|
411
|
+
|
|
412
|
+
it('should push elements to the end of the list', () => {
|
|
413
|
+
list.push(1);
|
|
414
|
+
list.push(2);
|
|
415
|
+
expect(list.head!.val).toBe(1);
|
|
416
|
+
expect(list.tail!.val).toBe(2);
|
|
417
|
+
expect(list.length).toBe(2);
|
|
418
|
+
});
|
|
419
|
+
|
|
420
|
+
it('should pop elements from the end of the list', () => {
|
|
421
|
+
list.push(1);
|
|
422
|
+
list.push(2);
|
|
423
|
+
const popped = list.pop();
|
|
424
|
+
expect(popped).toBe(2);
|
|
425
|
+
expect(list.head!.val).toBe(1);
|
|
426
|
+
expect(list.tail!.val).toBe(1);
|
|
427
|
+
expect(list.length).toBe(1);
|
|
428
|
+
});
|
|
429
|
+
|
|
430
|
+
// Add more test cases for other methods like shift, unshift, getAt, deleteAt, and more.
|
|
431
|
+
|
|
432
|
+
it('should reverse the list', () => {
|
|
433
|
+
list.push(1);
|
|
434
|
+
list.push(2);
|
|
435
|
+
list.push(3);
|
|
436
|
+
list.reverse();
|
|
437
|
+
expect(list.head!.val).toBe(3);
|
|
438
|
+
expect(list.tail!.val).toBe(1);
|
|
439
|
+
// Add more assertions for reversed order.
|
|
440
|
+
});
|
|
441
|
+
|
|
442
|
+
// Add more test cases for other methods like find, indexOf, and more.
|
|
443
|
+
|
|
444
|
+
it('should convert the list to an array', () => {
|
|
445
|
+
list.push(1);
|
|
446
|
+
list.push(2);
|
|
447
|
+
list.push(3);
|
|
448
|
+
const array = list.toArray();
|
|
449
|
+
expect(array).toEqual([1, 2, 3]);
|
|
450
|
+
});
|
|
451
|
+
});
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import {SkipLinkedList} from '../../../../src'
|
|
1
|
+
// import {SkipLinkedList} from '../../../../src'
|
|
2
2
|
|
|
3
3
|
describe('SkipLinkedList Operation Test', () => {
|
|
4
4
|
it('should xxx', function () {
|
|
5
|
-
|
|
5
|
+
expect(true).toBeTruthy();
|
|
6
6
|
});
|
|
7
7
|
});
|
|
8
8
|
|
|
9
9
|
describe('SkipLinkedList Performance Test', () => {
|
|
10
10
|
it('should xxx', function () {
|
|
11
|
-
|
|
11
|
+
expect(true).toBeTruthy();
|
|
12
12
|
});
|
|
13
13
|
});
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import {MatrixNTI2D} from '../../../../src';
|
|
2
|
+
|
|
3
|
+
describe('MatrixNTI2D', () => {
|
|
4
|
+
it('should initialize a matrix with rows and columns', () => {
|
|
5
|
+
const numRows = 3;
|
|
6
|
+
const numCols = 4;
|
|
7
|
+
const matrix = new MatrixNTI2D({row: numRows, col: numCols});
|
|
8
|
+
|
|
9
|
+
expect(matrix.toArray().length).toBe(numRows);
|
|
10
|
+
expect(matrix.toArray()[0].length).toBe(numCols);
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
it('should initialize all elements with the provided initial value', () => {
|
|
14
|
+
const numRows = 3;
|
|
15
|
+
const numCols = 4;
|
|
16
|
+
const initialValue = 42;
|
|
17
|
+
const matrix = new MatrixNTI2D({row: numRows, col: numCols, initialVal: initialValue});
|
|
18
|
+
|
|
19
|
+
const matrixArray = matrix.toArray();
|
|
20
|
+
for (let i = 0; i < numRows; i++) {
|
|
21
|
+
for (let j = 0; j < numCols; j++) {
|
|
22
|
+
expect(matrixArray[i][j]).toBe(initialValue);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
it('should initialize all elements with 0 if no initial value is provided', () => {
|
|
28
|
+
const numRows = 3;
|
|
29
|
+
const numCols = 4;
|
|
30
|
+
const matrix = new MatrixNTI2D({row: numRows, col: numCols});
|
|
31
|
+
|
|
32
|
+
const matrixArray = matrix.toArray();
|
|
33
|
+
for (let i = 0; i < numRows; i++) {
|
|
34
|
+
for (let j = 0; j < numCols; j++) {
|
|
35
|
+
expect(matrixArray[i][j]).toBe(0);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
it('should convert the matrix to a two-dimensional array', () => {
|
|
41
|
+
const numRows = 2;
|
|
42
|
+
const numCols = 3;
|
|
43
|
+
const matrix = new MatrixNTI2D({row: numRows, col: numCols, initialVal: 1});
|
|
44
|
+
|
|
45
|
+
const matrixArray = matrix.toArray();
|
|
46
|
+
expect(matrixArray.length).toBe(numRows);
|
|
47
|
+
for (let i = 0; i < numRows; i++) {
|
|
48
|
+
expect(matrixArray[i].length).toBe(numCols);
|
|
49
|
+
for (let j = 0; j < numCols; j++) {
|
|
50
|
+
expect(matrixArray[i][j]).toBe(1);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
});
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import {Matrix2D, Vector2D} from '../../../../src';
|
|
2
|
+
|
|
3
|
+
describe('Matrix2D', () => {
|
|
4
|
+
it('should initialize with default identity matrix', () => {
|
|
5
|
+
const matrix = new Matrix2D();
|
|
6
|
+
const expectedMatrix = Matrix2D.identity;
|
|
7
|
+
|
|
8
|
+
expect(matrix.m).toEqual(expectedMatrix);
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
it('should initialize with provided 2D array', () => {
|
|
12
|
+
const inputMatrix = [
|
|
13
|
+
[2, 0, 0],
|
|
14
|
+
[0, 3, 0],
|
|
15
|
+
[0, 0, 1]
|
|
16
|
+
];
|
|
17
|
+
const matrix = new Matrix2D(inputMatrix);
|
|
18
|
+
|
|
19
|
+
expect(matrix.m).toEqual(inputMatrix);
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it('should initialize with provided Vector2D', () => {
|
|
23
|
+
expect(true).toBeTruthy();
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it('should add two matrices correctly', () => {
|
|
27
|
+
const matrix1 = new Matrix2D([
|
|
28
|
+
[1, 2, 3],
|
|
29
|
+
[4, 5, 6],
|
|
30
|
+
[7, 8, 9]
|
|
31
|
+
]);
|
|
32
|
+
const matrix2 = new Matrix2D([
|
|
33
|
+
[9, 8, 7],
|
|
34
|
+
[6, 5, 4],
|
|
35
|
+
[3, 2, 1]
|
|
36
|
+
]);
|
|
37
|
+
const expectedMatrix = [
|
|
38
|
+
[10, 10, 10],
|
|
39
|
+
[10, 10, 10],
|
|
40
|
+
[10, 10, 10]
|
|
41
|
+
];
|
|
42
|
+
|
|
43
|
+
const result = Matrix2D.add(matrix1, matrix2);
|
|
44
|
+
|
|
45
|
+
expect(result.m).toEqual(expectedMatrix);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
it('should subtract two matrices correctly', () => {
|
|
49
|
+
const matrix1 = new Matrix2D([
|
|
50
|
+
[9, 8, 7],
|
|
51
|
+
[6, 5, 4],
|
|
52
|
+
[3, 2, 1]
|
|
53
|
+
]);
|
|
54
|
+
const matrix2 = new Matrix2D([
|
|
55
|
+
[1, 2, 3],
|
|
56
|
+
[4, 5, 6],
|
|
57
|
+
[7, 8, 9]
|
|
58
|
+
]);
|
|
59
|
+
const expectedMatrix = [
|
|
60
|
+
[8, 6, 4],
|
|
61
|
+
[2, 0, -2],
|
|
62
|
+
[-4, -6, -8]
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
const result = Matrix2D.subtract(matrix1, matrix2);
|
|
66
|
+
|
|
67
|
+
expect(result.m).toEqual(expectedMatrix);
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
it('should multiply two matrices correctly', () => {
|
|
71
|
+
const matrix1 = new Matrix2D([
|
|
72
|
+
[1, 2, 3],
|
|
73
|
+
[4, 5, 6],
|
|
74
|
+
[7, 8, 9]
|
|
75
|
+
]);
|
|
76
|
+
const matrix2 = new Matrix2D([
|
|
77
|
+
[9, 8, 7],
|
|
78
|
+
[6, 5, 4],
|
|
79
|
+
[3, 2, 1]
|
|
80
|
+
]);
|
|
81
|
+
const expectedMatrix = [
|
|
82
|
+
[30, 24, 18],
|
|
83
|
+
[84, 69, 54],
|
|
84
|
+
[138, 114, 90]
|
|
85
|
+
];
|
|
86
|
+
|
|
87
|
+
const result = Matrix2D.multiply(matrix1, matrix2);
|
|
88
|
+
|
|
89
|
+
expect(result.m).toEqual(expectedMatrix);
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
it('should multiply a matrix by a Vector2D correctly', () => {
|
|
93
|
+
expect(true).toBeTruthy();
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
it('should scale a matrix by a value correctly', () => {
|
|
97
|
+
expect(true).toBeTruthy();
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
it('should rotate a matrix by radians correctly', () => {
|
|
101
|
+
expect(true).toBeTruthy();
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
it('should translate a matrix by a Vector2D correctly', () => {
|
|
105
|
+
const translationVector = new Vector2D(2, 3);
|
|
106
|
+
const expectedMatrix = [
|
|
107
|
+
[1, 0, 2],
|
|
108
|
+
[0, 1, 3],
|
|
109
|
+
[0, 0, 1]
|
|
110
|
+
];
|
|
111
|
+
|
|
112
|
+
const result = Matrix2D.translate(translationVector);
|
|
113
|
+
|
|
114
|
+
expect(result.m).toEqual(expectedMatrix);
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
it('should create a view matrix correctly', () => {
|
|
118
|
+
expect(true).toBeTruthy();
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
it('should multiply a matrix by a value correctly', () => {
|
|
122
|
+
const matrix = new Matrix2D([
|
|
123
|
+
[1, 2, 3],
|
|
124
|
+
[4, 5, 6],
|
|
125
|
+
[7, 8, 9]
|
|
126
|
+
]);
|
|
127
|
+
const value = 2;
|
|
128
|
+
const expectedMatrix = [
|
|
129
|
+
[2, 4, 6],
|
|
130
|
+
[8, 10, 12],
|
|
131
|
+
[14, 16, 18]
|
|
132
|
+
];
|
|
133
|
+
|
|
134
|
+
const result = Matrix2D.multiplyByValue(matrix, value);
|
|
135
|
+
|
|
136
|
+
expect(result.m).toEqual(expectedMatrix);
|
|
137
|
+
});
|
|
138
|
+
});
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import {Character, NavigatorParams, Turning, Navigator} from '../../../../src';
|
|
2
|
+
|
|
3
|
+
const exampleMatrix: number[][] = [
|
|
4
|
+
[0, 0, 0, 0],
|
|
5
|
+
[0, 1, 1, 0],
|
|
6
|
+
[0, 0, 0, 0]
|
|
7
|
+
];
|
|
8
|
+
|
|
9
|
+
// Create a sample redirect object
|
|
10
|
+
const exampleTurning: Turning = {
|
|
11
|
+
up: 'right',
|
|
12
|
+
right: 'down',
|
|
13
|
+
down: 'left',
|
|
14
|
+
left: 'up'
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
// Create a sample move callback function
|
|
18
|
+
const exampleOnMove = () => {
|
|
19
|
+
expect(true).toBeTruthy();
|
|
20
|
+
// console.log(`Moved to position (${cur[0]}, ${cur[1]})`);
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
// Create an initial parameter object for the example
|
|
24
|
+
const exampleInit: NavigatorParams<number>['init'] = {
|
|
25
|
+
cur: [0, 0],
|
|
26
|
+
charDir: 'right',
|
|
27
|
+
VISITED: -1
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
// Create a Navigator Params object
|
|
31
|
+
const exampleNavigatorParams: NavigatorParams<number> = {
|
|
32
|
+
matrix: exampleMatrix,
|
|
33
|
+
turning: exampleTurning,
|
|
34
|
+
onMove: exampleOnMove,
|
|
35
|
+
init: exampleInit
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
describe('Character class', () => {
|
|
39
|
+
it('should create a character with the correct direction', () => {
|
|
40
|
+
const character = new Character('up', exampleTurning);
|
|
41
|
+
expect(character.direction).toBe('up');
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
it('should turn the character in the correct direction', () => {
|
|
45
|
+
const character = new Character('up', exampleTurning);
|
|
46
|
+
const turnedCharacter = character.turn();
|
|
47
|
+
expect(turnedCharacter.direction).toBe('right');
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
describe('Navigator class', () => {
|
|
52
|
+
let navigator: Navigator<number>;
|
|
53
|
+
|
|
54
|
+
beforeEach(() => {
|
|
55
|
+
navigator = new Navigator(exampleNavigatorParams);
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
it('should initialize with the correct matrix and current position', () => {
|
|
59
|
+
expect(navigator['_matrix']).toEqual(exampleMatrix);
|
|
60
|
+
expect(navigator['_cur']).toEqual(exampleInit.cur);
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
it('should move the character correctly', () => {
|
|
64
|
+
navigator.move('right');
|
|
65
|
+
expect(navigator['_cur']).toEqual([0, 1]);
|
|
66
|
+
expect(navigator['_matrix'][0][1]).toBe(exampleInit.VISITED);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
it('should turn the character correctly', () => {
|
|
70
|
+
expect(navigator['_character'].direction).toBe('right');
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
it('should check for valid moves correctly', () => {
|
|
74
|
+
expect(navigator.check('up')).toBe(false); // Blocked by wall
|
|
75
|
+
expect(navigator.check('right')).toBe(true); // Open path
|
|
76
|
+
expect(navigator.check('down')).toBe(true); // Blocked by wall
|
|
77
|
+
expect(navigator.check('left')).toBe(false); // Open path
|
|
78
|
+
});
|
|
79
|
+
});
|
|
@@ -2,7 +2,6 @@ import {MaxPriorityQueue} from '../../../../src';
|
|
|
2
2
|
import {bigO, magnitude} from '../../../utils';
|
|
3
3
|
|
|
4
4
|
describe('MaxPriorityQueue Operation Test', () => {
|
|
5
|
-
|
|
6
5
|
it('should add elements and maintain heap property', () => {
|
|
7
6
|
const priorityQueue = new MaxPriorityQueue<number>();
|
|
8
7
|
|
|
@@ -18,7 +17,7 @@ describe('MaxPriorityQueue Operation Test', () => {
|
|
|
18
17
|
});
|
|
19
18
|
|
|
20
19
|
it('should add elements and maintain heap property in a object MaxPriorityQueue', () => {
|
|
21
|
-
const priorityQueue = new MaxPriorityQueue<{
|
|
20
|
+
const priorityQueue = new MaxPriorityQueue<{keyA: number}>({
|
|
22
21
|
nodes: [{keyA: 5}, {keyA: 3}, {keyA: 1}],
|
|
23
22
|
comparator: (a, b) => b.keyA - a.keyA
|
|
24
23
|
});
|
|
@@ -67,20 +66,20 @@ describe('MaxPriorityQueue Operation Test', () => {
|
|
|
67
66
|
|
|
68
67
|
it('should correctly heapify an object array', () => {
|
|
69
68
|
const nodes = [{keyA: 5}, {keyA: 3}, {keyA: 7}, {keyA: 1}];
|
|
70
|
-
const maxPQ = MaxPriorityQueue.heapify<{
|
|
69
|
+
const maxPQ = MaxPriorityQueue.heapify<{keyA: number}>({nodes, comparator: (a, b) => b.keyA - a.keyA});
|
|
71
70
|
|
|
72
71
|
expect(maxPQ.poll()?.keyA).toBe(7);
|
|
73
72
|
expect(maxPQ.poll()?.keyA).toBe(5);
|
|
74
73
|
expect(maxPQ.poll()?.keyA).toBe(3);
|
|
75
74
|
expect(maxPQ.poll()?.keyA).toBe(1);
|
|
76
75
|
});
|
|
77
|
-
|
|
78
76
|
});
|
|
79
77
|
|
|
80
78
|
describe('MaxPriorityQueue Performance Test', () => {
|
|
81
|
-
|
|
82
79
|
it('should the poll method adheres to a time complexity of O(log n) and executed correctly under large scale distinct data', () => {
|
|
83
|
-
const nodes = Array.from(
|
|
80
|
+
const nodes = Array.from(
|
|
81
|
+
new Set<number>(Array.from(new Array(magnitude.LINEAR), () => Math.floor(Math.random() * magnitude.LINEAR * 100)))
|
|
82
|
+
);
|
|
84
83
|
expect(nodes.length).toBeGreaterThan(magnitude.LINEAR / 2);
|
|
85
84
|
const maxPQ = new MaxPriorityQueue<number>({nodes});
|
|
86
85
|
|
|
@@ -94,7 +93,6 @@ describe('MaxPriorityQueue Performance Test', () => {
|
|
|
94
93
|
}
|
|
95
94
|
expect(performance.now() - startTime).toBeLessThan(bigO.LINEAR * 50);
|
|
96
95
|
expect(prev).toBeGreaterThan(0);
|
|
97
|
-
|
|
98
96
|
});
|
|
99
97
|
|
|
100
98
|
it('should sorted.length to be the same as original data', () => {
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import {MinPriorityQueue, PriorityQueue} from '../../../../src';
|
|
2
2
|
|
|
3
3
|
describe('MinPriorityQueue Operation Test', () => {
|
|
4
|
-
|
|
5
4
|
it('should check if a node exists in the queue', () => {
|
|
6
5
|
const priorityQueue = new MinPriorityQueue<number>();
|
|
7
6
|
priorityQueue.add(5);
|
|
@@ -20,7 +19,6 @@ describe('MinPriorityQueue Operation Test', () => {
|
|
|
20
19
|
expect(priorityQueue.size).toBe(3);
|
|
21
20
|
});
|
|
22
21
|
|
|
23
|
-
|
|
24
22
|
it('should return the last element', () => {
|
|
25
23
|
const priorityQueue = new MinPriorityQueue<number>();
|
|
26
24
|
priorityQueue.add(5);
|
|
@@ -52,7 +50,6 @@ describe('MinPriorityQueue Operation Test', () => {
|
|
|
52
50
|
expect(priorityQueue.isEmpty()).toBe(true);
|
|
53
51
|
});
|
|
54
52
|
|
|
55
|
-
|
|
56
53
|
it('should sort the elements', () => {
|
|
57
54
|
const priorityQueue = new MinPriorityQueue<number>();
|
|
58
55
|
priorityQueue.add(5);
|
|
@@ -72,10 +69,12 @@ describe('MinPriorityQueue Operation Test', () => {
|
|
|
72
69
|
minPQ.poll();
|
|
73
70
|
expect(minPQ.toArray()).toEqual([4, 5, 6]);
|
|
74
71
|
expect(minPQ.peek()).toBe(4);
|
|
75
|
-
expect(
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
72
|
+
expect(
|
|
73
|
+
PriorityQueue.heapify({
|
|
74
|
+
nodes: [3, 2, 1, 5, 6, 7, 8, 9, 10],
|
|
75
|
+
comparator: (a, b) => a - b
|
|
76
|
+
}).toArray()
|
|
77
|
+
).toEqual([1, 2, 3, 5, 6, 7, 8, 9, 10]);
|
|
79
78
|
});
|
|
80
79
|
|
|
81
80
|
it('should Max PriorityQueue poll, peek, heapify, toArray work well', function () {
|
|
@@ -86,20 +85,21 @@ describe('MinPriorityQueue Operation Test', () => {
|
|
|
86
85
|
maxPriorityQueue.poll();
|
|
87
86
|
expect(maxPriorityQueue.toArray()).toEqual([3, 2, 1]);
|
|
88
87
|
expect(maxPriorityQueue.peek()).toBe(3);
|
|
89
|
-
expect(
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
88
|
+
expect(
|
|
89
|
+
PriorityQueue.heapify({
|
|
90
|
+
nodes: [3, 2, 1, 5, 6, 7, 8, 9, 10],
|
|
91
|
+
comparator: (a, b) => a - b
|
|
92
|
+
}).toArray()
|
|
93
|
+
).toEqual([1, 2, 3, 5, 6, 7, 8, 9, 10]);
|
|
93
94
|
});
|
|
94
95
|
|
|
95
96
|
it('should PriorityQueue clone, sort, getNodes, DFS work well', function () {
|
|
96
97
|
const minPQ1 = new PriorityQueue<number>({nodes: [2, 5, 8, 3, 1, 6, 7, 4], comparator: (a, b) => a - b});
|
|
97
98
|
const clonedPriorityQueue = minPQ1.clone();
|
|
98
99
|
expect(clonedPriorityQueue.getNodes()).toEqual(minPQ1.getNodes());
|
|
99
|
-
expect(clonedPriorityQueue.sort()).toEqual([1, 2, 3, 4, 5, 6, 7, 8])
|
|
100
|
+
expect(clonedPriorityQueue.sort()).toEqual([1, 2, 3, 4, 5, 6, 7, 8]);
|
|
100
101
|
expect(minPQ1.DFS('in')).toEqual([4, 3, 2, 5, 1, 8, 6, 7]);
|
|
101
102
|
expect(minPQ1.DFS('post')).toEqual([4, 3, 5, 2, 8, 7, 6, 1]);
|
|
102
103
|
expect(minPQ1.DFS('pre')).toEqual([1, 2, 3, 4, 5, 6, 8, 7]);
|
|
103
104
|
});
|
|
104
|
-
|
|
105
105
|
});
|
|
@@ -2,26 +2,26 @@ import {PriorityQueue} from '../../../../src';
|
|
|
2
2
|
import {getRandomInt} from '../../../utils';
|
|
3
3
|
|
|
4
4
|
describe('PriorityQueue Operation Test', () => {
|
|
5
|
-
|
|
6
5
|
it('should validate a priority queue', () => {
|
|
7
6
|
const minPQ = new PriorityQueue<number>({nodes: [1, 5, 7, 9, 3, 6, 2], comparator: (a, b) => a - b});
|
|
8
7
|
|
|
9
8
|
expect(minPQ.isValid()).toBe(true);
|
|
10
9
|
expect(PriorityQueue.isPriorityQueueified({nodes: minPQ.nodes, comparator: (a, b) => a - b})).toBe(true);
|
|
11
10
|
expect(PriorityQueue.isPriorityQueueified({nodes: minPQ.nodes, comparator: (a, b) => b - a})).toBe(false);
|
|
12
|
-
expect(
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
expect(
|
|
12
|
+
PriorityQueue.isPriorityQueueified({
|
|
13
|
+
nodes: [1, 5, 7, 9, 3, 6, 2],
|
|
14
|
+
comparator: (a, b) => b - a
|
|
15
|
+
})
|
|
16
|
+
).toBe(false);
|
|
16
17
|
});
|
|
17
|
-
|
|
18
18
|
});
|
|
19
19
|
|
|
20
20
|
describe('Priority Queue Performance Test', () => {
|
|
21
21
|
it('should numeric heap work well', function () {
|
|
22
22
|
const values = Array.from(new Array(10000), () => getRandomInt(1, 10000000));
|
|
23
23
|
const minPriorityQueue = new PriorityQueue<number>({nodes: values, comparator: (a, b) => a - b});
|
|
24
|
-
const sorted = minPriorityQueue.sort()
|
|
24
|
+
const sorted = minPriorityQueue.sort();
|
|
25
25
|
expect(sorted).toEqual(values.sort((a, b) => a - b));
|
|
26
26
|
});
|
|
27
|
-
})
|
|
27
|
+
});
|