data-structure-typed 1.33.8 → 1.33.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/package.json +1 -1
  3. package/.prettierrc.js +0 -16
  4. package/coverage/coverage-final.json +0 -68
  5. package/coverage/coverage-summary.json +0 -69
  6. package/docs/.nojekyll +0 -1
  7. package/docs/index.html +0 -877
  8. package/docs/modules.html +0 -336
  9. package/jest.config.js +0 -8
  10. package/src/data-structures/binary-tree/aa-tree.ts +0 -1
  11. package/src/data-structures/binary-tree/abstract-binary-tree.ts +0 -1608
  12. package/src/data-structures/binary-tree/avl-tree.ts +0 -307
  13. package/src/data-structures/binary-tree/b-tree.ts +0 -1
  14. package/src/data-structures/binary-tree/binary-indexed-tree.ts +0 -76
  15. package/src/data-structures/binary-tree/binary-tree.ts +0 -47
  16. package/src/data-structures/binary-tree/bst.ts +0 -537
  17. package/src/data-structures/binary-tree/index.ts +0 -12
  18. package/src/data-structures/binary-tree/rb-tree.ts +0 -366
  19. package/src/data-structures/binary-tree/segment-tree.ts +0 -260
  20. package/src/data-structures/binary-tree/splay-tree.ts +0 -1
  21. package/src/data-structures/binary-tree/tree-multiset.ts +0 -700
  22. package/src/data-structures/binary-tree/two-three-tree.ts +0 -1
  23. package/src/data-structures/graph/abstract-graph.ts +0 -1040
  24. package/src/data-structures/graph/directed-graph.ts +0 -470
  25. package/src/data-structures/graph/index.ts +0 -4
  26. package/src/data-structures/graph/map-graph.ts +0 -129
  27. package/src/data-structures/graph/undirected-graph.ts +0 -274
  28. package/src/data-structures/hash/coordinate-map.ts +0 -67
  29. package/src/data-structures/hash/coordinate-set.ts +0 -56
  30. package/src/data-structures/hash/hash-map.ts +0 -203
  31. package/src/data-structures/hash/hash-table.ts +0 -277
  32. package/src/data-structures/hash/index.ts +0 -7
  33. package/src/data-structures/hash/pair.ts +0 -1
  34. package/src/data-structures/hash/tree-map.ts +0 -1
  35. package/src/data-structures/hash/tree-set.ts +0 -1
  36. package/src/data-structures/heap/heap.ts +0 -212
  37. package/src/data-structures/heap/index.ts +0 -3
  38. package/src/data-structures/heap/max-heap.ts +0 -31
  39. package/src/data-structures/heap/min-heap.ts +0 -32
  40. package/src/data-structures/index.ts +0 -11
  41. package/src/data-structures/linked-list/doubly-linked-list.ts +0 -636
  42. package/src/data-structures/linked-list/index.ts +0 -3
  43. package/src/data-structures/linked-list/singly-linked-list.ts +0 -501
  44. package/src/data-structures/linked-list/skip-linked-list.ts +0 -166
  45. package/src/data-structures/matrix/index.ts +0 -4
  46. package/src/data-structures/matrix/matrix.ts +0 -27
  47. package/src/data-structures/matrix/matrix2d.ts +0 -213
  48. package/src/data-structures/matrix/navigator.ts +0 -121
  49. package/src/data-structures/matrix/vector2d.ts +0 -316
  50. package/src/data-structures/priority-queue/index.ts +0 -3
  51. package/src/data-structures/priority-queue/max-priority-queue.ts +0 -56
  52. package/src/data-structures/priority-queue/min-priority-queue.ts +0 -57
  53. package/src/data-structures/priority-queue/priority-queue.ts +0 -359
  54. package/src/data-structures/queue/deque.ts +0 -297
  55. package/src/data-structures/queue/index.ts +0 -2
  56. package/src/data-structures/queue/queue.ts +0 -191
  57. package/src/data-structures/stack/index.ts +0 -1
  58. package/src/data-structures/stack/stack.ts +0 -98
  59. package/src/data-structures/tree/index.ts +0 -1
  60. package/src/data-structures/tree/tree.ts +0 -69
  61. package/src/data-structures/trie/index.ts +0 -1
  62. package/src/data-structures/trie/trie.ts +0 -225
  63. package/src/index.ts +0 -4
  64. package/src/interfaces/abstract-binary-tree.ts +0 -189
  65. package/src/interfaces/abstract-graph.ts +0 -31
  66. package/src/interfaces/avl-tree.ts +0 -25
  67. package/src/interfaces/binary-tree.ts +0 -6
  68. package/src/interfaces/bst.ts +0 -31
  69. package/src/interfaces/directed-graph.ts +0 -20
  70. package/src/interfaces/doubly-linked-list.ts +0 -1
  71. package/src/interfaces/heap.ts +0 -1
  72. package/src/interfaces/index.ts +0 -15
  73. package/src/interfaces/navigator.ts +0 -1
  74. package/src/interfaces/priority-queue.ts +0 -1
  75. package/src/interfaces/rb-tree.ts +0 -9
  76. package/src/interfaces/segment-tree.ts +0 -1
  77. package/src/interfaces/singly-linked-list.ts +0 -1
  78. package/src/interfaces/tree-multiset.ts +0 -7
  79. package/src/interfaces/undirected-graph.ts +0 -6
  80. package/src/types/data-structures/abstract-binary-tree.ts +0 -50
  81. package/src/types/data-structures/abstract-graph.ts +0 -11
  82. package/src/types/data-structures/avl-tree.ts +0 -5
  83. package/src/types/data-structures/binary-tree.ts +0 -5
  84. package/src/types/data-structures/bst.ts +0 -13
  85. package/src/types/data-structures/directed-graph.ts +0 -8
  86. package/src/types/data-structures/doubly-linked-list.ts +0 -1
  87. package/src/types/data-structures/hash.ts +0 -1
  88. package/src/types/data-structures/heap.ts +0 -5
  89. package/src/types/data-structures/index.ts +0 -16
  90. package/src/types/data-structures/map-graph.ts +0 -1
  91. package/src/types/data-structures/navigator.ts +0 -13
  92. package/src/types/data-structures/priority-queue.ts +0 -9
  93. package/src/types/data-structures/rb-tree.ts +0 -8
  94. package/src/types/data-structures/segment-tree.ts +0 -1
  95. package/src/types/data-structures/singly-linked-list.ts +0 -1
  96. package/src/types/data-structures/tree-multiset.ts +0 -6
  97. package/src/types/helpers.ts +0 -1
  98. package/src/types/index.ts +0 -3
  99. package/src/types/utils/index.ts +0 -2
  100. package/src/types/utils/utils.ts +0 -6
  101. package/src/types/utils/validate-type.ts +0 -35
  102. package/src/utils/index.ts +0 -1
  103. package/src/utils/utils.ts +0 -79
  104. package/test/integration/avl-tree.test.ts +0 -108
  105. package/test/integration/bst.test.ts +0 -380
  106. package/test/integration/heap.test.js +0 -16
  107. package/test/integration/index.html +0 -52
  108. package/test/unit/data-structures/binary-tree/avl-tree.test.ts +0 -108
  109. package/test/unit/data-structures/binary-tree/binary-tree.test.ts +0 -142
  110. package/test/unit/data-structures/binary-tree/bst.test.ts +0 -380
  111. package/test/unit/data-structures/binary-tree/overall.test.ts +0 -65
  112. package/test/unit/data-structures/binary-tree/rb-tree.test.ts +0 -43
  113. package/test/unit/data-structures/binary-tree/segment-tree.test.ts +0 -50
  114. package/test/unit/data-structures/binary-tree/tree-multiset.test.ts +0 -461
  115. package/test/unit/data-structures/graph/abstract-graph.test.ts +0 -5
  116. package/test/unit/data-structures/graph/directed-graph.test.ts +0 -519
  117. package/test/unit/data-structures/graph/index.ts +0 -2
  118. package/test/unit/data-structures/graph/map-graph.test.ts +0 -45
  119. package/test/unit/data-structures/graph/overall.test.ts +0 -49
  120. package/test/unit/data-structures/graph/undirected-graph.test.ts +0 -59
  121. package/test/unit/data-structures/hash/coordinate-map.test.ts +0 -54
  122. package/test/unit/data-structures/hash/coordinate-set.test.ts +0 -41
  123. package/test/unit/data-structures/hash/hash-map.test.ts +0 -104
  124. package/test/unit/data-structures/hash/hash-table.test.ts +0 -184
  125. package/test/unit/data-structures/heap/heap.test.ts +0 -55
  126. package/test/unit/data-structures/heap/max-heap.test.ts +0 -44
  127. package/test/unit/data-structures/heap/min-heap.test.ts +0 -82
  128. package/test/unit/data-structures/linked-list/doubly-linked-list.test.ts +0 -364
  129. package/test/unit/data-structures/linked-list/index.ts +0 -4
  130. package/test/unit/data-structures/linked-list/linked-list.test.ts +0 -35
  131. package/test/unit/data-structures/linked-list/singly-linked-list.test.ts +0 -451
  132. package/test/unit/data-structures/linked-list/skip-linked-list.test.ts +0 -13
  133. package/test/unit/data-structures/linked-list/skip-list.test.ts +0 -55
  134. package/test/unit/data-structures/matrix/matrix.test.ts +0 -54
  135. package/test/unit/data-structures/matrix/matrix2d.test.ts +0 -138
  136. package/test/unit/data-structures/matrix/navigator.test.ts +0 -79
  137. package/test/unit/data-structures/priority-queue/max-priority-queue.test.ts +0 -106
  138. package/test/unit/data-structures/priority-queue/min-priority-queue.test.ts +0 -105
  139. package/test/unit/data-structures/priority-queue/priority-queue.test.ts +0 -27
  140. package/test/unit/data-structures/queue/deque.test.ts +0 -130
  141. package/test/unit/data-structures/queue/queue.test.ts +0 -199
  142. package/test/unit/data-structures/stack/stack.test.ts +0 -67
  143. package/test/unit/data-structures/tree/tree.test.ts +0 -39
  144. package/test/unit/data-structures/trie/trie.test.ts +0 -95
  145. package/test/utils/index.ts +0 -2
  146. package/test/utils/magnitude.ts +0 -21
  147. package/test/utils/number.ts +0 -3
  148. package/tsconfig.json +0 -29
@@ -1,519 +0,0 @@
1
- import {DirectedEdge, DirectedGraph, DirectedVertex, VertexId} from '../../../../src';
2
-
3
- describe('DirectedGraph Operation Test', () => {
4
- let graph: DirectedGraph;
5
-
6
- beforeEach(() => {
7
- graph = new DirectedGraph();
8
- });
9
-
10
- it('should add vertices', () => {
11
- const vertex1 = new DirectedVertex('A');
12
- const vertex2 = new DirectedVertex('B');
13
-
14
- graph.addVertex(vertex1);
15
- graph.addVertex(vertex2);
16
-
17
- expect(graph.hasVertex(vertex1)).toBe(true);
18
- expect(graph.hasVertex(vertex2)).toBe(true);
19
- });
20
-
21
- it('should add edges', () => {
22
- const vertex1 = new DirectedVertex('A');
23
- const vertex2 = new DirectedVertex('B');
24
- const edge = new DirectedEdge('A', 'B');
25
-
26
- graph.addVertex(vertex1);
27
- graph.addVertex(vertex2);
28
- graph.addEdge(edge);
29
-
30
- expect(graph.hasEdge('A', 'B')).toBe(true);
31
- expect(graph.hasEdge('B', 'A')).toBe(false);
32
- });
33
-
34
- it('should remove edges', () => {
35
- const vertex1 = new DirectedVertex('A');
36
- const vertex2 = new DirectedVertex('B');
37
- const edge = new DirectedEdge('A', 'B');
38
-
39
- graph.addVertex(vertex1);
40
- graph.addVertex(vertex2);
41
- graph.addEdge(edge);
42
-
43
- expect(graph.removeEdge(edge)).toBe(edge);
44
- expect(graph.hasEdge('A', 'B')).toBe(false);
45
- });
46
-
47
- it('should perform topological sort', () => {
48
- const vertexA = new DirectedVertex('A');
49
- const vertexB = new DirectedVertex('B');
50
- const vertexC = new DirectedVertex('C');
51
- const edgeAB = new DirectedEdge('A', 'B');
52
- const edgeBC = new DirectedEdge('B', 'C');
53
-
54
- graph.addVertex(vertexA);
55
- graph.addVertex(vertexB);
56
- graph.addVertex(vertexC);
57
- graph.addEdge(edgeAB);
58
- graph.addEdge(edgeBC);
59
-
60
- const topologicalOrder = graph.topologicalSort();
61
- if (topologicalOrder) expect(topologicalOrder).toEqual(['A', 'B', 'C']);
62
- });
63
- });
64
-
65
- class MyVertex<V extends string> extends DirectedVertex<V> {
66
- constructor(id: VertexId, val?: V) {
67
- super(id, val);
68
- this._data = val;
69
- }
70
-
71
- private _data: string | undefined;
72
-
73
- get data(): string | undefined {
74
- return this._data;
75
- }
76
-
77
- set data(value: string | undefined) {
78
- this._data = value;
79
- }
80
- }
81
-
82
- class MyEdge<E extends string> extends DirectedEdge<E> {
83
- constructor(v1: VertexId, v2: VertexId, weight?: number, val?: E) {
84
- super(v1, v2, weight, val);
85
- this._data = val;
86
- }
87
-
88
- private _data: string | undefined;
89
-
90
- get data(): string | undefined {
91
- return this._data;
92
- }
93
-
94
- set data(value: string | undefined) {
95
- this._data = value;
96
- }
97
- }
98
-
99
- class MyDirectedGraph<V extends MyVertex<string>, E extends MyEdge<string>> extends DirectedGraph<V, E> {
100
- createVertex(id: VertexId, val: V['val']): V {
101
- return new MyVertex(id, val) as V;
102
- }
103
-
104
- createEdge(src: VertexId, dest: VertexId, weight?: number, val?: E['val']): E {
105
- return new MyEdge(src, dest, weight ?? 1, val) as E;
106
- }
107
- }
108
-
109
- describe('Inherit from DirectedGraph and perform operations', () => {
110
- let myGraph = new MyDirectedGraph<MyVertex<string>, MyEdge<string>>();
111
- beforeEach(() => {
112
- myGraph = new MyDirectedGraph();
113
- });
114
-
115
- it('Add vertices', () => {
116
- myGraph.addVertex(1, 'data1');
117
- myGraph.addVertex(2, 'data2');
118
- myGraph.addVertex(3, 'data3');
119
- myGraph.addVertex(4, 'data4');
120
- myGraph.addVertex(5, 'data5');
121
- myGraph.addVertex(new MyVertex(6, 'data6'));
122
- myGraph.addVertex(new MyVertex(7, 'data7'));
123
- myGraph.addVertex(new MyVertex(8, 'data8'));
124
- myGraph.addVertex(new MyVertex(9, 'data9'));
125
- });
126
-
127
- it('Add edges', () => {
128
- myGraph.addVertex(1, 'data1');
129
- myGraph.addVertex(2, 'data2');
130
- myGraph.addEdge(1, 2, 10, 'edge-data1-2');
131
- myGraph.addEdge(new MyEdge(2, 1, 20, 'edge-data2-1'));
132
-
133
- expect(myGraph.edgeSet().length).toBe(2);
134
- // TODO
135
- expect(myGraph.getEdge(1, 2)).toBeInstanceOf(MyEdge);
136
- expect(myGraph.getEdge(2, 1)).toBeInstanceOf(MyEdge);
137
- });
138
-
139
- it('Get edge', () => {
140
- myGraph.addVertex(1, 'val1');
141
- myGraph.addVertex(2, 'val1');
142
- myGraph.addEdge(1, 2, 1, 'val1');
143
- const edge1 = myGraph.getEdge(1, 2);
144
- const edge2 = myGraph.getEdge(myGraph.getVertex(1), myGraph.getVertex(2));
145
- const edge3 = myGraph.getEdge(1, '100');
146
- // edge1.data has type problem. After the uniform design, the generics of containers (DirectedGraph, BST) are based on the type of value. However, this design has a drawback: when I attempt to inherit from the Vertex or BSTNode classes, the types of the results obtained by all methods are those of the parent class.
147
- expect(edge1).toBeInstanceOf(MyEdge);
148
- if (edge1) {
149
- expect(edge1.data).toBe('val1');
150
- expect(edge1?.val).toBe('val1');
151
- expect(edge1).toBeInstanceOf(MyEdge);
152
- expect(edge1.src).toBe(1);
153
- expect(edge1).toEqual(edge2);
154
- expect(edge3).toBeNull();
155
- }
156
- });
157
-
158
- it('Edge set and vertex set', () => {
159
- expect(true).toBeTruthy();
160
- });
161
-
162
- it('Remove edge between vertices', () => {
163
- myGraph.addVertex(1, 'data1');
164
- myGraph.addVertex(2, 'data2');
165
- myGraph.addEdge(1, 2, 10, 'edge-data1-2');
166
-
167
- const removedEdge = myGraph.removeEdgeSrcToDest(1, 2);
168
- const edgeAfterRemoval = myGraph.getEdge(1, 2);
169
-
170
- expect(removedEdge).toBeInstanceOf(MyEdge);
171
- if (removedEdge) {
172
- removedEdge && expect(removedEdge.val).toBe('edge-data1-2');
173
- removedEdge && expect(removedEdge.src).toBe(1);
174
- }
175
- expect(edgeAfterRemoval).toBeNull();
176
- });
177
-
178
- it('Topological sort', () => {
179
- const sorted = myGraph.topologicalSort();
180
-
181
- expect(sorted).toBeInstanceOf(Array);
182
- if (sorted && sorted.length > 0) {
183
- expect(sorted.length).toBe(9);
184
- if (sorted[0] instanceof MyVertex) expect(sorted[0].data).toBe('data9');
185
- sorted[3] instanceof MyVertex && expect(sorted[3].data).toBe('data6');
186
- sorted[8] instanceof MyVertex && expect(sorted[8].id).toBe(1);
187
- }
188
- });
189
-
190
- it('Minimum path between vertices', () => {
191
- myGraph.addVertex(new MyVertex(1, 'data1'));
192
- myGraph.addVertex(new MyVertex(2, 'data2'));
193
- myGraph.addEdge(new MyEdge(1, 2, 10, 'edge-data1-2'));
194
- });
195
-
196
- it('All paths between vertices', () => {
197
- // Add vertices and edges as needed for this test
198
- myGraph.addVertex(new MyVertex(1, 'data1'));
199
- myGraph.addVertex(new MyVertex(2, 'data2'));
200
- myGraph.addEdge(new MyEdge(1, 2, 10, 'edge-data1-2'));
201
-
202
- // Add expect statements here to verify the allPaths
203
- });
204
- });
205
-
206
- describe('Inherit from DirectedGraph and perform operations test2.', () => {
207
- const myGraph = new MyDirectedGraph<MyVertex<string>, MyEdge<string>>();
208
-
209
- it('should test graph operations', () => {
210
- const vertex1 = new MyVertex(1, 'data1');
211
- const vertex2 = new MyVertex(2, 'data2');
212
- const vertex3 = new MyVertex(3, 'data3');
213
- const vertex4 = new MyVertex(4, 'data4');
214
- const vertex5 = new MyVertex(5, 'data5');
215
- const vertex6 = new MyVertex(6, 'data6');
216
- const vertex7 = new MyVertex(7, 'data7');
217
- const vertex8 = new MyVertex(8, 'data8');
218
- const vertex9 = new MyVertex(9, 'data9');
219
- myGraph.addVertex(vertex1);
220
- myGraph.addVertex(vertex2);
221
- myGraph.addVertex(vertex3);
222
- myGraph.addVertex(vertex4);
223
- myGraph.addVertex(vertex5);
224
- myGraph.addVertex(vertex6);
225
- myGraph.addVertex(vertex7);
226
- myGraph.addVertex(vertex8);
227
- myGraph.addVertex(vertex9);
228
-
229
- myGraph.addEdge(new MyEdge(1, 2, 10, 'edge-data1-2'));
230
- myGraph.addEdge(new MyEdge(2, 1, 20, 'edge-data2-1'));
231
-
232
- expect(myGraph.getEdge(1, 2)).toBeTruthy();
233
- expect(myGraph.getEdge(2, 1)).toBeTruthy();
234
- expect(myGraph.getEdge(1, '100')).toBeFalsy();
235
-
236
- myGraph.removeEdgeSrcToDest(1, 2);
237
- expect(myGraph.getEdge(1, 2)).toBeFalsy();
238
-
239
- myGraph.addEdge(3, 1, 3, 'edge-data-3-1');
240
-
241
- myGraph.addEdge(1, 9, 19, 'edge-data1-9');
242
-
243
- myGraph.addEdge(9, 7, 97, 'edge-data9-7');
244
-
245
- myGraph.addEdge(7, 9, 79, 'edge-data7-9');
246
-
247
- myGraph.addEdge(1, 4, 14, 'edge-data1-4');
248
-
249
- myGraph.addEdge(4, 7, 47, 'edge-data4-7');
250
-
251
- myGraph.addEdge(1, 2, 12, 'edge-data1-2');
252
-
253
- myGraph.addEdge(2, 3, 23, 'edge-data2-3');
254
-
255
- myGraph.addEdge(3, 5, 35, 'edge-data3-5');
256
-
257
- myGraph.addEdge(5, 7, 57, 'edge-data5-7');
258
-
259
- myGraph.addEdge(new MyEdge(7, 3, 73, 'edge-data7-3'));
260
- const topologicalSorted = myGraph.topologicalSort();
261
- expect(topologicalSorted).toBeNull();
262
-
263
- const minPath1to7 = myGraph.getMinPathBetween(1, 7);
264
-
265
- expect(minPath1to7).toBeInstanceOf(Array);
266
- if (minPath1to7 && minPath1to7.length > 0) {
267
- expect(minPath1to7).toHaveLength(3);
268
- expect(minPath1to7[0]).toBeInstanceOf(MyVertex);
269
- expect(minPath1to7[0].id).toBe(1);
270
- expect(minPath1to7[1].id).toBe(9);
271
- expect(minPath1to7[2].id).toBe(7);
272
- }
273
-
274
- const fordResult1 = myGraph.bellmanFord(1);
275
- expect(fordResult1).toBeTruthy();
276
- expect(fordResult1.hasNegativeCycle).toBeUndefined();
277
- const {distMap, preMap, paths, min, minPath} = fordResult1;
278
- expect(distMap).toBeInstanceOf(Map);
279
- expect(distMap.size).toBe(9);
280
- expect(distMap.get(vertex1)).toBe(0);
281
- expect(distMap.get(vertex2)).toBe(12);
282
- expect(distMap.get(vertex3)).toBe(35);
283
- expect(distMap.get(vertex4)).toBe(14);
284
- expect(distMap.get(vertex5)).toBe(70);
285
- expect(distMap.get(vertex6)).toBe(Infinity);
286
- expect(distMap.get(vertex7)).toBe(61);
287
- expect(distMap.get(vertex8)).toBe(Infinity);
288
- expect(distMap.get(vertex9)).toBe(19);
289
-
290
- expect(preMap).toBeInstanceOf(Map);
291
- expect(preMap.size).toBe(0);
292
-
293
- expect(paths).toBeInstanceOf(Array);
294
- expect(paths.length).toBe(0);
295
- expect(min).toBe(Infinity);
296
- expect(minPath).toBeInstanceOf(Array);
297
-
298
- const floydResult = myGraph.floyd();
299
- expect(floydResult).toBeTruthy();
300
- if (floydResult) {
301
- const {costs, predecessor} = floydResult;
302
- expect(costs).toBeInstanceOf(Array);
303
- expect(costs.length).toBe(9);
304
- expect(costs[0]).toEqual([32, 12, 35, 14, 70, Infinity, 61, Infinity, 19]);
305
- expect(costs[1]).toEqual([20, 32, 23, 34, 58, Infinity, 81, Infinity, 39]);
306
- expect(costs[2]).toEqual([3, 15, 38, 17, 35, Infinity, 64, Infinity, 22]);
307
- expect(costs[3]).toEqual([123, 135, 120, 137, 155, Infinity, 47, Infinity, 126]);
308
- expect(costs[4]).toEqual([133, 145, 130, 147, 165, Infinity, 57, Infinity, 136]);
309
- expect(costs[5]).toEqual([
310
- Infinity,
311
- Infinity,
312
- Infinity,
313
- Infinity,
314
- Infinity,
315
- Infinity,
316
- Infinity,
317
- Infinity,
318
- Infinity
319
- ]);
320
- expect(costs[6]).toEqual([76, 88, 73, 90, 108, Infinity, 137, Infinity, 79]);
321
- expect(costs[7]).toEqual([
322
- Infinity,
323
- Infinity,
324
- Infinity,
325
- Infinity,
326
- Infinity,
327
- Infinity,
328
- Infinity,
329
- Infinity,
330
- Infinity
331
- ]);
332
- expect(costs[8]).toEqual([173, 185, 170, 187, 205, Infinity, 97, Infinity, 176]);
333
-
334
- expect(predecessor).toBeInstanceOf(Array);
335
- expect(predecessor.length).toBe(9);
336
- expect(predecessor[0]).toEqual([vertex2, null, vertex2, null, vertex3, null, vertex4, null, null]);
337
- expect(predecessor[1]).toEqual([null, vertex1, null, vertex1, vertex3, null, vertex4, null, vertex1]);
338
- expect(predecessor[5]).toEqual([null, null, null, null, null, null, null, null, null]);
339
- expect(predecessor[7]).toEqual([null, null, null, null, null, null, null, null, null]);
340
- expect(predecessor[8]).toEqual([vertex7, vertex7, vertex7, vertex7, vertex7, null, null, null, vertex7]);
341
- }
342
-
343
- const dijkstraRes12tt = myGraph.dijkstra(1, 2, true, true);
344
-
345
- expect(dijkstraRes12tt).toBeTruthy();
346
- if (dijkstraRes12tt) {
347
- const {distMap, minDist, minPath, paths} = dijkstraRes12tt;
348
- expect(distMap).toBeInstanceOf(Map);
349
- expect(distMap.size).toBe(9);
350
- expect(distMap.get(vertex1)).toBe(0);
351
- expect(distMap.get(vertex2)).toBe(12);
352
- expect(distMap.get(vertex3)).toBe(Infinity);
353
- expect(distMap.get(vertex4)).toBe(14);
354
- expect(distMap.get(vertex5)).toBe(Infinity);
355
- expect(distMap.get(vertex6)).toBe(Infinity);
356
- expect(distMap.get(vertex7)).toBe(Infinity);
357
- expect(distMap.get(vertex8)).toBe(Infinity);
358
- expect(distMap.get(vertex9)).toBe(19);
359
-
360
- expect(minDist).toBe(12);
361
- expect(minPath).toBeInstanceOf(Array);
362
- expect(minPath.length).toBe(2);
363
- expect(minPath[0]).toBe(vertex1);
364
- expect(minPath[1]).toBe(vertex2);
365
-
366
- expect(paths).toBeInstanceOf(Array);
367
- expect(paths.length).toBe(9);
368
- expect(paths[0]).toBeInstanceOf(Array);
369
- expect(paths[0][0]).toBe(vertex1);
370
-
371
- expect(paths[1]).toBeInstanceOf(Array);
372
- expect(paths[1][0]).toBe(vertex1);
373
- expect(paths[1][1]).toBe(vertex2);
374
-
375
- expect(paths[2]).toBeInstanceOf(Array);
376
- expect(paths[2][0]).toBe(vertex3);
377
- expect(paths[3]).toBeInstanceOf(Array);
378
- expect(paths[3][0]).toBe(vertex1);
379
- expect(paths[3][1]).toBe(vertex4);
380
- expect(paths[4]).toBeInstanceOf(Array);
381
- expect(paths[4][0]).toBe(vertex5);
382
-
383
- expect(paths[5]).toBeInstanceOf(Array);
384
- expect(paths[5][0]).toBe(vertex6);
385
- expect(paths[6]).toBeInstanceOf(Array);
386
- expect(paths[6][0]).toBe(vertex7);
387
- expect(paths[7]).toBeInstanceOf(Array);
388
- expect(paths[7][0]).toBe(vertex8);
389
- expect(paths[8]).toBeInstanceOf(Array);
390
- expect(paths[8][0]).toBe(vertex1);
391
- expect(paths[8][1]).toBe(vertex9);
392
- }
393
-
394
- const dijkstraRes1ntt = myGraph.dijkstra(1, null, true, true);
395
-
396
- expect(dijkstraRes1ntt).toBeTruthy();
397
- if (dijkstraRes1ntt) {
398
- const {distMap, minDist, minPath, paths} = dijkstraRes1ntt;
399
- expect(distMap).toBeInstanceOf(Map);
400
- expect(distMap.size).toBe(9);
401
- expect(distMap.get(vertex1)).toBe(0);
402
- expect(distMap.get(vertex2)).toBe(12);
403
- expect(distMap.get(vertex3)).toBe(35);
404
- expect(distMap.get(vertex4)).toBe(14);
405
- expect(distMap.get(vertex5)).toBe(70);
406
- expect(distMap.get(vertex6)).toBe(Infinity);
407
- expect(distMap.get(vertex7)).toBe(61);
408
- expect(distMap.get(vertex8)).toBe(Infinity);
409
- expect(distMap.get(vertex9)).toBe(19);
410
-
411
- expect(minDist).toBe(12);
412
- expect(minPath).toBeInstanceOf(Array);
413
- expect(minPath.length).toBe(2);
414
- expect(minPath[0]).toBe(vertex1);
415
- expect(minPath[1]).toBe(vertex2);
416
-
417
- expect(paths).toBeInstanceOf(Array);
418
- expect(paths.length).toBe(9);
419
- expect(paths[0]).toBeInstanceOf(Array);
420
- expect(paths[0][0]).toBe(vertex1);
421
-
422
- expect(paths[1]).toBeInstanceOf(Array);
423
- expect(paths[1][0]).toBe(vertex1);
424
- expect(paths[1][1]).toBe(vertex2);
425
-
426
- expect(paths[2]).toBeInstanceOf(Array);
427
- expect(paths[2][0]).toBe(vertex1);
428
- expect(paths[2][1]).toBe(vertex2);
429
- expect(paths[2][2]).toBe(vertex3);
430
-
431
- expect(paths[3]).toBeInstanceOf(Array);
432
- expect(paths[3][0]).toBe(vertex1);
433
- expect(paths[3][1]).toBe(vertex4);
434
-
435
- expect(paths[4]).toBeInstanceOf(Array);
436
- expect(paths[4][0]).toBe(vertex1);
437
- expect(paths[4][1]).toBe(vertex2);
438
- expect(paths[4][2]).toBe(vertex3);
439
- expect(paths[4][3]).toBe(vertex5);
440
-
441
- expect(paths[5]).toBeInstanceOf(Array);
442
- expect(paths[5][0]).toBe(vertex6);
443
-
444
- expect(paths[6]).toBeInstanceOf(Array);
445
- expect(paths[6][0]).toBe(vertex1);
446
- expect(paths[6][1]).toBe(vertex4);
447
- expect(paths[6][2]).toBe(vertex7);
448
-
449
- expect(paths[7]).toBeInstanceOf(Array);
450
- expect(paths[7][0]).toBe(vertex8);
451
-
452
- expect(paths[8]).toBeInstanceOf(Array);
453
- expect(paths[8][0]).toBe(vertex1);
454
- expect(paths[8][1]).toBe(vertex9);
455
- }
456
-
457
- const dijkstraWithoutHeapRes1ntt = myGraph.dijkstraWithoutHeap(1, null, true, true);
458
- expect(dijkstraWithoutHeapRes1ntt).toBeTruthy();
459
- if (dijkstraWithoutHeapRes1ntt) {
460
- const {distMap, minDist, minPath, paths} = dijkstraWithoutHeapRes1ntt;
461
- expect(distMap).toBeInstanceOf(Map);
462
- expect(distMap.size).toBe(9);
463
- expect(distMap.get(vertex1)).toBe(0);
464
- expect(distMap.get(vertex2)).toBe(12);
465
- expect(distMap.get(vertex3)).toBe(35);
466
- expect(distMap.get(vertex4)).toBe(14);
467
- expect(distMap.get(vertex5)).toBe(70);
468
- expect(distMap.get(vertex6)).toBe(Infinity);
469
- expect(distMap.get(vertex7)).toBe(61);
470
- expect(distMap.get(vertex8)).toBe(Infinity);
471
- expect(distMap.get(vertex9)).toBe(19);
472
-
473
- expect(minDist).toBe(12);
474
- expect(minPath).toBeInstanceOf(Array);
475
- expect(minPath.length).toBe(2);
476
- expect(minPath[0]).toBe(vertex1);
477
- expect(minPath[1]).toBe(vertex2);
478
-
479
- expect(paths).toBeInstanceOf(Array);
480
- expect(paths.length).toBe(9);
481
- expect(paths[0]).toBeInstanceOf(Array);
482
- expect(paths[0][0]).toBe(vertex1);
483
-
484
- expect(paths[1]).toBeInstanceOf(Array);
485
- expect(paths[1][0]).toBe(vertex1);
486
- expect(paths[1][1]).toBe(vertex2);
487
-
488
- expect(paths[2]).toBeInstanceOf(Array);
489
- expect(paths[2][0]).toBe(vertex1);
490
- expect(paths[2][1]).toBe(vertex2);
491
- expect(paths[2][2]).toBe(vertex3);
492
-
493
- expect(paths[3]).toBeInstanceOf(Array);
494
- expect(paths[3][0]).toBe(vertex1);
495
- expect(paths[3][1]).toBe(vertex4);
496
-
497
- expect(paths[4]).toBeInstanceOf(Array);
498
- expect(paths[4][0]).toBe(vertex1);
499
- expect(paths[4][1]).toBe(vertex2);
500
- expect(paths[4][2]).toBe(vertex3);
501
- expect(paths[4][3]).toBe(vertex5);
502
-
503
- expect(paths[5]).toBeInstanceOf(Array);
504
- expect(paths[5][0]).toBe(vertex6);
505
-
506
- expect(paths[6]).toBeInstanceOf(Array);
507
- expect(paths[6][0]).toBe(vertex1);
508
- expect(paths[6][1]).toBe(vertex4);
509
- expect(paths[6][2]).toBe(vertex7);
510
-
511
- expect(paths[7]).toBeInstanceOf(Array);
512
- expect(paths[7][0]).toBe(vertex8);
513
-
514
- expect(paths[8]).toBeInstanceOf(Array);
515
- expect(paths[8][0]).toBe(vertex1);
516
- expect(paths[8][1]).toBe(vertex9);
517
- }
518
- });
519
- });
@@ -1,2 +0,0 @@
1
- export * from './directed-graph.test';
2
- export * from './undirected-graph.test';
@@ -1,45 +0,0 @@
1
- import {MapGraph, MapVertex} from '../../../../src';
2
-
3
- describe('MapGraph Operation Test', () => {
4
- it('dijkstra shortest path', () => {
5
- const mapGraph = new MapGraph([5.500338, 100.173665]);
6
-
7
- mapGraph.addVertex(new MapVertex('Surin', 5.466724, 100.274805));
8
- mapGraph.addVertex(new MapVertex('Batu Feringgi Beach', 5.475141, 100.27667));
9
- mapGraph.addVertex(new MapVertex('Lotus', 5.459044, 100.308767));
10
- mapGraph.addVertex(new MapVertex('The Breeza', 5.454197, 100.307859));
11
- mapGraph.addVertex(new MapVertex('Hard Rock Hotel', 5.46785, 100.241876));
12
- mapGraph.addVertex(new MapVertex('Mira', 5.456749, 100.28665));
13
- mapGraph.addVertex(new MapVertex('Penang Bible Church', 5.428683, 100.314825));
14
- mapGraph.addVertex(new MapVertex('Queensbay', 5.33276, 100.306651));
15
- mapGraph.addVertex(new MapVertex('Saanen Goat Farm', 5.405738, 100.207699));
16
- mapGraph.addVertex(new MapVertex('Trinity Auto', 5.401126, 100.303739));
17
- mapGraph.addVertex(new MapVertex('Penang Airport', 5.293185, 100.265772));
18
- mapGraph.addEdge('Surin', 'Lotus', 4.7);
19
- mapGraph.addEdge('Lotus', 'The Breeza', 1);
20
- mapGraph.addEdge('Batu Feringgi Beach', 'Hard Rock Hotel', 5.2);
21
- mapGraph.addEdge('Surin', 'Mira', 2.8);
22
- mapGraph.addEdge('Mira', 'Penang Bible Church', 7.0);
23
- mapGraph.addEdge('Lotus', 'Penang Bible Church', 5.7);
24
- mapGraph.addEdge('Penang Bible Church', 'Queensbay', 13.9);
25
- mapGraph.addEdge('Hard Rock Hotel', 'Saanen Goat Farm', 18.5);
26
- mapGraph.addEdge('The Breeza', 'Trinity Auto', 9.1);
27
- mapGraph.addEdge('Trinity Auto', 'Saanen Goat Farm', 26.3);
28
- mapGraph.addEdge('The Breeza', 'Penang Airport', 24.8);
29
- mapGraph.addEdge('Penang Airport', 'Saanen Goat Farm', 21.2);
30
- const expected1 = ['Surin', 'Lotus', 'The Breeza', 'Trinity Auto', 'Saanen Goat Farm'];
31
-
32
- const minPathBetween = mapGraph.getMinPathBetween('Surin', 'Saanen Goat Farm');
33
- expect(minPathBetween?.map(v => v.id)).toEqual(expected1);
34
- const surinToSaanenGoatFarmDij = mapGraph.dijkstra('Surin', 'Saanen Goat Farm', true, true);
35
- expect(surinToSaanenGoatFarmDij?.minPath.map(v => v.id)).toEqual(expected1);
36
- expect(surinToSaanenGoatFarmDij?.minDist).toBe(41.1);
37
- mapGraph.addEdge('Surin', 'Batu Feringgi Beach', 1.5);
38
- const expected2 = ['Surin', 'Batu Feringgi Beach', 'Hard Rock Hotel', 'Saanen Goat Farm'];
39
- const minPathBetweenViaBFB = mapGraph.getMinPathBetween('Surin', 'Saanen Goat Farm', true);
40
- expect(minPathBetweenViaBFB?.map(v => v.id)).toEqual(expected2);
41
- const surinToSaanenGoatFarmViaDij = mapGraph.dijkstra('Surin', 'Saanen Goat Farm', true, true);
42
- expect(surinToSaanenGoatFarmViaDij?.minPath.map(v => v.id)).toEqual(expected2);
43
- expect(surinToSaanenGoatFarmViaDij?.minDist).toBe(25.2);
44
- });
45
- });
@@ -1,49 +0,0 @@
1
- import {DirectedGraph, UndirectedGraph} from '../../../../src';
2
-
3
- describe('Overall Graph Operation Test', () => {
4
- it('Overall DirectedGraph Operation Test', () => {
5
- const graph = new DirectedGraph();
6
-
7
- graph.addVertex('A');
8
- graph.addVertex('B');
9
-
10
- graph.hasVertex('A'); // true
11
- graph.hasVertex('B'); // true
12
- graph.hasVertex('C'); // false
13
- expect(graph.hasVertex('A')).toBe(true); // true
14
- expect(graph.hasVertex('B')).toBe(true); // true
15
- expect(graph.hasVertex('C')).toBe(false); // false
16
-
17
- graph.addEdge('A', 'B');
18
- graph.hasEdge('A', 'B'); // true
19
- graph.hasEdge('B', 'A'); // false
20
- expect(graph.hasEdge('A', 'B')).toBe(true); // true
21
- expect(graph.hasEdge('B', 'A')).toBe(false); // false
22
-
23
- graph.removeEdgeSrcToDest('A', 'B');
24
- graph.hasEdge('A', 'B'); // false
25
- expect(graph.hasEdge('A', 'B')).toBe(false); // false
26
-
27
- graph.addVertex('C');
28
-
29
- graph.addEdge('A', 'B');
30
- graph.addEdge('B', 'C');
31
-
32
- const topologicalOrderIds = graph.topologicalSort();
33
- expect(topologicalOrderIds).toEqual(['A', 'B', 'C']);
34
- });
35
- it('Overall UndirectedGraph Operation Test', () => {
36
- const graph = new UndirectedGraph();
37
- graph.addVertex('A');
38
- graph.addVertex('B');
39
- graph.addVertex('C');
40
- graph.addVertex('D');
41
- graph.removeVertex('C');
42
- graph.addEdge('A', 'B');
43
- graph.addEdge('B', 'D');
44
-
45
- const dijkstraResult = graph.dijkstra('A');
46
- Array.from(dijkstraResult?.seen ?? []).map(vertex => vertex.id); // ['A', 'B', 'D']
47
- expect(Array.from(dijkstraResult?.seen ?? []).map(vertex => vertex.id)).toEqual(['A', 'B', 'D']);
48
- });
49
- });
@@ -1,59 +0,0 @@
1
- import {UndirectedEdge, UndirectedGraph, UndirectedVertex} from '../../../../src';
2
-
3
- describe('UndirectedGraph Operation Test', () => {
4
- let graph: UndirectedGraph;
5
-
6
- beforeEach(() => {
7
- graph = new UndirectedGraph();
8
- });
9
-
10
- it('should add vertices', () => {
11
- const vertex1 = new UndirectedVertex('A');
12
- const vertex2 = new UndirectedVertex('B');
13
-
14
- graph.addVertex(vertex1);
15
- graph.addVertex(vertex2);
16
-
17
- expect(graph.hasVertex(vertex1)).toBe(true);
18
- expect(graph.hasVertex(vertex2)).toBe(true);
19
- });
20
-
21
- it('should add edges', () => {
22
- const vertex1 = new UndirectedVertex('A');
23
- const vertex2 = new UndirectedVertex('B');
24
- const edge = new UndirectedEdge('A', 'B');
25
-
26
- graph.addVertex(vertex1);
27
- graph.addVertex(vertex2);
28
- graph.addEdge(edge);
29
-
30
- expect(graph.hasEdge('A', 'B')).toBe(true);
31
- expect(graph.hasEdge('B', 'A')).toBe(true);
32
- });
33
-
34
- it('should remove edges', () => {
35
- const vertex1 = new UndirectedVertex('A');
36
- const vertex2 = new UndirectedVertex('B');
37
- const edge = new UndirectedEdge('A', 'B');
38
-
39
- graph.addVertex(vertex1);
40
- graph.addVertex(vertex2);
41
- graph.addEdge(edge);
42
-
43
- expect(graph.removeEdge(edge)).toBe(edge);
44
- expect(graph.hasEdge('A', 'B')).toBe(false);
45
- });
46
-
47
- it('should perform topological sort', () => {
48
- graph.addVertex('A');
49
- graph.addVertex('B');
50
- graph.addVertex('C');
51
- graph.addVertex('D');
52
- graph.removeVertex('C');
53
- graph.addEdge('A', 'B');
54
- graph.addEdge('B', 'D');
55
-
56
- const dijkstraResult = graph.dijkstra('A');
57
- expect(Array.from(dijkstraResult?.seen ?? []).map(vertex => vertex.id)).toEqual(['A', 'B', 'D']);
58
- });
59
- });