data-structure-typed 1.49.4 → 1.49.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/CHANGELOG.md +1 -1
- package/README.md +1 -3
- package/README_zh-CN.md +1 -1
- package/dist/cjs/data-structures/base/iterable-base.d.ts +1 -1
- package/dist/cjs/data-structures/base/iterable-base.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +1 -13
- package/dist/cjs/data-structures/binary-tree/binary-tree.js +19 -49
- package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/rb-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/tree-multimap.d.ts +0 -16
- package/dist/cjs/data-structures/binary-tree/tree-multimap.js +1 -43
- package/dist/cjs/data-structures/binary-tree/tree-multimap.js.map +1 -1
- package/dist/cjs/data-structures/graph/abstract-graph.d.ts +1 -1
- package/dist/cjs/data-structures/graph/abstract-graph.js +3 -2
- package/dist/cjs/data-structures/graph/abstract-graph.js.map +1 -1
- package/dist/cjs/data-structures/graph/directed-graph.js.map +1 -1
- package/dist/cjs/data-structures/graph/map-graph.js.map +1 -1
- package/dist/cjs/data-structures/graph/undirected-graph.js.map +1 -1
- package/dist/cjs/data-structures/hash/hash-map.d.ts +1 -1
- package/dist/cjs/data-structures/hash/hash-map.js +2 -2
- package/dist/cjs/data-structures/hash/hash-map.js.map +1 -1
- package/dist/cjs/data-structures/heap/heap.js +2 -3
- package/dist/cjs/data-structures/heap/heap.js.map +1 -1
- package/dist/cjs/data-structures/heap/max-heap.js.map +1 -1
- package/dist/cjs/data-structures/heap/min-heap.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.map +1 -1
- package/dist/cjs/data-structures/matrix/index.d.ts +0 -2
- package/dist/cjs/data-structures/matrix/index.js +0 -2
- package/dist/cjs/data-structures/matrix/index.js.map +1 -1
- package/dist/cjs/data-structures/matrix/matrix.d.ts +128 -10
- package/dist/cjs/data-structures/matrix/matrix.js +400 -15
- package/dist/cjs/data-structures/matrix/matrix.js.map +1 -1
- package/dist/cjs/data-structures/priority-queue/min-priority-queue.js.map +1 -1
- package/dist/cjs/data-structures/queue/deque.d.ts +2 -2
- package/dist/cjs/data-structures/queue/deque.js +5 -7
- 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/types/data-structures/base/base.d.ts +1 -1
- package/dist/cjs/types/data-structures/heap/heap.d.ts +1 -1
- package/dist/cjs/types/data-structures/priority-queue/priority-queue.d.ts +1 -1
- package/dist/cjs/utils/utils.d.ts +1 -0
- package/dist/cjs/utils/utils.js +6 -1
- package/dist/cjs/utils/utils.js.map +1 -1
- package/dist/mjs/data-structures/base/iterable-base.d.ts +1 -1
- package/dist/mjs/data-structures/binary-tree/avl-tree.js +2 -1
- package/dist/mjs/data-structures/binary-tree/binary-tree.d.ts +1 -13
- package/dist/mjs/data-structures/binary-tree/binary-tree.js +20 -50
- package/dist/mjs/data-structures/binary-tree/bst.js +2 -1
- package/dist/mjs/data-structures/binary-tree/rb-tree.js +2 -1
- package/dist/mjs/data-structures/binary-tree/tree-multimap.d.ts +0 -16
- package/dist/mjs/data-structures/binary-tree/tree-multimap.js +3 -44
- package/dist/mjs/data-structures/graph/abstract-graph.d.ts +1 -1
- package/dist/mjs/data-structures/graph/abstract-graph.js +4 -3
- package/dist/mjs/data-structures/hash/hash-map.d.ts +1 -1
- package/dist/mjs/data-structures/hash/hash-map.js +2 -2
- package/dist/mjs/data-structures/heap/heap.js +2 -3
- 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 +1 -1
- package/dist/mjs/data-structures/matrix/index.d.ts +0 -2
- package/dist/mjs/data-structures/matrix/index.js +0 -2
- package/dist/mjs/data-structures/matrix/matrix.d.ts +128 -10
- package/dist/mjs/data-structures/matrix/matrix.js +399 -16
- package/dist/mjs/data-structures/queue/deque.d.ts +2 -2
- package/dist/mjs/data-structures/queue/deque.js +7 -9
- package/dist/mjs/data-structures/queue/queue.d.ts +1 -1
- package/dist/mjs/data-structures/queue/queue.js +1 -1
- package/dist/mjs/types/data-structures/base/base.d.ts +1 -1
- package/dist/mjs/types/data-structures/heap/heap.d.ts +1 -1
- package/dist/mjs/types/data-structures/priority-queue/priority-queue.d.ts +1 -1
- package/dist/mjs/utils/utils.d.ts +1 -0
- package/dist/mjs/utils/utils.js +4 -0
- package/dist/umd/data-structure-typed.js +356 -524
- package/dist/umd/data-structure-typed.min.js +2 -2
- package/dist/umd/data-structure-typed.min.js.map +1 -1
- package/package.json +4 -3
- package/src/data-structures/base/index.ts +1 -1
- package/src/data-structures/base/iterable-base.ts +7 -10
- package/src/data-structures/binary-tree/avl-tree.ts +15 -8
- package/src/data-structures/binary-tree/binary-tree.ts +57 -74
- package/src/data-structures/binary-tree/bst.ts +16 -13
- package/src/data-structures/binary-tree/rb-tree.ts +16 -10
- package/src/data-structures/binary-tree/tree-multimap.ts +11 -48
- package/src/data-structures/graph/abstract-graph.ts +13 -11
- package/src/data-structures/graph/directed-graph.ts +1 -3
- package/src/data-structures/graph/map-graph.ts +6 -1
- package/src/data-structures/graph/undirected-graph.ts +3 -6
- package/src/data-structures/hash/hash-map.ts +18 -16
- package/src/data-structures/heap/heap.ts +7 -10
- package/src/data-structures/heap/max-heap.ts +2 -1
- package/src/data-structures/heap/min-heap.ts +2 -1
- package/src/data-structures/linked-list/singly-linked-list.ts +2 -3
- package/src/data-structures/matrix/index.ts +0 -2
- package/src/data-structures/matrix/matrix.ts +442 -13
- package/src/data-structures/priority-queue/min-priority-queue.ts +11 -10
- package/src/data-structures/queue/deque.ts +18 -39
- package/src/data-structures/queue/queue.ts +1 -1
- package/src/interfaces/binary-tree.ts +7 -2
- package/src/types/common.ts +4 -4
- package/src/types/data-structures/base/base.ts +14 -3
- package/src/types/data-structures/base/index.ts +1 -1
- package/src/types/data-structures/graph/abstract-graph.ts +4 -2
- package/src/types/data-structures/hash/hash-map.ts +3 -3
- package/src/types/data-structures/heap/heap.ts +2 -2
- package/src/types/data-structures/priority-queue/priority-queue.ts +2 -2
- package/src/utils/utils.ts +7 -1
- package/test/integration/avl-tree.test.ts +18 -1
- package/test/integration/bst.test.ts +2 -2
- package/test/performance/data-structures/binary-tree/rb-tree.test.ts +1 -1
- package/test/performance/data-structures/comparison/comparison.test.ts +6 -11
- package/test/performance/data-structures/hash/hash-map.test.ts +3 -4
- package/test/performance/data-structures/linked-list/doubly-linked-list.test.ts +0 -1
- package/test/performance/data-structures/queue/deque.test.ts +6 -7
- package/test/performance/data-structures/queue/queue.test.ts +10 -9
- package/test/performance/reportor.ts +14 -15
- package/test/unit/data-structures/binary-tree/avl-tree.test.ts +14 -3
- package/test/unit/data-structures/binary-tree/binary-tree.test.ts +59 -24
- package/test/unit/data-structures/binary-tree/bst.test.ts +52 -26
- package/test/unit/data-structures/binary-tree/overall.test.ts +16 -18
- package/test/unit/data-structures/binary-tree/rb-tree.test.ts +17 -6
- package/test/unit/data-structures/binary-tree/tree-multimap.test.ts +37 -21
- package/test/unit/data-structures/graph/directed-graph.test.ts +104 -45
- package/test/unit/data-structures/graph/undirected-graph.test.ts +57 -40
- package/test/unit/data-structures/hash/hash-map.test.ts +48 -28
- package/test/unit/data-structures/hash/hash-table.test.ts +0 -4
- package/test/unit/data-structures/heap/heap.test.ts +0 -1
- package/test/unit/data-structures/heap/min-heap.test.ts +6 -5
- package/test/unit/data-structures/linked-list/doubly-linked-list.test.ts +10 -11
- package/test/unit/data-structures/linked-list/singly-linked-list.test.ts +3 -4
- package/test/unit/data-structures/matrix/matrix.test.ts +345 -52
- package/test/unit/data-structures/priority-queue/max-priority-queue.test.ts +1 -1
- package/test/unit/data-structures/priority-queue/priority-queue.test.ts +0 -1
- package/test/unit/data-structures/queue/deque.test.ts +0 -6
- package/test/unit/data-structures/queue/queue.test.ts +1 -1
- package/test/unit/data-structures/stack/stack.test.ts +3 -4
- package/test/unit/unrestricted-interconversion.test.ts +50 -44
- package/test/utils/performanc.ts +1 -1
- package/typedoc.json +30 -0
- package/dist/cjs/data-structures/matrix/matrix2d.d.ts +0 -107
- package/dist/cjs/data-structures/matrix/matrix2d.js +0 -200
- package/dist/cjs/data-structures/matrix/matrix2d.js.map +0 -1
- package/dist/cjs/data-structures/matrix/vector2d.d.ts +0 -200
- package/dist/cjs/data-structures/matrix/vector2d.js +0 -291
- package/dist/cjs/data-structures/matrix/vector2d.js.map +0 -1
- package/dist/mjs/data-structures/matrix/matrix2d.d.ts +0 -107
- package/dist/mjs/data-structures/matrix/matrix2d.js +0 -196
- package/dist/mjs/data-structures/matrix/vector2d.d.ts +0 -200
- package/dist/mjs/data-structures/matrix/vector2d.js +0 -289
- package/src/data-structures/matrix/matrix2d.ts +0 -211
- package/src/data-structures/matrix/vector2d.ts +0 -315
- package/test/unit/data-structures/matrix/matrix2d.test.ts +0 -345
- package/test/unit/data-structures/matrix/vector2d.test.ts +0 -171
|
@@ -33,24 +33,22 @@ describe('Overall BinaryTree Test', () => {
|
|
|
33
33
|
objBST.add([11, { key: 11, keyA: 11 }]);
|
|
34
34
|
objBST.add([3, { key: 3, keyA: 3 }]);
|
|
35
35
|
|
|
36
|
-
objBST.addMany(
|
|
37
|
-
[
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
]
|
|
53
|
-
);
|
|
36
|
+
objBST.addMany([
|
|
37
|
+
[15, { key: 15, keyA: 15 }],
|
|
38
|
+
[1, { key: 1, keyA: 1 }],
|
|
39
|
+
[8, { key: 8, keyA: 8 }],
|
|
40
|
+
[13, { key: 13, keyA: 13 }],
|
|
41
|
+
[16, { key: 16, keyA: 16 }],
|
|
42
|
+
[2, { key: 2, keyA: 2 }],
|
|
43
|
+
[6, { key: 6, keyA: 6 }],
|
|
44
|
+
[9, { key: 9, keyA: 9 }],
|
|
45
|
+
[12, { key: 12, keyA: 12 }],
|
|
46
|
+
[14, { key: 14, keyA: 14 }],
|
|
47
|
+
[4, { key: 4, keyA: 4 }],
|
|
48
|
+
[7, { key: 7, keyA: 7 }],
|
|
49
|
+
[10, { key: 10, keyA: 10 }],
|
|
50
|
+
[5, { key: 5, keyA: 5 }]
|
|
51
|
+
]);
|
|
54
52
|
|
|
55
53
|
objBST.delete(11);
|
|
56
54
|
|
|
@@ -501,9 +501,9 @@ describe('RedBlackTree', () => {
|
|
|
501
501
|
expect(tree.isAVLBalanced()).toBe(true);
|
|
502
502
|
|
|
503
503
|
tree.clear();
|
|
504
|
-
tree.addMany([10, 20, 30, 40, 50, 60])
|
|
504
|
+
tree.addMany([10, 20, 30, 40, 50, 60]);
|
|
505
505
|
expect(tree.isAVLBalanced()).toBe(false);
|
|
506
|
-
})
|
|
506
|
+
});
|
|
507
507
|
});
|
|
508
508
|
|
|
509
509
|
describe('RedBlackTree iterative methods test', () => {
|
|
@@ -537,13 +537,20 @@ describe('RedBlackTree iterative methods test', () => {
|
|
|
537
537
|
test('filter should return a new tree with filtered elements', () => {
|
|
538
538
|
const filteredTree = rbTree.filter((value, key) => key > 1);
|
|
539
539
|
expect(filteredTree.size).toBe(2);
|
|
540
|
-
expect([...filteredTree]).toEqual([
|
|
540
|
+
expect([...filteredTree]).toEqual([
|
|
541
|
+
[2, 'b'],
|
|
542
|
+
[3, 'c']
|
|
543
|
+
]);
|
|
541
544
|
});
|
|
542
545
|
|
|
543
546
|
test('map should return a new tree with modified elements', () => {
|
|
544
547
|
const mappedTree = rbTree.map((value, key) => (key * 2).toString());
|
|
545
548
|
expect(mappedTree.size).toBe(3);
|
|
546
|
-
expect([...mappedTree]).toEqual([
|
|
549
|
+
expect([...mappedTree]).toEqual([
|
|
550
|
+
[1, '2'],
|
|
551
|
+
[2, '4'],
|
|
552
|
+
[3, '6']
|
|
553
|
+
]);
|
|
547
554
|
});
|
|
548
555
|
|
|
549
556
|
test('reduce should accumulate values', () => {
|
|
@@ -558,6 +565,10 @@ describe('RedBlackTree iterative methods test', () => {
|
|
|
558
565
|
}
|
|
559
566
|
|
|
560
567
|
expect(entries.length).toBe(3);
|
|
561
|
-
expect(entries).toEqual([
|
|
568
|
+
expect(entries).toEqual([
|
|
569
|
+
[1, 'a'],
|
|
570
|
+
[2, 'b'],
|
|
571
|
+
[3, 'c']
|
|
572
|
+
]);
|
|
562
573
|
});
|
|
563
|
-
});
|
|
574
|
+
});
|
|
@@ -15,21 +15,30 @@ describe('TreeMultimap count', () => {
|
|
|
15
15
|
let tm: TreeMultimap<number>;
|
|
16
16
|
beforeEach(() => {
|
|
17
17
|
tm = new TreeMultimap<number>();
|
|
18
|
-
|
|
19
|
-
})
|
|
18
|
+
});
|
|
20
19
|
it('Should added isolated node count ', () => {
|
|
21
|
-
tm.addMany([
|
|
20
|
+
tm.addMany([
|
|
21
|
+
[1, 1],
|
|
22
|
+
[2, 2],
|
|
23
|
+
[3, 3],
|
|
24
|
+
[4, 4],
|
|
25
|
+
[5, 5]
|
|
26
|
+
]);
|
|
22
27
|
const newNode = new TreeMultimapNode(3, 33, 10);
|
|
23
28
|
tm.add(newNode);
|
|
24
|
-
expect(tm.count).toBe(15)
|
|
25
|
-
})
|
|
29
|
+
expect(tm.count).toBe(15);
|
|
30
|
+
});
|
|
26
31
|
|
|
27
32
|
it('Should count', () => {
|
|
28
|
-
tm.addMany([
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
+
tm.addMany([
|
|
34
|
+
[1, 1],
|
|
35
|
+
[2, 2],
|
|
36
|
+
[3, 3]
|
|
37
|
+
]);
|
|
38
|
+
tm.lesserOrGreaterTraverse(node => (node.count += 2), CP.gt, 1);
|
|
39
|
+
expect(tm.count).toBe(7);
|
|
40
|
+
});
|
|
41
|
+
});
|
|
33
42
|
|
|
34
43
|
describe('TreeMultimap operations test1', () => {
|
|
35
44
|
it('should perform various operations on a Binary Search Tree with numeric values1', () => {
|
|
@@ -256,7 +265,7 @@ describe('TreeMultimap operations test1', () => {
|
|
|
256
265
|
expect(objTreeMultimap).toBeInstanceOf(TreeMultimap);
|
|
257
266
|
objTreeMultimap.add([11, { key: 11, keyA: 11 }]);
|
|
258
267
|
objTreeMultimap.add([3, { key: 3, keyA: 3 }]);
|
|
259
|
-
const values: [number, { key: number
|
|
268
|
+
const values: [number, { key: number; keyA: number }][] = [
|
|
260
269
|
[15, { key: 15, keyA: 15 }],
|
|
261
270
|
[1, { key: 1, keyA: 1 }],
|
|
262
271
|
[8, { key: 8, keyA: 8 }],
|
|
@@ -273,9 +282,7 @@ describe('TreeMultimap operations test1', () => {
|
|
|
273
282
|
[5, { key: 5, keyA: 5 }]
|
|
274
283
|
];
|
|
275
284
|
|
|
276
|
-
objTreeMultimap.addMany(
|
|
277
|
-
values
|
|
278
|
-
);
|
|
285
|
+
objTreeMultimap.addMany(values);
|
|
279
286
|
|
|
280
287
|
expect(objTreeMultimap.root).toBeInstanceOf(TreeMultimapNode);
|
|
281
288
|
|
|
@@ -529,9 +536,7 @@ describe('TreeMultimap operations test recursively1', () => {
|
|
|
529
536
|
[5, { key: 5, keyA: 5 }]
|
|
530
537
|
];
|
|
531
538
|
|
|
532
|
-
objTreeMultimap.addMany(
|
|
533
|
-
values
|
|
534
|
-
);
|
|
539
|
+
objTreeMultimap.addMany(values);
|
|
535
540
|
|
|
536
541
|
expect(objTreeMultimap.root).toBeInstanceOf(TreeMultimapNode);
|
|
537
542
|
|
|
@@ -632,13 +637,20 @@ describe('TreeMultimap iterative methods test', () => {
|
|
|
632
637
|
test('filter should return a new tree with filtered elements', () => {
|
|
633
638
|
const filteredTree = treeMM.filter((value, key) => key > 1);
|
|
634
639
|
expect(filteredTree.size).toBe(2);
|
|
635
|
-
expect([...filteredTree]).toEqual([
|
|
640
|
+
expect([...filteredTree]).toEqual([
|
|
641
|
+
[2, 'b'],
|
|
642
|
+
[3, 'c']
|
|
643
|
+
]);
|
|
636
644
|
});
|
|
637
645
|
|
|
638
646
|
test('map should return a new tree with modified elements', () => {
|
|
639
647
|
const mappedTree = treeMM.map((value, key) => (key * 2).toString());
|
|
640
648
|
expect(mappedTree.size).toBe(3);
|
|
641
|
-
expect([...mappedTree]).toEqual([
|
|
649
|
+
expect([...mappedTree]).toEqual([
|
|
650
|
+
[1, '2'],
|
|
651
|
+
[2, '4'],
|
|
652
|
+
[3, '6']
|
|
653
|
+
]);
|
|
642
654
|
});
|
|
643
655
|
|
|
644
656
|
test('reduce should accumulate values', () => {
|
|
@@ -653,11 +665,15 @@ describe('TreeMultimap iterative methods test', () => {
|
|
|
653
665
|
}
|
|
654
666
|
|
|
655
667
|
expect(entries.length).toBe(3);
|
|
656
|
-
expect(entries).toEqual([
|
|
668
|
+
expect(entries).toEqual([
|
|
669
|
+
[1, 'a'],
|
|
670
|
+
[2, 'b'],
|
|
671
|
+
[3, 'c']
|
|
672
|
+
]);
|
|
657
673
|
});
|
|
658
674
|
|
|
659
675
|
test('should clone work well', () => {
|
|
660
|
-
expect(treeMM.count).toBe(21)
|
|
676
|
+
expect(treeMM.count).toBe(21);
|
|
661
677
|
const cloned = treeMM.clone();
|
|
662
678
|
expect(cloned.root?.left?.key).toBe(1);
|
|
663
679
|
expect(cloned.root?.right?.value).toBe('c');
|
|
@@ -378,11 +378,61 @@ describe('Inherit from DirectedGraph and perform operations test2.', () => {
|
|
|
378
378
|
|
|
379
379
|
expect(predecessor).toBeInstanceOf(Array);
|
|
380
380
|
expect(predecessor.length).toBe(9);
|
|
381
|
-
expect(predecessor[0]).toEqual([
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
381
|
+
expect(predecessor[0]).toEqual([
|
|
382
|
+
vertex2,
|
|
383
|
+
undefined,
|
|
384
|
+
vertex2,
|
|
385
|
+
undefined,
|
|
386
|
+
vertex3,
|
|
387
|
+
undefined,
|
|
388
|
+
vertex4,
|
|
389
|
+
undefined,
|
|
390
|
+
undefined
|
|
391
|
+
]);
|
|
392
|
+
expect(predecessor[1]).toEqual([
|
|
393
|
+
undefined,
|
|
394
|
+
vertex1,
|
|
395
|
+
undefined,
|
|
396
|
+
vertex1,
|
|
397
|
+
vertex3,
|
|
398
|
+
undefined,
|
|
399
|
+
vertex4,
|
|
400
|
+
undefined,
|
|
401
|
+
vertex1
|
|
402
|
+
]);
|
|
403
|
+
expect(predecessor[5]).toEqual([
|
|
404
|
+
undefined,
|
|
405
|
+
undefined,
|
|
406
|
+
undefined,
|
|
407
|
+
undefined,
|
|
408
|
+
undefined,
|
|
409
|
+
undefined,
|
|
410
|
+
undefined,
|
|
411
|
+
undefined,
|
|
412
|
+
undefined
|
|
413
|
+
]);
|
|
414
|
+
expect(predecessor[7]).toEqual([
|
|
415
|
+
undefined,
|
|
416
|
+
undefined,
|
|
417
|
+
undefined,
|
|
418
|
+
undefined,
|
|
419
|
+
undefined,
|
|
420
|
+
undefined,
|
|
421
|
+
undefined,
|
|
422
|
+
undefined,
|
|
423
|
+
undefined
|
|
424
|
+
]);
|
|
425
|
+
expect(predecessor[8]).toEqual([
|
|
426
|
+
vertex7,
|
|
427
|
+
vertex7,
|
|
428
|
+
vertex7,
|
|
429
|
+
vertex7,
|
|
430
|
+
vertex7,
|
|
431
|
+
undefined,
|
|
432
|
+
undefined,
|
|
433
|
+
undefined,
|
|
434
|
+
vertex7
|
|
435
|
+
]);
|
|
386
436
|
}
|
|
387
437
|
|
|
388
438
|
const dijkstraRes12tt = myGraph.dijkstra(1, 2, true, true);
|
|
@@ -622,7 +672,10 @@ describe('DirectedGraph iterative Methods', () => {
|
|
|
622
672
|
|
|
623
673
|
test('filter should return vertexMap that satisfy the condition', () => {
|
|
624
674
|
const filtered = graph.filter((value, vertex) => vertex === 'A' || vertex === 'B');
|
|
625
|
-
expect(filtered).toEqual([
|
|
675
|
+
expect(filtered).toEqual([
|
|
676
|
+
['A', undefined],
|
|
677
|
+
['B', undefined]
|
|
678
|
+
]);
|
|
626
679
|
});
|
|
627
680
|
|
|
628
681
|
test('map should apply a function to each vertex and return a new array', () => {
|
|
@@ -637,53 +690,53 @@ describe('DirectedGraph iterative Methods', () => {
|
|
|
637
690
|
|
|
638
691
|
test('Removing an edge of a DirectedGraph should delete additional edges', () => {
|
|
639
692
|
const dg = new DirectedGraph();
|
|
640
|
-
dg.addVertex('hello')
|
|
641
|
-
dg.addVertex('hi')
|
|
642
|
-
dg.addVertex('hey')
|
|
643
|
-
dg.addEdge('hello', 'hi')
|
|
644
|
-
dg.addEdge('hello', 'hey')
|
|
645
|
-
expect(dg.getEdge('hello', 'hi')?.src).toBe('hello')
|
|
646
|
-
expect(dg.getEdge('hello', 'hi')?.dest).toBe('hi')
|
|
647
|
-
expect(dg.getEdge('hello', 'hey')?.src).toBe('hello')
|
|
648
|
-
expect(dg.getEdge('hello', 'hey')?.dest).toBe('hey')
|
|
649
|
-
dg.deleteEdge('hello', 'hi')
|
|
650
|
-
expect(dg.getEdge('hello', 'hi')).toBe(undefined)
|
|
651
|
-
expect(dg.getEdge('hello', 'hey')).toBeInstanceOf(DirectedEdge)
|
|
652
|
-
expect(dg.incomingEdgesOf(
|
|
693
|
+
dg.addVertex('hello');
|
|
694
|
+
dg.addVertex('hi');
|
|
695
|
+
dg.addVertex('hey');
|
|
696
|
+
dg.addEdge('hello', 'hi');
|
|
697
|
+
dg.addEdge('hello', 'hey');
|
|
698
|
+
expect(dg.getEdge('hello', 'hi')?.src).toBe('hello');
|
|
699
|
+
expect(dg.getEdge('hello', 'hi')?.dest).toBe('hi');
|
|
700
|
+
expect(dg.getEdge('hello', 'hey')?.src).toBe('hello');
|
|
701
|
+
expect(dg.getEdge('hello', 'hey')?.dest).toBe('hey');
|
|
702
|
+
dg.deleteEdge('hello', 'hi');
|
|
703
|
+
expect(dg.getEdge('hello', 'hi')).toBe(undefined);
|
|
704
|
+
expect(dg.getEdge('hello', 'hey')).toBeInstanceOf(DirectedEdge);
|
|
705
|
+
expect(dg.incomingEdgesOf('Hi')).toEqual([]);
|
|
653
706
|
});
|
|
654
707
|
|
|
655
708
|
test('Removing a vertex of a DirectedGraph should delete additional edges', () => {
|
|
656
709
|
const graph = new DirectedGraph();
|
|
657
710
|
|
|
658
|
-
graph.addVertex(
|
|
659
|
-
graph.addVertex(
|
|
711
|
+
graph.addVertex('Hello');
|
|
712
|
+
graph.addVertex('Hi');
|
|
660
713
|
|
|
661
|
-
graph.addEdge(
|
|
662
|
-
graph.deleteVertex(
|
|
714
|
+
graph.addEdge('Hello', 'Hi');
|
|
715
|
+
graph.deleteVertex('Hello');
|
|
663
716
|
|
|
664
|
-
expect(graph.incomingEdgesOf(
|
|
665
|
-
})
|
|
717
|
+
expect(graph.incomingEdgesOf('Hi')).toEqual([]);
|
|
718
|
+
});
|
|
666
719
|
|
|
667
720
|
test('Removing a vertex from a DirectedGraph should remove its edges', () => {
|
|
668
721
|
const dg = new DirectedGraph();
|
|
669
|
-
dg.addVertex('hello')
|
|
670
|
-
dg.addVertex('world')
|
|
671
|
-
dg.addVertex('earth')
|
|
722
|
+
dg.addVertex('hello');
|
|
723
|
+
dg.addVertex('world');
|
|
724
|
+
dg.addVertex('earth');
|
|
672
725
|
|
|
673
|
-
dg.addEdge('hello', 'world')
|
|
674
|
-
dg.addEdge('hello', 'earth')
|
|
675
|
-
dg.addEdge('world', 'earth')
|
|
726
|
+
dg.addEdge('hello', 'world');
|
|
727
|
+
dg.addEdge('hello', 'earth');
|
|
728
|
+
dg.addEdge('world', 'earth');
|
|
676
729
|
|
|
677
730
|
expect(dg.getEdge('hello', 'world')?.src).toBe('hello');
|
|
678
|
-
expect(dg.edgeSet().length).toBe(3)
|
|
679
|
-
expect(dg.edgeSet()[0].dest).toBe('world')
|
|
731
|
+
expect(dg.edgeSet().length).toBe(3);
|
|
732
|
+
expect(dg.edgeSet()[0].dest).toBe('world');
|
|
680
733
|
|
|
681
|
-
dg.deleteVertex('hello')
|
|
682
|
-
expect(dg.edgeSet().length).toBe(1)
|
|
683
|
-
expect(dg.edgeSet()?.[0].src).toBe('world')
|
|
734
|
+
dg.deleteVertex('hello');
|
|
735
|
+
expect(dg.edgeSet().length).toBe(1);
|
|
736
|
+
expect(dg.edgeSet()?.[0].src).toBe('world');
|
|
684
737
|
|
|
685
738
|
expect(dg.getEdge('hello', 'world')).toBe(undefined);
|
|
686
|
-
})
|
|
739
|
+
});
|
|
687
740
|
});
|
|
688
741
|
|
|
689
742
|
describe('DirectedGraph getCycles', () => {
|
|
@@ -702,8 +755,8 @@ describe('DirectedGraph getCycles', () => {
|
|
|
702
755
|
graph.addEdge('E', 'B');
|
|
703
756
|
const cycles = graph.getCycles();
|
|
704
757
|
expect(cycles.length).toBe(1);
|
|
705
|
-
expect(cycles[0]).toEqual([
|
|
706
|
-
})
|
|
758
|
+
expect(cycles[0]).toEqual(['B', 'D', 'E']);
|
|
759
|
+
});
|
|
707
760
|
|
|
708
761
|
test('should simple cycles graph getCycles return correct result', () => {
|
|
709
762
|
const graph = new DirectedGraph();
|
|
@@ -719,8 +772,11 @@ describe('DirectedGraph getCycles', () => {
|
|
|
719
772
|
graph.addEdge('A', 'D');
|
|
720
773
|
graph.addEdge('D', 'C');
|
|
721
774
|
const cycles = graph.getCycles();
|
|
722
|
-
expect(cycles.length).toBe(2)
|
|
723
|
-
expect(cycles).toEqual([
|
|
775
|
+
expect(cycles.length).toBe(2);
|
|
776
|
+
expect(cycles).toEqual([
|
|
777
|
+
['A', 'B', 'C'],
|
|
778
|
+
['A', 'D', 'C']
|
|
779
|
+
]);
|
|
724
780
|
});
|
|
725
781
|
|
|
726
782
|
test('should 3 cycles graph getCycles return correct result', () => {
|
|
@@ -746,8 +802,11 @@ describe('DirectedGraph getCycles', () => {
|
|
|
746
802
|
graph.addEdge('G', 'A');
|
|
747
803
|
|
|
748
804
|
const cycles = graph.getCycles();
|
|
749
|
-
expect(cycles.length).toBe(3)
|
|
750
|
-
expect(cycles).toEqual([
|
|
805
|
+
expect(cycles.length).toBe(3);
|
|
806
|
+
expect(cycles).toEqual([
|
|
807
|
+
['A', 'C', 'G'],
|
|
808
|
+
['B', 'D', 'E'],
|
|
809
|
+
['B', 'F', 'E']
|
|
810
|
+
]);
|
|
751
811
|
});
|
|
752
|
-
})
|
|
753
|
-
|
|
812
|
+
});
|
|
@@ -176,53 +176,52 @@ describe('UndirectedGraph', () => {
|
|
|
176
176
|
|
|
177
177
|
test('Removing an edge of a UndirectedGraph should not delete additional edges', () => {
|
|
178
178
|
const dg = new UndirectedGraph();
|
|
179
|
-
dg.addVertex('hello')
|
|
180
|
-
dg.addVertex('hi')
|
|
181
|
-
dg.addVertex('hey')
|
|
182
|
-
dg.addEdge('hello', 'hi')
|
|
183
|
-
dg.addEdge('hello', 'hey')
|
|
184
|
-
expect(dg.getEdge('hello', 'hi')?.vertexMap[0]).toBe('hello')
|
|
185
|
-
expect(dg.getEdge('hello', 'hi')?.vertexMap[1]).toBe('hi')
|
|
186
|
-
expect(dg.getEdge('hello', 'hey')?.vertexMap[0]).toBe('hello')
|
|
187
|
-
expect(dg.getEdge('hello', 'hey')?.vertexMap[1]).toBe('hey')
|
|
188
|
-
dg.deleteEdge('hello', 'hi')
|
|
189
|
-
expect(dg.getEdge('hello', 'hi')).toBe(undefined)
|
|
190
|
-
expect(dg.getEdge('hello', 'hey')).toBeInstanceOf(UndirectedEdge)
|
|
179
|
+
dg.addVertex('hello');
|
|
180
|
+
dg.addVertex('hi');
|
|
181
|
+
dg.addVertex('hey');
|
|
182
|
+
dg.addEdge('hello', 'hi');
|
|
183
|
+
dg.addEdge('hello', 'hey');
|
|
184
|
+
expect(dg.getEdge('hello', 'hi')?.vertexMap[0]).toBe('hello');
|
|
185
|
+
expect(dg.getEdge('hello', 'hi')?.vertexMap[1]).toBe('hi');
|
|
186
|
+
expect(dg.getEdge('hello', 'hey')?.vertexMap[0]).toBe('hello');
|
|
187
|
+
expect(dg.getEdge('hello', 'hey')?.vertexMap[1]).toBe('hey');
|
|
188
|
+
dg.deleteEdge('hello', 'hi');
|
|
189
|
+
expect(dg.getEdge('hello', 'hi')).toBe(undefined);
|
|
190
|
+
expect(dg.getEdge('hello', 'hey')).toBeInstanceOf(UndirectedEdge);
|
|
191
191
|
});
|
|
192
192
|
|
|
193
|
-
|
|
194
193
|
test('Removing a vertex of a DirectedGraph should delete additional edges', () => {
|
|
195
194
|
const graph = new UndirectedGraph();
|
|
196
195
|
|
|
197
|
-
graph.addVertex(
|
|
198
|
-
graph.addVertex(
|
|
196
|
+
graph.addVertex('Hello');
|
|
197
|
+
graph.addVertex('Hi');
|
|
199
198
|
|
|
200
|
-
graph.addEdge(
|
|
201
|
-
graph.deleteVertex(
|
|
199
|
+
graph.addEdge('Hello', 'Hi');
|
|
200
|
+
graph.deleteVertex('Hello');
|
|
202
201
|
|
|
203
|
-
expect(graph.edgesOf(
|
|
204
|
-
})
|
|
202
|
+
expect(graph.edgesOf('Hi')).toEqual([]);
|
|
203
|
+
});
|
|
205
204
|
|
|
206
205
|
test('Removing a vertex from a UndirectedGraph should remove its edges', () => {
|
|
207
206
|
const dg = new UndirectedGraph();
|
|
208
|
-
dg.addVertex('hello')
|
|
209
|
-
dg.addVertex('world')
|
|
210
|
-
dg.addVertex('earth')
|
|
207
|
+
dg.addVertex('hello');
|
|
208
|
+
dg.addVertex('world');
|
|
209
|
+
dg.addVertex('earth');
|
|
211
210
|
|
|
212
|
-
dg.addEdge('hello', 'world')
|
|
213
|
-
dg.addEdge('hello', 'earth')
|
|
214
|
-
dg.addEdge('world', 'earth')
|
|
211
|
+
dg.addEdge('hello', 'world');
|
|
212
|
+
dg.addEdge('hello', 'earth');
|
|
213
|
+
dg.addEdge('world', 'earth');
|
|
215
214
|
|
|
216
215
|
expect(dg.getEdge('hello', 'world')?.vertexMap[0]).toBe('hello');
|
|
217
|
-
expect(dg.edgeSet().length).toBe(3)
|
|
218
|
-
expect(dg.edgeSet()[0].vertexMap).toEqual(['hello', 'world'])
|
|
216
|
+
expect(dg.edgeSet().length).toBe(3);
|
|
217
|
+
expect(dg.edgeSet()[0].vertexMap).toEqual(['hello', 'world']);
|
|
219
218
|
|
|
220
|
-
dg.deleteVertex('hello')
|
|
221
|
-
expect(dg.edgeSet().length).toBe(1)
|
|
222
|
-
expect(dg.edgeSet()?.[0].vertexMap[0]).toBe('world')
|
|
219
|
+
dg.deleteVertex('hello');
|
|
220
|
+
expect(dg.edgeSet().length).toBe(1);
|
|
221
|
+
expect(dg.edgeSet()?.[0].vertexMap[0]).toBe('world');
|
|
223
222
|
|
|
224
223
|
expect(dg.getEdge('hello', 'world')).toBe(undefined);
|
|
225
|
-
})
|
|
224
|
+
});
|
|
226
225
|
});
|
|
227
226
|
|
|
228
227
|
describe('cycles, strongly connected components, bridges, articular points in UndirectedGraph', () => {
|
|
@@ -258,8 +257,7 @@ describe('cycles, strongly connected components, bridges, articular points in Un
|
|
|
258
257
|
expect(lowMap.size).toBe(8);
|
|
259
258
|
});
|
|
260
259
|
|
|
261
|
-
it(
|
|
262
|
-
|
|
260
|
+
it('Should return Infinity if dest is not found', () => {
|
|
263
261
|
const graph = new UndirectedGraph<string>();
|
|
264
262
|
|
|
265
263
|
for (let i = 0; i < 3; ++i) {
|
|
@@ -291,8 +289,12 @@ describe('UndirectedGraph getCycles', () => {
|
|
|
291
289
|
graph.addEdge('E', 'B');
|
|
292
290
|
const cycles = graph.getCycles();
|
|
293
291
|
expect(cycles.length).toBe(3);
|
|
294
|
-
expect(cycles).toEqual([
|
|
295
|
-
|
|
292
|
+
expect(cycles).toEqual([
|
|
293
|
+
['A', 'B', 'D', 'C'],
|
|
294
|
+
['A', 'B', 'E', 'D', 'C'],
|
|
295
|
+
['B', 'D', 'E']
|
|
296
|
+
]);
|
|
297
|
+
});
|
|
296
298
|
|
|
297
299
|
test('should simple cycles graph getCycles return correct result', () => {
|
|
298
300
|
const graph = new UndirectedGraph();
|
|
@@ -308,8 +310,12 @@ describe('UndirectedGraph getCycles', () => {
|
|
|
308
310
|
graph.addEdge('A', 'D');
|
|
309
311
|
graph.addEdge('D', 'C');
|
|
310
312
|
const cycles = graph.getCycles();
|
|
311
|
-
expect(cycles.length).toBe(3)
|
|
312
|
-
expect(cycles).toEqual([
|
|
313
|
+
expect(cycles.length).toBe(3);
|
|
314
|
+
expect(cycles).toEqual([
|
|
315
|
+
['A', 'B', 'C'],
|
|
316
|
+
['A', 'B', 'C', 'D'],
|
|
317
|
+
['A', 'C', 'D']
|
|
318
|
+
]);
|
|
313
319
|
});
|
|
314
320
|
|
|
315
321
|
test('should 3 cycles graph getCycles return correct result', () => {
|
|
@@ -335,7 +341,18 @@ describe('UndirectedGraph getCycles', () => {
|
|
|
335
341
|
graph.addEdge('G', 'A');
|
|
336
342
|
|
|
337
343
|
const cycles = graph.getCycles();
|
|
338
|
-
expect(cycles.length).toBe(10)
|
|
339
|
-
expect(cycles).toEqual([
|
|
344
|
+
expect(cycles.length).toBe(10);
|
|
345
|
+
expect(cycles).toEqual([
|
|
346
|
+
['A', 'B', 'D', 'C'],
|
|
347
|
+
['A', 'B', 'D', 'C', 'G'],
|
|
348
|
+
['A', 'B', 'E', 'D', 'C'],
|
|
349
|
+
['A', 'B', 'E', 'D', 'C', 'G'],
|
|
350
|
+
['A', 'B', 'F', 'E', 'D', 'C'],
|
|
351
|
+
['A', 'B', 'F', 'E', 'D', 'C', 'G'],
|
|
352
|
+
['A', 'C', 'G'],
|
|
353
|
+
['B', 'D', 'E'],
|
|
354
|
+
['B', 'D', 'E', 'F'],
|
|
355
|
+
['B', 'E', 'F']
|
|
356
|
+
]);
|
|
340
357
|
});
|
|
341
|
-
})
|
|
358
|
+
});
|