data-structure-typed 1.48.4 → 1.48.6
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 +109 -59
- package/README_zh-CN.md +1028 -0
- package/benchmark/report.html +16 -16
- package/benchmark/report.json +204 -174
- package/dist/cjs/data-structures/base/iterable-base.d.ts +6 -6
- package/dist/cjs/data-structures/base/iterable-base.js +3 -3
- package/dist/cjs/data-structures/base/iterable-base.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/avl-tree.d.ts +5 -3
- package/dist/cjs/data-structures/binary-tree/avl-tree.js +6 -4
- package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +24 -22
- package/dist/cjs/data-structures/binary-tree/binary-tree.js +35 -22
- package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/bst.d.ts +30 -22
- package/dist/cjs/data-structures/binary-tree/bst.js +38 -26
- package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/rb-tree.d.ts +19 -13
- package/dist/cjs/data-structures/binary-tree/rb-tree.js +20 -14
- package/dist/cjs/data-structures/binary-tree/rb-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/tree-multimap.d.ts +21 -14
- package/dist/cjs/data-structures/binary-tree/tree-multimap.js +25 -18
- package/dist/cjs/data-structures/binary-tree/tree-multimap.js.map +1 -1
- package/dist/cjs/data-structures/graph/abstract-graph.d.ts +52 -52
- package/dist/cjs/data-structures/graph/abstract-graph.js +78 -78
- package/dist/cjs/data-structures/graph/abstract-graph.js.map +1 -1
- package/dist/cjs/data-structures/graph/directed-graph.d.ts +47 -47
- package/dist/cjs/data-structures/graph/directed-graph.js +56 -56
- package/dist/cjs/data-structures/graph/directed-graph.js.map +1 -1
- package/dist/cjs/data-structures/graph/map-graph.d.ts +5 -5
- package/dist/cjs/data-structures/graph/map-graph.js +8 -8
- package/dist/cjs/data-structures/graph/map-graph.js.map +1 -1
- package/dist/cjs/data-structures/graph/undirected-graph.d.ts +29 -29
- package/dist/cjs/data-structures/graph/undirected-graph.js +57 -57
- package/dist/cjs/data-structures/graph/undirected-graph.js.map +1 -1
- package/dist/cjs/data-structures/hash/hash-map.d.ts +8 -8
- 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/interfaces/binary-tree.d.ts +2 -2
- package/dist/cjs/types/data-structures/base/base.d.ts +3 -3
- package/dist/mjs/data-structures/base/iterable-base.d.ts +6 -6
- package/dist/mjs/data-structures/base/iterable-base.js +1 -1
- package/dist/mjs/data-structures/binary-tree/avl-tree.d.ts +5 -3
- package/dist/mjs/data-structures/binary-tree/avl-tree.js +6 -4
- package/dist/mjs/data-structures/binary-tree/binary-tree.d.ts +24 -22
- package/dist/mjs/data-structures/binary-tree/binary-tree.js +36 -23
- package/dist/mjs/data-structures/binary-tree/bst.d.ts +30 -22
- package/dist/mjs/data-structures/binary-tree/bst.js +38 -26
- package/dist/mjs/data-structures/binary-tree/rb-tree.d.ts +19 -13
- package/dist/mjs/data-structures/binary-tree/rb-tree.js +20 -14
- package/dist/mjs/data-structures/binary-tree/tree-multimap.d.ts +21 -14
- package/dist/mjs/data-structures/binary-tree/tree-multimap.js +25 -18
- package/dist/mjs/data-structures/graph/abstract-graph.d.ts +52 -52
- package/dist/mjs/data-structures/graph/abstract-graph.js +79 -79
- package/dist/mjs/data-structures/graph/directed-graph.d.ts +47 -47
- package/dist/mjs/data-structures/graph/directed-graph.js +56 -56
- package/dist/mjs/data-structures/graph/map-graph.d.ts +5 -5
- package/dist/mjs/data-structures/graph/map-graph.js +8 -8
- package/dist/mjs/data-structures/graph/undirected-graph.d.ts +29 -29
- package/dist/mjs/data-structures/graph/undirected-graph.js +59 -59
- package/dist/mjs/data-structures/hash/hash-map.d.ts +8 -8
- package/dist/mjs/data-structures/hash/hash-map.js +3 -3
- package/dist/mjs/interfaces/binary-tree.d.ts +2 -2
- package/dist/mjs/types/data-structures/base/base.d.ts +3 -3
- package/dist/umd/data-structure-typed.js +336 -295
- package/dist/umd/data-structure-typed.min.js +2 -2
- package/dist/umd/data-structure-typed.min.js.map +1 -1
- package/package.json +2 -2
- package/src/data-structures/base/iterable-base.ts +6 -6
- package/src/data-structures/binary-tree/avl-tree.ts +7 -4
- package/src/data-structures/binary-tree/binary-tree.ts +47 -27
- package/src/data-structures/binary-tree/bst.ts +52 -32
- package/src/data-structures/binary-tree/rb-tree.ts +20 -14
- package/src/data-structures/binary-tree/tree-multimap.ts +26 -18
- package/src/data-structures/graph/abstract-graph.ts +82 -82
- package/src/data-structures/graph/directed-graph.ts +56 -56
- package/src/data-structures/graph/map-graph.ts +8 -8
- package/src/data-structures/graph/undirected-graph.ts +59 -59
- package/src/data-structures/hash/hash-map.ts +8 -8
- package/src/interfaces/binary-tree.ts +2 -2
- package/src/types/data-structures/base/base.ts +3 -3
- package/test/integration/bst.test.ts +1 -1
- package/test/performance/data-structures/binary-tree/rb-tree.test.ts +1 -1
- package/test/performance/data-structures/hash/hash-map.test.ts +8 -8
- package/test/performance/data-structures/linked-list/doubly-linked-list.test.ts +2 -2
- package/test/performance/data-structures/linked-list/singly-linked-list.test.ts +12 -1
- package/test/performance/data-structures/priority-queue/priority-queue.test.ts +1 -1
- package/test/performance/data-structures/queue/deque.test.ts +27 -15
- package/test/performance/data-structures/queue/queue.test.ts +27 -4
- package/test/performance/data-structures/stack/stack.test.ts +2 -2
- package/test/unit/data-structures/binary-tree/binary-tree.test.ts +1 -1
- package/test/unit/data-structures/binary-tree/bst.test.ts +29 -29
- package/test/unit/data-structures/binary-tree/overall.test.ts +1 -1
- package/test/unit/data-structures/binary-tree/tree-multimap.test.ts +3 -3
- package/test/unit/data-structures/graph/directed-graph.test.ts +15 -15
- package/test/unit/data-structures/graph/map-graph.test.ts +3 -3
- package/test/unit/data-structures/graph/undirected-graph.test.ts +12 -12
|
@@ -5,7 +5,7 @@ import { magnitude } from '../../../utils';
|
|
|
5
5
|
import { isCompetitor } from '../../../config';
|
|
6
6
|
|
|
7
7
|
const suite = new Benchmark.Suite();
|
|
8
|
-
const { LINEAR } = magnitude;
|
|
8
|
+
const { LINEAR, HUNDRED_THOUSAND } = magnitude;
|
|
9
9
|
|
|
10
10
|
suite.add(`${LINEAR.toLocaleString()} push`, () => {
|
|
11
11
|
const queue = new Queue<number>();
|
|
@@ -15,7 +15,7 @@ suite.add(`${LINEAR.toLocaleString()} push`, () => {
|
|
|
15
15
|
}
|
|
16
16
|
});
|
|
17
17
|
if (isCompetitor) {
|
|
18
|
-
suite.add(
|
|
18
|
+
suite.add(`CPT ${LINEAR.toLocaleString()} push`, () => {
|
|
19
19
|
const queue = new CQueue<number>();
|
|
20
20
|
|
|
21
21
|
for (let i = 0; i < LINEAR; i++) {
|
|
@@ -23,13 +23,36 @@ if (isCompetitor) {
|
|
|
23
23
|
}
|
|
24
24
|
});
|
|
25
25
|
}
|
|
26
|
-
suite.add(`${
|
|
26
|
+
suite.add(`${HUNDRED_THOUSAND.toLocaleString()} push & shift`, () => {
|
|
27
27
|
const queue = new Queue<number>();
|
|
28
28
|
|
|
29
|
-
for (let i = 0; i <
|
|
29
|
+
for (let i = 0; i < HUNDRED_THOUSAND; i++) {
|
|
30
30
|
queue.push(i);
|
|
31
|
+
}
|
|
32
|
+
for (let i = 0; i < HUNDRED_THOUSAND; i++) {
|
|
31
33
|
queue.shift();
|
|
32
34
|
}
|
|
33
35
|
});
|
|
36
|
+
suite.add(`Native Array ${HUNDRED_THOUSAND.toLocaleString()} push & shift`, () => {
|
|
37
|
+
const arr = new Array<number>();
|
|
38
|
+
|
|
39
|
+
for (let i = 0; i < HUNDRED_THOUSAND; i++) {
|
|
40
|
+
arr.push(i);
|
|
41
|
+
}
|
|
42
|
+
for (let i = 0; i < HUNDRED_THOUSAND; i++) {
|
|
43
|
+
arr.shift();
|
|
44
|
+
}
|
|
45
|
+
})
|
|
46
|
+
.add(`Native Array ${HUNDRED_THOUSAND.toLocaleString()} push & pop`, () => {
|
|
47
|
+
const arr = new Array<number>();
|
|
48
|
+
|
|
49
|
+
for (let i = 0; i < HUNDRED_THOUSAND; i++) {
|
|
50
|
+
arr.push(i);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
for (let i = 0; i < HUNDRED_THOUSAND; i++) {
|
|
54
|
+
arr.pop();
|
|
55
|
+
}
|
|
56
|
+
});
|
|
34
57
|
|
|
35
58
|
export { suite };
|
|
@@ -15,7 +15,7 @@ suite.add(`${LINEAR.toLocaleString()} push`, () => {
|
|
|
15
15
|
}
|
|
16
16
|
});
|
|
17
17
|
if (isCompetitor) {
|
|
18
|
-
suite.add(
|
|
18
|
+
suite.add(`CPT ${LINEAR.toLocaleString()} push`, () => {
|
|
19
19
|
const queue = new CStack<number>();
|
|
20
20
|
|
|
21
21
|
for (let i = 0; i < LINEAR; i++) {
|
|
@@ -34,7 +34,7 @@ suite.add(`${LINEAR.toLocaleString()} push & pop`, () => {
|
|
|
34
34
|
}
|
|
35
35
|
});
|
|
36
36
|
if (isCompetitor) {
|
|
37
|
-
suite.add(
|
|
37
|
+
suite.add(`CPT ${LINEAR.toLocaleString()} push & pop`, () => {
|
|
38
38
|
const queue = new CStack<number>();
|
|
39
39
|
|
|
40
40
|
for (let i = 0; i < LINEAR; i++) {
|
|
@@ -10,7 +10,7 @@ describe('BST operations test', () => {
|
|
|
10
10
|
bst.add([11, 11]);
|
|
11
11
|
bst.add([3, 3]);
|
|
12
12
|
const idsAndValues: [number, number][] = [[15, 15], [1, 1], [8, 8], [13, 13], [16, 16], [2, 2], [6, 6], [9, 9], [12, 12], [14, 14], [4, 4], [7, 7], [10, 10], [5, 5]];
|
|
13
|
-
bst.addMany(idsAndValues, false);
|
|
13
|
+
bst.addMany(idsAndValues, undefined, false);
|
|
14
14
|
expect(bst.root).toBeInstanceOf(BSTNode);
|
|
15
15
|
|
|
16
16
|
if (bst.root) expect(bst.root.key).toBe(11);
|
|
@@ -189,28 +189,27 @@ describe('BST operations test', () => {
|
|
|
189
189
|
});
|
|
190
190
|
|
|
191
191
|
it('should perform various operations on a Binary Search Tree with object values', () => {
|
|
192
|
-
const objBST = new BST<number, {
|
|
192
|
+
const objBST = new BST<number, { name: string; age: number }>();
|
|
193
193
|
expect(objBST).toBeInstanceOf(BST);
|
|
194
|
-
objBST.add([11, {
|
|
195
|
-
objBST.add([3, {
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
objBST.addMany(values, false);
|
|
194
|
+
objBST.add([11, { name: '11', age: 11 }]);
|
|
195
|
+
objBST.add([3, { name: '3', age: 3 }]);
|
|
196
|
+
|
|
197
|
+
objBST.addMany([15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5], [
|
|
198
|
+
{ "name": "Alice", "age": 15 },
|
|
199
|
+
{ "name": "Bob", "age": 1 },
|
|
200
|
+
{ "name": "Charlie", "age": 8 },
|
|
201
|
+
{ "name": "David", "age": 13 },
|
|
202
|
+
{ "name": "Emma", "age": 16 },
|
|
203
|
+
{ "name": "Frank", "age": 2 },
|
|
204
|
+
{ "name": "Grace", "age": 6 },
|
|
205
|
+
{ "name": "Hannah", "age": 9 },
|
|
206
|
+
{ "name": "Isaac", "age": 12 },
|
|
207
|
+
{ "name": "Jack", "age": 14 },
|
|
208
|
+
{ "name": "Katie", "age": 4 },
|
|
209
|
+
{ "name": "Liam", "age": 7 },
|
|
210
|
+
{ "name": "Mia", "age": 10 },
|
|
211
|
+
{ "name": "Noah", "age": 5 }
|
|
212
|
+
], false);
|
|
214
213
|
|
|
215
214
|
expect(objBST.root).toBeInstanceOf(BSTNode);
|
|
216
215
|
|
|
@@ -232,7 +231,7 @@ describe('BST operations test', () => {
|
|
|
232
231
|
expect(leftMost?.key).toBe(1);
|
|
233
232
|
|
|
234
233
|
const node15 = objBST.getNode(15);
|
|
235
|
-
expect(node15?.value).toEqual({
|
|
234
|
+
expect(node15?.value).toEqual({ name: 'Alice', age: 15 });
|
|
236
235
|
const minNodeBySpecificNode = node15 && objBST.getLeftMost(node15);
|
|
237
236
|
expect(minNodeBySpecificNode?.key).toBe(12);
|
|
238
237
|
|
|
@@ -256,7 +255,7 @@ describe('BST operations test', () => {
|
|
|
256
255
|
objBST.perfectlyBalance();
|
|
257
256
|
expect(objBST.isPerfectlyBalanced()).toBe(true);
|
|
258
257
|
|
|
259
|
-
const bfsNodesAfterBalanced: BSTNode<number, {
|
|
258
|
+
const bfsNodesAfterBalanced: BSTNode<number, { name: string; age: number }>[] = [];
|
|
260
259
|
objBST.bfs(node => bfsNodesAfterBalanced.push(node));
|
|
261
260
|
expect(bfsNodesAfterBalanced[0].key).toBe(8);
|
|
262
261
|
expect(bfsNodesAfterBalanced[bfsNodesAfterBalanced.length - 1].key).toBe(16);
|
|
@@ -381,7 +380,7 @@ describe('BST operations test', () => {
|
|
|
381
380
|
expect(bfsIDs[1]).toBe(12);
|
|
382
381
|
expect(bfsIDs[2]).toBe(16);
|
|
383
382
|
|
|
384
|
-
const bfsNodes: BSTNode<number, {
|
|
383
|
+
const bfsNodes: BSTNode<number, { name: string; age: number }>[] = [];
|
|
385
384
|
objBST.bfs(node => bfsNodes.push(node));
|
|
386
385
|
expect(bfsNodes[0].key).toBe(2);
|
|
387
386
|
expect(bfsNodes[1].key).toBe(12);
|
|
@@ -396,7 +395,7 @@ describe('BST operations test recursively', () => {
|
|
|
396
395
|
bst.add([11, 11]);
|
|
397
396
|
bst.add([3, 3]);
|
|
398
397
|
const idsAndValues = [15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5];
|
|
399
|
-
bst.addMany(idsAndValues, false);
|
|
398
|
+
bst.addMany(idsAndValues, undefined, false);
|
|
400
399
|
expect(bst.root).toBeInstanceOf(BSTNode);
|
|
401
400
|
|
|
402
401
|
if (bst.root) expect(bst.root.key).toBe(11);
|
|
@@ -580,7 +579,7 @@ describe('BST operations test recursively', () => {
|
|
|
580
579
|
expect(objBST).toBeInstanceOf(BST);
|
|
581
580
|
objBST.add([11, { key: 11, keyA: 11 }]);
|
|
582
581
|
objBST.add([3, { key: 3, keyA: 3 }]);
|
|
583
|
-
const
|
|
582
|
+
const entries: [number, { key: number; keyA: number }][] = [
|
|
584
583
|
[15, { key: 15, keyA: 15 }],
|
|
585
584
|
[1, { key: 1, keyA: 1 }],
|
|
586
585
|
[8, { key: 8, keyA: 8 }],
|
|
@@ -598,7 +597,8 @@ describe('BST operations test recursively', () => {
|
|
|
598
597
|
];
|
|
599
598
|
|
|
600
599
|
objBST.addMany(
|
|
601
|
-
|
|
600
|
+
entries,
|
|
601
|
+
undefined,
|
|
602
602
|
false
|
|
603
603
|
);
|
|
604
604
|
|
|
@@ -829,7 +829,7 @@ describe('BST Performance test', function () {
|
|
|
829
829
|
|
|
830
830
|
it('should the lastKey of a BST to be the largest key', function () {
|
|
831
831
|
const bst = new BST();
|
|
832
|
-
bst.addMany([9, 8, 7, 3, 1, 2, 5, 4, 6], false);
|
|
832
|
+
bst.addMany([9, 8, 7, 3, 1, 2, 5, 4, 6], undefined, false);
|
|
833
833
|
// TODO
|
|
834
834
|
// expect(bst.lastKey()).toBe(9);
|
|
835
835
|
});
|
|
@@ -5,7 +5,7 @@ describe('Overall BinaryTree Test', () => {
|
|
|
5
5
|
const bst = new BST();
|
|
6
6
|
bst.add(11);
|
|
7
7
|
bst.add(3);
|
|
8
|
-
bst.addMany([15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5], false);
|
|
8
|
+
bst.addMany([15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5], undefined, false);
|
|
9
9
|
bst.size === 16; // true
|
|
10
10
|
expect(bst.size).toBe(16); // true
|
|
11
11
|
bst.has(6); // true
|
|
@@ -605,9 +605,9 @@ describe('TreeMultimap iterative methods test', () => {
|
|
|
605
605
|
let treeMM: TreeMultimap<number, string>;
|
|
606
606
|
beforeEach(() => {
|
|
607
607
|
treeMM = new TreeMultimap<number, string>();
|
|
608
|
-
treeMM.add(
|
|
609
|
-
treeMM.add([2, 'b'], 10);
|
|
610
|
-
treeMM.add([3, 'c'], 1);
|
|
608
|
+
treeMM.add(1, 'a', 10);
|
|
609
|
+
treeMM.add([2, 'b'], undefined, 10);
|
|
610
|
+
treeMM.add([3, 'c'], undefined, 1);
|
|
611
611
|
});
|
|
612
612
|
|
|
613
613
|
test('The node obtained by get Node should match the node type', () => {
|
|
@@ -7,7 +7,7 @@ describe('DirectedGraph Operation Test', () => {
|
|
|
7
7
|
graph = new DirectedGraph();
|
|
8
8
|
});
|
|
9
9
|
|
|
10
|
-
it('should add
|
|
10
|
+
it('should add vertexMap', () => {
|
|
11
11
|
const vertex1 = new DirectedVertex('A');
|
|
12
12
|
const vertex2 = new DirectedVertex('B');
|
|
13
13
|
|
|
@@ -155,7 +155,7 @@ describe('Inherit from DirectedGraph and perform operations', () => {
|
|
|
155
155
|
myGraph = new MyDirectedGraph();
|
|
156
156
|
});
|
|
157
157
|
|
|
158
|
-
it('Add
|
|
158
|
+
it('Add vertexMap', () => {
|
|
159
159
|
myGraph.addVertex(1, 'data1');
|
|
160
160
|
myGraph.addVertex(2, 'data2');
|
|
161
161
|
myGraph.addVertex(3, 'data3');
|
|
@@ -204,7 +204,7 @@ describe('Inherit from DirectedGraph and perform operations', () => {
|
|
|
204
204
|
expect(true).toBeTruthy();
|
|
205
205
|
});
|
|
206
206
|
|
|
207
|
-
it('Remove edge between
|
|
207
|
+
it('Remove edge between vertexMap', () => {
|
|
208
208
|
myGraph.addVertex(1, 'data1');
|
|
209
209
|
myGraph.addVertex(2, 'data2');
|
|
210
210
|
myGraph.addEdge(1, 2, 10, 'edge-data1-2');
|
|
@@ -232,14 +232,14 @@ describe('Inherit from DirectedGraph and perform operations', () => {
|
|
|
232
232
|
}
|
|
233
233
|
});
|
|
234
234
|
|
|
235
|
-
it('Minimum path between
|
|
235
|
+
it('Minimum path between vertexMap', () => {
|
|
236
236
|
myGraph.addVertex(new MyVertex(1, 'data1'));
|
|
237
237
|
myGraph.addVertex(new MyVertex(2, 'data2'));
|
|
238
238
|
myGraph.addEdge(new MyEdge(1, 2, 10, 'edge-data1-2'));
|
|
239
239
|
});
|
|
240
240
|
|
|
241
|
-
it('All paths between
|
|
242
|
-
// Add
|
|
241
|
+
it('All paths between vertexMap', () => {
|
|
242
|
+
// Add vertexMap and edges as needed for this test
|
|
243
243
|
myGraph.addVertex(new MyVertex(1, 'data1'));
|
|
244
244
|
myGraph.addVertex(new MyVertex(2, 'data2'));
|
|
245
245
|
myGraph.addEdge(new MyEdge(1, 2, 10, 'edge-data1-2'));
|
|
@@ -598,41 +598,41 @@ describe('cycles, strongly connected components, bridges, articular points in Di
|
|
|
598
598
|
|
|
599
599
|
describe('DirectedGraph iterative Methods', () => {
|
|
600
600
|
let graph: DirectedGraph<string>;
|
|
601
|
-
let
|
|
601
|
+
let vertexMap: string[];
|
|
602
602
|
|
|
603
603
|
beforeEach(() => {
|
|
604
604
|
graph = new DirectedGraph();
|
|
605
|
-
|
|
606
|
-
|
|
605
|
+
vertexMap = ['A', 'B', 'C', 'D'];
|
|
606
|
+
vertexMap.forEach(vertex => graph.addVertex(vertex));
|
|
607
607
|
});
|
|
608
608
|
|
|
609
|
-
test('[Symbol.iterator] should iterate over all
|
|
609
|
+
test('[Symbol.iterator] should iterate over all vertexMap', () => {
|
|
610
610
|
const iteratedVertices = [];
|
|
611
611
|
for (const vertex of graph) {
|
|
612
612
|
iteratedVertices.push(vertex[0]);
|
|
613
613
|
}
|
|
614
|
-
expect(iteratedVertices).toEqual(
|
|
614
|
+
expect(iteratedVertices).toEqual(vertexMap);
|
|
615
615
|
});
|
|
616
616
|
|
|
617
617
|
test('forEach should apply a function to each vertex', () => {
|
|
618
618
|
const result: VertexKey[] = [];
|
|
619
619
|
graph.forEach((value, key) => key && result.push(key));
|
|
620
|
-
expect(result).toEqual(
|
|
620
|
+
expect(result).toEqual(vertexMap);
|
|
621
621
|
});
|
|
622
622
|
|
|
623
|
-
test('filter should return
|
|
623
|
+
test('filter should return vertexMap that satisfy the condition', () => {
|
|
624
624
|
const filtered = graph.filter((value, vertex) => vertex === 'A' || vertex === 'B');
|
|
625
625
|
expect(filtered).toEqual([["A", undefined], ["B", undefined]]);
|
|
626
626
|
});
|
|
627
627
|
|
|
628
628
|
test('map should apply a function to each vertex and return a new array', () => {
|
|
629
629
|
const mapped = graph.map((value, vertex) => vertex + '_mapped');
|
|
630
|
-
expect(mapped).toEqual(
|
|
630
|
+
expect(mapped).toEqual(vertexMap.map(v => v + '_mapped'));
|
|
631
631
|
});
|
|
632
632
|
|
|
633
633
|
test('reduce should accumulate a value based on each vertex', () => {
|
|
634
634
|
const concatenated = graph.reduce((acc, value, key) => acc + key, '');
|
|
635
|
-
expect(concatenated).toBe(
|
|
635
|
+
expect(concatenated).toBe(vertexMap.join(''));
|
|
636
636
|
});
|
|
637
637
|
|
|
638
638
|
test('Removing an edge of a DirectedGraph should not delete additional edges', () => {
|
|
@@ -52,8 +52,8 @@ describe('MapGraph', () => {
|
|
|
52
52
|
mapGraph = new MapGraph<string, string>([0, 0], [100, 100]);
|
|
53
53
|
});
|
|
54
54
|
|
|
55
|
-
// Test adding
|
|
56
|
-
it('should add
|
|
55
|
+
// Test adding vertexMap to the graph
|
|
56
|
+
it('should add vertexMap to the graph', () => {
|
|
57
57
|
const locationA = new MapVertex('A', 'Location A', 10, 20);
|
|
58
58
|
const locationB = new MapVertex('B', 'Location B', 30, 40);
|
|
59
59
|
|
|
@@ -88,7 +88,7 @@ describe('MapGraph', () => {
|
|
|
88
88
|
const edgeAB = new MapEdge('A', 'B', 50, 'Edge from A to B');
|
|
89
89
|
const edgeBC = new MapEdge('B', 'C', 60, 'Edge from B to C');
|
|
90
90
|
|
|
91
|
-
expect(mapGraph.
|
|
91
|
+
expect(mapGraph.originCoord).toEqual([0, 0]);
|
|
92
92
|
expect(mapGraph.bottomRight).toEqual([100, 100]);
|
|
93
93
|
|
|
94
94
|
mapGraph.addVertex(locationA);
|
|
@@ -17,7 +17,7 @@ describe('UndirectedGraph Operation Test', () => {
|
|
|
17
17
|
expect(graph.getEndsOfEdge(new UndirectedEdge('c', 'd'))).toBe(undefined);
|
|
18
18
|
});
|
|
19
19
|
|
|
20
|
-
it('should add
|
|
20
|
+
it('should add vertexMap', () => {
|
|
21
21
|
const vertex1 = new UndirectedVertex('A');
|
|
22
22
|
const vertex2 = new UndirectedVertex('B');
|
|
23
23
|
|
|
@@ -76,8 +76,8 @@ describe('UndirectedGraph', () => {
|
|
|
76
76
|
undirectedGraph = new UndirectedGraph<string, string>();
|
|
77
77
|
});
|
|
78
78
|
|
|
79
|
-
// Test adding
|
|
80
|
-
it('should add
|
|
79
|
+
// Test adding vertexMap to the graph
|
|
80
|
+
it('should add vertexMap to the graph', () => {
|
|
81
81
|
const vertexA = new UndirectedVertex('A', 'Location A');
|
|
82
82
|
const vertexB = new UndirectedVertex('B', 'Location B');
|
|
83
83
|
|
|
@@ -130,8 +130,8 @@ describe('UndirectedGraph', () => {
|
|
|
130
130
|
const edgeAB = new UndirectedEdge('A', 'B', 3, 'Edge between A and B');
|
|
131
131
|
const edgeBC = new UndirectedEdge('B', 'C', 4, 'Edge between B and C');
|
|
132
132
|
|
|
133
|
-
edgeAB.
|
|
134
|
-
expect(undirectedGraph.
|
|
133
|
+
edgeAB.vertexMap = edgeAB.vertexMap;
|
|
134
|
+
expect(undirectedGraph.edgeMap.size).toBe(0);
|
|
135
135
|
undirectedGraph.addVertex(vertexA);
|
|
136
136
|
undirectedGraph.addVertex(vertexB);
|
|
137
137
|
undirectedGraph.addVertex(vertexC);
|
|
@@ -181,10 +181,10 @@ describe('UndirectedGraph', () => {
|
|
|
181
181
|
dg.addVertex('hey')
|
|
182
182
|
dg.addEdge('hello', 'hi')
|
|
183
183
|
dg.addEdge('hello', 'hey')
|
|
184
|
-
expect(dg.getEdge('hello', 'hi')?.
|
|
185
|
-
expect(dg.getEdge('hello', 'hi')?.
|
|
186
|
-
expect(dg.getEdge('hello', 'hey')?.
|
|
187
|
-
expect(dg.getEdge('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
188
|
dg.deleteEdge('hello', 'hi')
|
|
189
189
|
expect(dg.getEdge('hello', 'hi')).toBe(undefined)
|
|
190
190
|
expect(dg.getEdge('hello', 'hey')).toBeInstanceOf(UndirectedEdge)
|
|
@@ -200,13 +200,13 @@ describe('UndirectedGraph', () => {
|
|
|
200
200
|
dg.addEdge('hello', 'earth')
|
|
201
201
|
dg.addEdge('world', 'earth')
|
|
202
202
|
|
|
203
|
-
expect(dg.getEdge('hello', 'world')?.
|
|
203
|
+
expect(dg.getEdge('hello', 'world')?.vertexMap[0]).toBe('hello');
|
|
204
204
|
expect(dg.edgeSet().length).toBe(3)
|
|
205
|
-
expect(dg.edgeSet()[0].
|
|
205
|
+
expect(dg.edgeSet()[0].vertexMap).toEqual(['hello', 'world'])
|
|
206
206
|
|
|
207
207
|
dg.deleteVertex('hello')
|
|
208
208
|
expect(dg.edgeSet().length).toBe(1)
|
|
209
|
-
expect(dg.edgeSet()?.[0].
|
|
209
|
+
expect(dg.edgeSet()?.[0].vertexMap[0]).toBe('world')
|
|
210
210
|
|
|
211
211
|
expect(dg.getEdge('hello', 'world')).toBe(undefined);
|
|
212
212
|
})
|