data-structure-typed 1.33.7 → 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 (149) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/README.md +25 -14
  3. package/package.json +22 -22
  4. package/.prettierrc.js +0 -16
  5. package/coverage/coverage-final.json +0 -68
  6. package/coverage/coverage-summary.json +0 -69
  7. package/docs/.nojekyll +0 -1
  8. package/docs/index.html +0 -875
  9. package/docs/modules.html +0 -336
  10. package/jest.config.js +0 -8
  11. package/src/data-structures/binary-tree/aa-tree.ts +0 -1
  12. package/src/data-structures/binary-tree/abstract-binary-tree.ts +0 -1608
  13. package/src/data-structures/binary-tree/avl-tree.ts +0 -307
  14. package/src/data-structures/binary-tree/b-tree.ts +0 -1
  15. package/src/data-structures/binary-tree/binary-indexed-tree.ts +0 -76
  16. package/src/data-structures/binary-tree/binary-tree.ts +0 -47
  17. package/src/data-structures/binary-tree/bst.ts +0 -537
  18. package/src/data-structures/binary-tree/index.ts +0 -12
  19. package/src/data-structures/binary-tree/rb-tree.ts +0 -366
  20. package/src/data-structures/binary-tree/segment-tree.ts +0 -260
  21. package/src/data-structures/binary-tree/splay-tree.ts +0 -1
  22. package/src/data-structures/binary-tree/tree-multiset.ts +0 -700
  23. package/src/data-structures/binary-tree/two-three-tree.ts +0 -1
  24. package/src/data-structures/graph/abstract-graph.ts +0 -1040
  25. package/src/data-structures/graph/directed-graph.ts +0 -470
  26. package/src/data-structures/graph/index.ts +0 -4
  27. package/src/data-structures/graph/map-graph.ts +0 -129
  28. package/src/data-structures/graph/undirected-graph.ts +0 -274
  29. package/src/data-structures/hash/coordinate-map.ts +0 -67
  30. package/src/data-structures/hash/coordinate-set.ts +0 -56
  31. package/src/data-structures/hash/hash-map.ts +0 -203
  32. package/src/data-structures/hash/hash-table.ts +0 -277
  33. package/src/data-structures/hash/index.ts +0 -7
  34. package/src/data-structures/hash/pair.ts +0 -1
  35. package/src/data-structures/hash/tree-map.ts +0 -1
  36. package/src/data-structures/hash/tree-set.ts +0 -1
  37. package/src/data-structures/heap/heap.ts +0 -212
  38. package/src/data-structures/heap/index.ts +0 -3
  39. package/src/data-structures/heap/max-heap.ts +0 -31
  40. package/src/data-structures/heap/min-heap.ts +0 -32
  41. package/src/data-structures/index.ts +0 -11
  42. package/src/data-structures/linked-list/doubly-linked-list.ts +0 -636
  43. package/src/data-structures/linked-list/index.ts +0 -3
  44. package/src/data-structures/linked-list/singly-linked-list.ts +0 -501
  45. package/src/data-structures/linked-list/skip-linked-list.ts +0 -166
  46. package/src/data-structures/matrix/index.ts +0 -4
  47. package/src/data-structures/matrix/matrix.ts +0 -27
  48. package/src/data-structures/matrix/matrix2d.ts +0 -213
  49. package/src/data-structures/matrix/navigator.ts +0 -121
  50. package/src/data-structures/matrix/vector2d.ts +0 -316
  51. package/src/data-structures/priority-queue/index.ts +0 -3
  52. package/src/data-structures/priority-queue/max-priority-queue.ts +0 -56
  53. package/src/data-structures/priority-queue/min-priority-queue.ts +0 -57
  54. package/src/data-structures/priority-queue/priority-queue.ts +0 -359
  55. package/src/data-structures/queue/deque.ts +0 -297
  56. package/src/data-structures/queue/index.ts +0 -2
  57. package/src/data-structures/queue/queue.ts +0 -191
  58. package/src/data-structures/stack/index.ts +0 -1
  59. package/src/data-structures/stack/stack.ts +0 -98
  60. package/src/data-structures/tree/index.ts +0 -1
  61. package/src/data-structures/tree/tree.ts +0 -69
  62. package/src/data-structures/trie/index.ts +0 -1
  63. package/src/data-structures/trie/trie.ts +0 -225
  64. package/src/index.ts +0 -4
  65. package/src/interfaces/abstract-binary-tree.ts +0 -189
  66. package/src/interfaces/abstract-graph.ts +0 -31
  67. package/src/interfaces/avl-tree.ts +0 -25
  68. package/src/interfaces/binary-tree.ts +0 -6
  69. package/src/interfaces/bst.ts +0 -31
  70. package/src/interfaces/directed-graph.ts +0 -20
  71. package/src/interfaces/doubly-linked-list.ts +0 -1
  72. package/src/interfaces/heap.ts +0 -1
  73. package/src/interfaces/index.ts +0 -15
  74. package/src/interfaces/navigator.ts +0 -1
  75. package/src/interfaces/priority-queue.ts +0 -1
  76. package/src/interfaces/rb-tree.ts +0 -9
  77. package/src/interfaces/segment-tree.ts +0 -1
  78. package/src/interfaces/singly-linked-list.ts +0 -1
  79. package/src/interfaces/tree-multiset.ts +0 -7
  80. package/src/interfaces/undirected-graph.ts +0 -6
  81. package/src/types/data-structures/abstract-binary-tree.ts +0 -50
  82. package/src/types/data-structures/abstract-graph.ts +0 -11
  83. package/src/types/data-structures/avl-tree.ts +0 -5
  84. package/src/types/data-structures/binary-tree.ts +0 -5
  85. package/src/types/data-structures/bst.ts +0 -13
  86. package/src/types/data-structures/directed-graph.ts +0 -8
  87. package/src/types/data-structures/doubly-linked-list.ts +0 -1
  88. package/src/types/data-structures/hash.ts +0 -1
  89. package/src/types/data-structures/heap.ts +0 -5
  90. package/src/types/data-structures/index.ts +0 -16
  91. package/src/types/data-structures/map-graph.ts +0 -1
  92. package/src/types/data-structures/navigator.ts +0 -13
  93. package/src/types/data-structures/priority-queue.ts +0 -9
  94. package/src/types/data-structures/rb-tree.ts +0 -8
  95. package/src/types/data-structures/segment-tree.ts +0 -1
  96. package/src/types/data-structures/singly-linked-list.ts +0 -1
  97. package/src/types/data-structures/tree-multiset.ts +0 -6
  98. package/src/types/helpers.ts +0 -1
  99. package/src/types/index.ts +0 -3
  100. package/src/types/utils/index.ts +0 -2
  101. package/src/types/utils/utils.ts +0 -6
  102. package/src/types/utils/validate-type.ts +0 -35
  103. package/src/utils/index.ts +0 -1
  104. package/src/utils/utils.ts +0 -79
  105. package/test/integration/avl-tree.test.ts +0 -108
  106. package/test/integration/bst.test.ts +0 -380
  107. package/test/integration/heap.test.js +0 -16
  108. package/test/integration/index.html +0 -44
  109. package/test/unit/data-structures/binary-tree/avl-tree.test.ts +0 -108
  110. package/test/unit/data-structures/binary-tree/binary-tree.test.ts +0 -142
  111. package/test/unit/data-structures/binary-tree/bst.test.ts +0 -380
  112. package/test/unit/data-structures/binary-tree/overall.test.ts +0 -65
  113. package/test/unit/data-structures/binary-tree/rb-tree.test.ts +0 -43
  114. package/test/unit/data-structures/binary-tree/segment-tree.test.ts +0 -50
  115. package/test/unit/data-structures/binary-tree/tree-multiset.test.ts +0 -461
  116. package/test/unit/data-structures/graph/abstract-graph.test.ts +0 -5
  117. package/test/unit/data-structures/graph/directed-graph.test.ts +0 -519
  118. package/test/unit/data-structures/graph/index.ts +0 -2
  119. package/test/unit/data-structures/graph/map-graph.test.ts +0 -45
  120. package/test/unit/data-structures/graph/overall.test.ts +0 -49
  121. package/test/unit/data-structures/graph/undirected-graph.test.ts +0 -59
  122. package/test/unit/data-structures/hash/coordinate-map.test.ts +0 -54
  123. package/test/unit/data-structures/hash/coordinate-set.test.ts +0 -41
  124. package/test/unit/data-structures/hash/hash-map.test.ts +0 -104
  125. package/test/unit/data-structures/hash/hash-table.test.ts +0 -184
  126. package/test/unit/data-structures/heap/heap.test.ts +0 -55
  127. package/test/unit/data-structures/heap/max-heap.test.ts +0 -44
  128. package/test/unit/data-structures/heap/min-heap.test.ts +0 -82
  129. package/test/unit/data-structures/linked-list/doubly-linked-list.test.ts +0 -364
  130. package/test/unit/data-structures/linked-list/index.ts +0 -4
  131. package/test/unit/data-structures/linked-list/linked-list.test.ts +0 -35
  132. package/test/unit/data-structures/linked-list/singly-linked-list.test.ts +0 -451
  133. package/test/unit/data-structures/linked-list/skip-linked-list.test.ts +0 -13
  134. package/test/unit/data-structures/linked-list/skip-list.test.ts +0 -55
  135. package/test/unit/data-structures/matrix/matrix.test.ts +0 -54
  136. package/test/unit/data-structures/matrix/matrix2d.test.ts +0 -138
  137. package/test/unit/data-structures/matrix/navigator.test.ts +0 -79
  138. package/test/unit/data-structures/priority-queue/max-priority-queue.test.ts +0 -106
  139. package/test/unit/data-structures/priority-queue/min-priority-queue.test.ts +0 -105
  140. package/test/unit/data-structures/priority-queue/priority-queue.test.ts +0 -27
  141. package/test/unit/data-structures/queue/deque.test.ts +0 -130
  142. package/test/unit/data-structures/queue/queue.test.ts +0 -199
  143. package/test/unit/data-structures/stack/stack.test.ts +0 -67
  144. package/test/unit/data-structures/tree/tree.test.ts +0 -39
  145. package/test/unit/data-structures/trie/trie.test.ts +0 -95
  146. package/test/utils/index.ts +0 -2
  147. package/test/utils/magnitude.ts +0 -21
  148. package/test/utils/number.ts +0 -3
  149. 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
- });