data-structure-typed 1.15.2 → 1.17.0

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 (212) hide show
  1. package/README.md +24 -24
  2. package/dist/data-structures/heap/heap.d.ts +30 -15
  3. package/dist/data-structures/heap/heap.js +60 -15
  4. package/dist/data-structures/heap/max-heap.d.ts +3 -3
  5. package/dist/data-structures/heap/min-heap.d.ts +3 -3
  6. package/dist/data-structures/index.d.ts +1 -0
  7. package/dist/data-structures/index.js +1 -0
  8. package/dist/data-structures/linked-list/doubly-linked-list.d.ts +195 -68
  9. package/dist/data-structures/linked-list/doubly-linked-list.js +456 -244
  10. package/dist/data-structures/linked-list/singly-linked-list.d.ts +126 -241
  11. package/dist/data-structures/linked-list/singly-linked-list.js +331 -628
  12. package/dist/data-structures/priority-queue/max-priority-queue.d.ts +4 -5
  13. package/dist/data-structures/priority-queue/max-priority-queue.js +30 -6
  14. package/dist/data-structures/priority-queue/min-priority-queue.d.ts +4 -5
  15. package/dist/data-structures/priority-queue/min-priority-queue.js +31 -6
  16. package/dist/data-structures/priority-queue/priority-queue.d.ts +13 -2
  17. package/dist/data-structures/priority-queue/priority-queue.js +28 -22
  18. package/dist/data-structures/tree/index.d.ts +1 -0
  19. package/dist/data-structures/tree/index.js +17 -0
  20. package/dist/data-structures/tree/tree.d.ts +9 -0
  21. package/dist/data-structures/tree/tree.js +52 -0
  22. package/dist/data-structures/types/binary-tree.d.ts +0 -5
  23. package/dist/data-structures/types/heap.d.ts +0 -4
  24. package/dist/utils/types/utils.d.ts +1 -0
  25. package/docs/.nojekyll +1 -0
  26. package/docs/assets/highlight.css +92 -0
  27. package/docs/assets/main.js +58 -0
  28. package/docs/assets/search.js +1 -0
  29. package/docs/assets/style.css +1367 -0
  30. package/docs/classes/AVLTree.html +2191 -0
  31. package/docs/classes/AVLTreeNode.html +573 -0
  32. package/docs/classes/AaTree.html +149 -0
  33. package/docs/classes/AbstractEdge.html +268 -0
  34. package/docs/classes/AbstractGraph.html +926 -0
  35. package/docs/classes/AbstractVertex.html +214 -0
  36. package/docs/classes/ArrayDeque.html +416 -0
  37. package/docs/classes/BST.html +2037 -0
  38. package/docs/classes/BSTNode.html +569 -0
  39. package/docs/classes/BTree.html +149 -0
  40. package/docs/classes/BinaryIndexedTree.html +288 -0
  41. package/docs/classes/BinaryTree.html +1826 -0
  42. package/docs/classes/BinaryTreeNode.html +532 -0
  43. package/docs/classes/Character.html +197 -0
  44. package/docs/classes/CoordinateMap.html +468 -0
  45. package/docs/classes/CoordinateSet.html +429 -0
  46. package/docs/classes/Deque.html +897 -0
  47. package/docs/classes/DirectedEdge.html +353 -0
  48. package/docs/classes/DirectedGraph.html +1242 -0
  49. package/docs/classes/DirectedVertex.html +225 -0
  50. package/docs/classes/DoublyLinkedList.html +891 -0
  51. package/docs/classes/DoublyLinkedListNode.html +274 -0
  52. package/docs/classes/Heap.html +481 -0
  53. package/docs/classes/HeapItem.html +232 -0
  54. package/docs/classes/Matrix2D.html +479 -0
  55. package/docs/classes/MatrixNTI2D.html +217 -0
  56. package/docs/classes/MaxHeap.html +499 -0
  57. package/docs/classes/MaxPriorityQueue.html +808 -0
  58. package/docs/classes/MinHeap.html +500 -0
  59. package/docs/classes/MinPriorityQueue.html +810 -0
  60. package/docs/classes/Navigator.html +290 -0
  61. package/docs/classes/ObjectDeque.html +422 -0
  62. package/docs/classes/PriorityQueue.html +732 -0
  63. package/docs/classes/Queue.html +369 -0
  64. package/docs/classes/RBTree.html +149 -0
  65. package/docs/classes/SegmentTree.html +344 -0
  66. package/docs/classes/SegmentTreeNode.html +417 -0
  67. package/docs/classes/SinglyLinkedList.html +718 -0
  68. package/docs/classes/SinglyLinkedListNode.html +247 -0
  69. package/docs/classes/SplayTree.html +149 -0
  70. package/docs/classes/Stack.html +345 -0
  71. package/docs/classes/TreeMultiSet.html +2035 -0
  72. package/docs/classes/TreeNode.html +235 -0
  73. package/docs/classes/Trie.html +349 -0
  74. package/docs/classes/TrieNode.html +257 -0
  75. package/docs/classes/TwoThreeTree.html +149 -0
  76. package/docs/classes/UndirectedEdge.html +312 -0
  77. package/docs/classes/UndirectedGraph.html +1079 -0
  78. package/docs/classes/UndirectedVertex.html +225 -0
  79. package/docs/classes/Vector2D.html +782 -0
  80. package/docs/enums/CP.html +158 -0
  81. package/docs/enums/FamilyPosition.html +158 -0
  82. package/docs/enums/LoopType.html +159 -0
  83. package/docs/index.html +493 -0
  84. package/docs/interfaces/AVLTreeDeleted.html +160 -0
  85. package/docs/interfaces/HeapOptions.html +166 -0
  86. package/docs/interfaces/IDirectedGraph.html +242 -0
  87. package/docs/interfaces/IGraph.html +426 -0
  88. package/docs/interfaces/NavigatorParams.html +196 -0
  89. package/docs/interfaces/PriorityQueueOptions.html +167 -0
  90. package/docs/modules.html +216 -0
  91. package/docs/types/BSTComparator.html +139 -0
  92. package/docs/types/BSTDeletedResult.html +136 -0
  93. package/docs/types/BinaryTreeDeleted.html +136 -0
  94. package/docs/types/BinaryTreeNodeId.html +124 -0
  95. package/docs/types/BinaryTreeNodePropertyName.html +124 -0
  96. package/docs/types/DFSOrderPattern.html +124 -0
  97. package/docs/types/DijkstraResult.html +144 -0
  98. package/docs/types/Direction.html +124 -0
  99. package/docs/types/DoublyLinkedListGetBy.html +124 -0
  100. package/docs/types/NodeOrPropertyName.html +124 -0
  101. package/docs/types/PriorityQueueComparator.html +144 -0
  102. package/docs/types/PriorityQueueDFSOrderPattern.html +124 -0
  103. package/docs/types/ResultByProperty.html +129 -0
  104. package/docs/types/ResultsByProperty.html +129 -0
  105. package/docs/types/SegmentTreeNodeVal.html +124 -0
  106. package/docs/types/SpecifyOptional.html +131 -0
  107. package/docs/types/Thunk.html +132 -0
  108. package/docs/types/ToThunkFn.html +132 -0
  109. package/docs/types/TopologicalStatus.html +124 -0
  110. package/docs/types/TreeMultiSetDeletedResult.html +136 -0
  111. package/docs/types/TrlAsyncFn.html +137 -0
  112. package/docs/types/TrlFn.html +137 -0
  113. package/docs/types/Turning.html +124 -0
  114. package/docs/types/VertexId.html +124 -0
  115. package/{tests/unit/data-structures/binary-tree → notes}/bst.test.ts +37 -50
  116. package/notes/note.md +23 -0
  117. package/package.json +1 -3
  118. package/.idea/data-structure-typed.iml +0 -14
  119. package/.idea/modules.xml +0 -8
  120. package/.idea/vcs.xml +0 -6
  121. package/src/assets/complexities-diff.jpg +0 -0
  122. package/src/assets/data-structure-complexities.jpg +0 -0
  123. package/src/assets/logo.png +0 -0
  124. package/src/assets/overview-diagram-of-data-structures.png +0 -0
  125. package/src/data-structures/binary-tree/aa-tree.ts +0 -3
  126. package/src/data-structures/binary-tree/avl-tree.ts +0 -293
  127. package/src/data-structures/binary-tree/b-tree.ts +0 -3
  128. package/src/data-structures/binary-tree/binary-indexed-tree.ts +0 -69
  129. package/src/data-structures/binary-tree/binary-tree.ts +0 -1492
  130. package/src/data-structures/binary-tree/bst.ts +0 -497
  131. package/src/data-structures/binary-tree/diagrams/avl-tree-inserting.gif +0 -0
  132. package/src/data-structures/binary-tree/diagrams/bst-rotation.gif +0 -0
  133. package/src/data-structures/binary-tree/diagrams/segment-tree.png +0 -0
  134. package/src/data-structures/binary-tree/index.ts +0 -11
  135. package/src/data-structures/binary-tree/rb-tree.ts +0 -3
  136. package/src/data-structures/binary-tree/segment-tree.ts +0 -267
  137. package/src/data-structures/binary-tree/splay-tree.ts +0 -3
  138. package/src/data-structures/binary-tree/tree-multiset.ts +0 -53
  139. package/src/data-structures/binary-tree/two-three-tree.ts +0 -3
  140. package/src/data-structures/diagrams/README.md +0 -5
  141. package/src/data-structures/graph/abstract-graph.ts +0 -958
  142. package/src/data-structures/graph/diagrams/adjacency-list-pros-cons.jpg +0 -0
  143. package/src/data-structures/graph/diagrams/adjacency-list.jpg +0 -0
  144. package/src/data-structures/graph/diagrams/adjacency-matrix-pros-cons.jpg +0 -0
  145. package/src/data-structures/graph/diagrams/adjacency-matrix.jpg +0 -0
  146. package/src/data-structures/graph/diagrams/dfs-can-do.jpg +0 -0
  147. package/src/data-structures/graph/diagrams/edge-list-pros-cons.jpg +0 -0
  148. package/src/data-structures/graph/diagrams/edge-list.jpg +0 -0
  149. package/src/data-structures/graph/diagrams/max-flow.jpg +0 -0
  150. package/src/data-structures/graph/diagrams/mst.jpg +0 -0
  151. package/src/data-structures/graph/diagrams/tarjan-articulation-point-bridge.png +0 -0
  152. package/src/data-structures/graph/diagrams/tarjan-complicate-simple.png +0 -0
  153. package/src/data-structures/graph/diagrams/tarjan-strongly-connected-component.png +0 -0
  154. package/src/data-structures/graph/diagrams/tarjan.mp4 +0 -0
  155. package/src/data-structures/graph/diagrams/tarjan.webp +0 -0
  156. package/src/data-structures/graph/directed-graph.ts +0 -429
  157. package/src/data-structures/graph/index.ts +0 -3
  158. package/src/data-structures/graph/undirected-graph.ts +0 -259
  159. package/src/data-structures/hash/coordinate-map.ts +0 -74
  160. package/src/data-structures/hash/coordinate-set.ts +0 -63
  161. package/src/data-structures/hash/hash-table.ts +0 -1
  162. package/src/data-structures/hash/index.ts +0 -6
  163. package/src/data-structures/hash/pair.ts +0 -1
  164. package/src/data-structures/hash/tree-map.ts +0 -1
  165. package/src/data-structures/hash/tree-set.ts +0 -1
  166. package/src/data-structures/heap/heap.ts +0 -162
  167. package/src/data-structures/heap/index.ts +0 -3
  168. package/src/data-structures/heap/max-heap.ts +0 -31
  169. package/src/data-structures/heap/min-heap.ts +0 -34
  170. package/src/data-structures/index.ts +0 -13
  171. package/src/data-structures/linked-list/doubly-linked-list.ts +0 -365
  172. package/src/data-structures/linked-list/index.ts +0 -2
  173. package/src/data-structures/linked-list/singly-linked-list.ts +0 -757
  174. package/src/data-structures/linked-list/skip-linked-list.ts +0 -1
  175. package/src/data-structures/matrix/index.ts +0 -4
  176. package/src/data-structures/matrix/matrix.ts +0 -27
  177. package/src/data-structures/matrix/matrix2d.ts +0 -208
  178. package/src/data-structures/matrix/navigator.ts +0 -122
  179. package/src/data-structures/matrix/vector2d.ts +0 -316
  180. package/src/data-structures/priority-queue/index.ts +0 -3
  181. package/src/data-structures/priority-queue/max-priority-queue.ts +0 -24
  182. package/src/data-structures/priority-queue/min-priority-queue.ts +0 -24
  183. package/src/data-structures/priority-queue/priority-queue.ts +0 -349
  184. package/src/data-structures/queue/deque.ts +0 -251
  185. package/src/data-structures/queue/index.ts +0 -2
  186. package/src/data-structures/queue/queue.ts +0 -120
  187. package/src/data-structures/stack/index.ts +0 -1
  188. package/src/data-structures/stack/stack.ts +0 -98
  189. package/src/data-structures/trie/index.ts +0 -1
  190. package/src/data-structures/trie/trie.ts +0 -225
  191. package/src/data-structures/types/abstract-graph.ts +0 -51
  192. package/src/data-structures/types/avl-tree.ts +0 -6
  193. package/src/data-structures/types/binary-tree.ts +0 -15
  194. package/src/data-structures/types/bst.ts +0 -5
  195. package/src/data-structures/types/directed-graph.ts +0 -18
  196. package/src/data-structures/types/doubly-linked-list.ts +0 -1
  197. package/src/data-structures/types/heap.ts +0 -8
  198. package/src/data-structures/types/index.ts +0 -13
  199. package/src/data-structures/types/navigator.ts +0 -13
  200. package/src/data-structures/types/priority-queue.ts +0 -9
  201. package/src/data-structures/types/segment-tree.ts +0 -1
  202. package/src/data-structures/types/singly-linked-list.ts +0 -1
  203. package/src/data-structures/types/tree-multiset.ts +0 -3
  204. package/src/index.ts +0 -1
  205. package/src/utils/index.ts +0 -2
  206. package/src/utils/types/index.ts +0 -1
  207. package/src/utils/types/utils.ts +0 -4
  208. package/src/utils/utils.ts +0 -78
  209. package/tests/unit/data-structures/graph/abstract-graph.ts +0 -0
  210. package/tests/unit/data-structures/graph/directed-graph.test.ts +0 -492
  211. package/tests/unit/data-structures/graph/index.ts +0 -3
  212. package/tests/unit/data-structures/graph/undirected-graph.ts +0 -0
@@ -1,78 +0,0 @@
1
- export const uuidV4 = function () {
2
- return 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'.replace(/[x]/g, function (c) {
3
- const r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
4
- return v.toString(16);
5
- });
6
- };
7
-
8
- export const arrayRemove = function <T>(array: T[], predicate: (item: T, index: number, array: T[]) => boolean): T[] {
9
- let i = -1, len = array ? array.length : 0;
10
- const result = [];
11
-
12
- while (++i < len) {
13
- const value = array[i];
14
- if (predicate(value, i, array)) {
15
- result.push(value);
16
- Array.prototype.splice.call(array, i--, 1);
17
- len--;
18
- }
19
- }
20
-
21
- return result;
22
- };
23
-
24
-
25
- /**
26
- * data-structure-typed
27
- *
28
- * @author Tyler Zeng
29
- * @copyright Copyright (c) 2022 Tyler Zeng <zrwusa@gmail.com>
30
- * @license MIT License
31
- */
32
- import type {Thunk, ToThunkFn, TrlAsyncFn, TrlFn} from './types';
33
-
34
- export const THUNK_SYMBOL = Symbol('thunk')
35
-
36
- export const isThunk = (fnOrValue: any) => {
37
- return typeof fnOrValue === 'function' && fnOrValue.__THUNK__ === THUNK_SYMBOL
38
- }
39
-
40
- export const toThunk = (fn: ToThunkFn): Thunk => {
41
- const thunk = () => fn()
42
- thunk.__THUNK__ = THUNK_SYMBOL
43
- return thunk
44
- }
45
-
46
- export const trampoline = (fn: TrlFn) => {
47
- const cont = (...args: [...Parameters<TrlFn>]) => toThunk(() => fn(...args))
48
-
49
- return Object.assign(
50
- (...args: [...Parameters<TrlFn>]) => {
51
- let result = fn(...args)
52
-
53
- while (isThunk(result) && typeof result === 'function') {
54
- result = result()
55
- }
56
-
57
- return result
58
- },
59
- {cont}
60
- )
61
- }
62
-
63
- export const trampolineAsync = (fn: TrlAsyncFn) => {
64
- const cont = (...args: [...Parameters<TrlAsyncFn>]) => toThunk(() => fn(...args))
65
-
66
- return Object.assign(
67
- async (...args: [...Parameters<TrlAsyncFn>]) => {
68
- let result = await fn(...args)
69
-
70
- while (isThunk(result) && typeof result === 'function') {
71
- result = await result()
72
- }
73
-
74
- return result
75
- },
76
- {cont}
77
- )
78
- }
@@ -1,492 +0,0 @@
1
- import {DirectedEdge, DirectedGraph, DirectedVertex, VertexId} from '../../../../src';
2
-
3
- describe('DirectedGraph Test1', () => {
4
- let graph: DirectedGraph<DirectedVertex, DirectedEdge>;
5
-
6
- beforeEach(() => {
7
- graph = new DirectedGraph();
8
- });
9
-
10
-
11
- it('should add vertices', () => {
12
- const vertex1 = new DirectedVertex('A');
13
- const vertex2 = new DirectedVertex('B');
14
-
15
- graph.addVertex(vertex1);
16
- graph.addVertex(vertex2);
17
-
18
- expect(graph.hasVertex(vertex1)).toBe(true);
19
- expect(graph.hasVertex(vertex2)).toBe(true);
20
- });
21
-
22
- it('should add edges', () => {
23
- const vertex1 = new DirectedVertex('A');
24
- const vertex2 = new DirectedVertex('B');
25
- const edge = new DirectedEdge('A', 'B');
26
-
27
- graph.addVertex(vertex1);
28
- graph.addVertex(vertex2);
29
- graph.addEdge(edge);
30
-
31
- expect(graph.hasEdge('A', 'B')).toBe(true);
32
- expect(graph.hasEdge('B', 'A')).toBe(false);
33
- });
34
-
35
- it('should remove edges', () => {
36
- const vertex1 = new DirectedVertex('A');
37
- const vertex2 = new DirectedVertex('B');
38
- const edge = new DirectedEdge('A', 'B');
39
-
40
- graph.addVertex(vertex1);
41
- graph.addVertex(vertex2);
42
- graph.addEdge(edge);
43
-
44
- expect(graph.removeEdge(edge)).toBe(edge);
45
- expect(graph.hasEdge('A', 'B')).toBe(false);
46
- });
47
-
48
- it('should perform topological sort', () => {
49
- const vertexA = new DirectedVertex('A');
50
- const vertexB = new DirectedVertex('B');
51
- const vertexC = new DirectedVertex('C');
52
- const edgeAB = new DirectedEdge('A', 'B');
53
- const edgeBC = new DirectedEdge('B', 'C');
54
-
55
- graph.addVertex(vertexA);
56
- graph.addVertex(vertexB);
57
- graph.addVertex(vertexC);
58
- graph.addEdge(edgeAB);
59
- graph.addEdge(edgeBC);
60
-
61
- const topologicalOrder = graph.topologicalSort();
62
- if (topologicalOrder) expect(topologicalOrder.map(v => v.id)).toEqual(['A', 'B', 'C']);
63
- });
64
- });
65
-
66
-
67
- class MyVertex extends DirectedVertex {
68
- private _data: string;
69
- get data(): string {
70
- return this._data;
71
- }
72
- set data(value: string) {
73
- this._data = value;
74
- }
75
-
76
- constructor(id: VertexId, data: string) {
77
- super(id);
78
- this._data = data;
79
- }
80
- }
81
-
82
- class MyEdge extends DirectedEdge {
83
- private _data: string;
84
- get data(): string {
85
- return this._data;
86
- }
87
- set data(value: string) {
88
- this._data = value;
89
- }
90
-
91
- constructor(v1: VertexId, v2: VertexId, weight: number, data: string) {
92
- super(v1, v2, weight);
93
- this._data = data;
94
- }
95
- }
96
-
97
-
98
- describe('DirectedGraph Test2 operations', () => {
99
- const myGraph = new DirectedGraph<MyVertex, MyEdge>();
100
-
101
- test('Add vertices', () => {
102
- myGraph.addVertex(new MyVertex(1, 'data1'));
103
- myGraph.addVertex(new MyVertex(2, 'data2'));
104
- myGraph.addVertex(new MyVertex(3, 'data3'));
105
- myGraph.addVertex(new MyVertex(4, 'data4'));
106
- myGraph.addVertex(new MyVertex(5, 'data5'));
107
- myGraph.addVertex(new MyVertex(6, 'data6'));
108
- myGraph.addVertex(new MyVertex(7, 'data7'));
109
- myGraph.addVertex(new MyVertex(8, 'data8'));
110
- myGraph.addVertex(new MyVertex(9, 'data9'));
111
-
112
- });
113
-
114
- test('Add edges', () => {
115
- myGraph.addVertex(new MyVertex(1, 'data1'));
116
- myGraph.addVertex(new MyVertex(2, 'data2'));
117
- myGraph.addEdge(new MyEdge(1, 2, 10, 'edge-data1-2'));
118
- myGraph.addEdge(new MyEdge(2, 1, 20, 'edge-data2-1'));
119
-
120
- expect(myGraph.edgeSet().length).toBe(2);
121
- // TODO
122
- expect(myGraph.getEdge(1, 2)).toBeInstanceOf(MyEdge);
123
- expect(myGraph.getEdge(2, 1)).toBeInstanceOf(MyEdge);
124
- });
125
-
126
- test('Get edge', () => {
127
-
128
- const edge1 = myGraph.getEdge(1, 2);
129
- const edge2 = myGraph.getEdge(myGraph.getVertex(1), myGraph.getVertex(2));
130
- const edge3 = myGraph.getEdge(1, '100');
131
-
132
- expect(edge1).toBeInstanceOf(MyEdge);
133
- edge1 && expect(edge1.src).toBe(1);
134
- expect(edge1).toEqual(edge2);
135
- expect(edge3).toBeNull();
136
- });
137
-
138
- test('Edge set and vertex set', () => {
139
- const edges = myGraph.edgeSet();
140
- const vertices = myGraph.vertexSet();
141
-
142
- });
143
-
144
- test('Remove edge between vertices', () => {
145
- myGraph.addVertex(new MyVertex(1, 'data1'));
146
- myGraph.addVertex(new MyVertex(2, 'data2'));
147
- myGraph.addEdge(new MyEdge(1, 2, 10, 'edge-data1-2'));
148
-
149
- const removedEdge = myGraph.removeEdgeBetween(1, 2);
150
- const edgeAfterRemoval = myGraph.getEdge(1, 2);
151
-
152
- expect(removedEdge).toBeInstanceOf(MyEdge);
153
- if (removedEdge) {
154
- removedEdge && expect(removedEdge.data).toBe('edge-data1-2');
155
- removedEdge && expect(removedEdge.src).toBe(1)
156
- }
157
- expect(edgeAfterRemoval).toBeNull();
158
- });
159
-
160
- test('Topological sort', () => {
161
-
162
- const sorted = myGraph.topologicalSort();
163
-
164
- expect(sorted).toBeInstanceOf(Array);
165
- if (sorted && sorted.length > 0) {
166
- expect(sorted.length).toBe(9);
167
- expect(sorted[0].data).toBe('data9');
168
- expect(sorted[3].data).toBe('data6');
169
- expect(sorted[8].id).toBe(1);
170
- }
171
-
172
- });
173
-
174
- test('Minimum path between vertices', () => {
175
- myGraph.addVertex(new MyVertex(1, 'data1'));
176
- myGraph.addVertex(new MyVertex(2, 'data2'));
177
- myGraph.addEdge(new MyEdge(1, 2, 10, 'edge-data1-2'));
178
-
179
- const minPath = myGraph.getMinPathBetween(1, 2);
180
- });
181
-
182
- test('All paths between vertices', () => {
183
- // Add vertices and edges as needed for this test
184
- myGraph.addVertex(new MyVertex(1, 'data1'));
185
- myGraph.addVertex(new MyVertex(2, 'data2'));
186
- myGraph.addEdge(new MyEdge(1, 2, 10, 'edge-data1-2'));
187
-
188
- const allPaths = myGraph.getAllPathsBetween(1, 2);
189
-
190
- // Add expect statements here to verify the allPaths
191
- });
192
- });
193
-
194
-
195
- describe('DirectedGraph Test3', () => {
196
- const myGraph = new DirectedGraph<MyVertex, MyEdge>();
197
-
198
- it('should test graph operations', () => {
199
- const vertex1 = new MyVertex(1, 'data1');
200
- const vertex2 = new MyVertex(2, 'data2');
201
- const vertex3 = new MyVertex(3, 'data3');
202
- const vertex4 = new MyVertex(4, 'data4');
203
- const vertex5 = new MyVertex(5, 'data5');
204
- const vertex6 = new MyVertex(6, 'data6');
205
- const vertex7 = new MyVertex(7, 'data7');
206
- const vertex8 = new MyVertex(8, 'data8');
207
- const vertex9 = new MyVertex(9, 'data9');
208
- myGraph.addVertex(vertex1);
209
- myGraph.addVertex(vertex2);
210
- myGraph.addVertex(vertex3);
211
- myGraph.addVertex(vertex4);
212
- myGraph.addVertex(vertex5);
213
- myGraph.addVertex(vertex6);
214
- myGraph.addVertex(vertex7);
215
- myGraph.addVertex(vertex8);
216
- myGraph.addVertex(vertex9);
217
-
218
- myGraph.addEdge(new MyEdge(1, 2, 10, 'edge-data1-2'));
219
- myGraph.addEdge(new MyEdge(2, 1, 20, 'edge-data2-1'));
220
-
221
- expect(myGraph.getEdge(1, 2)).toBeTruthy();
222
- expect(myGraph.getEdge(2, 1)).toBeTruthy();
223
- expect(myGraph.getEdge(1, '100')).toBeFalsy();
224
-
225
- myGraph.removeEdgeBetween(1, 2);
226
- expect(myGraph.getEdge(1, 2)).toBeFalsy();
227
-
228
- myGraph.addEdge(new MyEdge(3, 1, 3, 'edge-data-3-1'));
229
-
230
- myGraph.addEdge(new MyEdge(1, 9, 19, 'edge-data1-9'));
231
- myGraph.addEdge(new MyEdge(9, 7, 97, 'edge-data9-7'));
232
-
233
- myGraph.addEdge(new MyEdge(7, 9, 79, 'edge-data7-9'));
234
-
235
- myGraph.addEdge(new MyEdge(1, 4, 14, 'edge-data1-4'));
236
-
237
- myGraph.addEdge(new MyEdge(4, 7, 47, 'edge-data4-7'));
238
-
239
- myGraph.addEdge(new MyEdge(1, 2, 12, 'edge-data1-2'));
240
-
241
- myGraph.addEdge(new MyEdge(2, 3, 23, 'edge-data2-3'));
242
-
243
- myGraph.addEdge(new MyEdge(3, 5, 35, 'edge-data3-5'));
244
-
245
- myGraph.addEdge(new MyEdge(5, 7, 57, 'edge-data5-7'));
246
-
247
- myGraph.addEdge(new MyEdge(7, 3, 73, 'edge-data7-3'));
248
- const topologicalSorted = myGraph.topologicalSort();
249
- expect(topologicalSorted).toBeNull();
250
-
251
- const minPath1to7 = myGraph.getMinPathBetween(1, 7);
252
-
253
- expect(minPath1to7).toBeInstanceOf(Array);
254
- if (minPath1to7 && minPath1to7.length > 0) {
255
- expect(minPath1to7).toHaveLength(3);
256
- expect(minPath1to7[0]).toBeInstanceOf(MyVertex);
257
- expect(minPath1to7[0].id).toBe(1);
258
- expect(minPath1to7[1].id).toBe(9);
259
- expect(minPath1to7[2].id).toBe(7);
260
- }
261
-
262
- const fordResult1 = myGraph.bellmanFord(1);
263
- expect(fordResult1).toBeTruthy();
264
- expect(fordResult1.hasNegativeCycle).toBeUndefined();
265
- const {distMap, preMap, paths, min, minPath} = fordResult1;
266
- expect(distMap).toBeInstanceOf(Map);
267
- expect(distMap.size).toBe(9);
268
- expect(distMap.get(vertex1)).toBe(0);
269
- expect(distMap.get(vertex2)).toBe(12);
270
- expect(distMap.get(vertex3)).toBe(35);
271
- expect(distMap.get(vertex4)).toBe(14);
272
- expect(distMap.get(vertex5)).toBe(70);
273
- expect(distMap.get(vertex6)).toBe(Infinity);
274
- expect(distMap.get(vertex7)).toBe(61);
275
- expect(distMap.get(vertex8)).toBe(Infinity);
276
- expect(distMap.get(vertex9)).toBe(19);
277
-
278
- expect(preMap).toBeInstanceOf(Map);
279
- expect(preMap.size).toBe(0);
280
-
281
- expect(paths).toBeInstanceOf(Array);
282
- expect(paths.length).toBe(0);
283
- expect(min).toBe(Infinity);
284
- expect(minPath).toBeInstanceOf(Array);
285
-
286
-
287
- const floydResult = myGraph.floyd();
288
- expect(floydResult).toBeTruthy();
289
- if (floydResult) {
290
- const {costs, predecessor} = floydResult;
291
- expect(costs).toBeInstanceOf(Array);
292
- expect(costs.length).toBe(9);
293
- expect(costs[0]).toEqual([32, 12, 35, 14, 70, Infinity, 61, Infinity, 19]);
294
- expect(costs[1]).toEqual([20, 32, 23, 34, 58, Infinity, 81, Infinity, 39]);
295
- expect(costs[2]).toEqual([3, 15, 38, 17, 35, Infinity, 64, Infinity, 22]);
296
- expect(costs[3]).toEqual([123, 135, 120, 137, 155, Infinity, 47, Infinity, 126]);
297
- expect(costs[4]).toEqual([133, 145, 130, 147, 165, Infinity, 57, Infinity, 136]);
298
- expect(costs[5]).toEqual([Infinity, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity]);
299
- expect(costs[6]).toEqual([76, 88, 73, 90, 108, Infinity, 137, Infinity, 79]);
300
- expect(costs[7]).toEqual([Infinity, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity, Infinity]);
301
- expect(costs[8]).toEqual([173, 185, 170, 187, 205, Infinity, 97, Infinity, 176]);
302
-
303
- expect(predecessor).toBeInstanceOf(Array);
304
- expect(predecessor.length).toBe(9);
305
- expect(predecessor[0]).toEqual([vertex2, null, vertex2, null, vertex3, null, vertex4, null, null]);
306
- expect(predecessor[1]).toEqual([null, vertex1, null, vertex1, vertex3, null, vertex4, null, vertex1]);
307
- expect(predecessor[5]).toEqual([null, null, null, null, null, null, null, null, null]);
308
- expect(predecessor[7]).toEqual([null, null, null, null, null, null, null, null, null]);
309
- expect(predecessor[8]).toEqual([vertex7, vertex7, vertex7, vertex7, vertex7, null, null, null, vertex7]);
310
- }
311
-
312
- const dijkstraRes12tt = myGraph.dijkstra(1, 2, true, true);
313
-
314
- expect(dijkstraRes12tt).toBeTruthy();
315
- if (dijkstraRes12tt) {
316
- const {distMap, minDist, minPath, paths, preMap, seen} = dijkstraRes12tt;
317
- expect(distMap).toBeInstanceOf(Map);
318
- expect(distMap.size).toBe(9);
319
- expect(distMap.get(vertex1)).toBe(0);
320
- expect(distMap.get(vertex2)).toBe(12);
321
- expect(distMap.get(vertex3)).toBe(Infinity);
322
- expect(distMap.get(vertex4)).toBe(14);
323
- expect(distMap.get(vertex5)).toBe(Infinity);
324
- expect(distMap.get(vertex6)).toBe(Infinity);
325
- expect(distMap.get(vertex7)).toBe(Infinity);
326
- expect(distMap.get(vertex8)).toBe(Infinity);
327
- expect(distMap.get(vertex9)).toBe(19);
328
-
329
- expect(minDist).toBe(12);
330
- expect(minPath).toBeInstanceOf(Array);
331
- expect(minPath.length).toBe(2);
332
- expect(minPath[0]).toBe(vertex1);
333
- expect(minPath[1]).toBe(vertex2);
334
-
335
- expect(paths).toBeInstanceOf(Array);
336
- expect(paths.length).toBe(9);
337
- expect(paths[0]).toBeInstanceOf(Array);
338
- expect(paths[0][0]).toBe(vertex1);
339
-
340
- expect(paths[1]).toBeInstanceOf(Array);
341
- expect(paths[1][0]).toBe(vertex1);
342
- expect(paths[1][1]).toBe(vertex2);
343
-
344
- expect(paths[2]).toBeInstanceOf(Array);
345
- expect(paths[2][0]).toBe(vertex3);
346
- expect(paths[3]).toBeInstanceOf(Array);
347
- expect(paths[3][0]).toBe(vertex1);
348
- expect(paths[3][1]).toBe(vertex4);
349
- expect(paths[4]).toBeInstanceOf(Array);
350
- expect(paths[4][0]).toBe(vertex5);
351
-
352
- expect(paths[5]).toBeInstanceOf(Array);
353
- expect(paths[5][0]).toBe(vertex6);
354
- expect(paths[6]).toBeInstanceOf(Array);
355
- expect(paths[6][0]).toBe(vertex7);
356
- expect(paths[7]).toBeInstanceOf(Array);
357
- expect(paths[7][0]).toBe(vertex8);
358
- expect(paths[8]).toBeInstanceOf(Array);
359
- expect(paths[8][0]).toBe(vertex1);
360
- expect(paths[8][1]).toBe(vertex9);
361
-
362
- }
363
-
364
- const dijkstraRes1ntt = myGraph.dijkstra(1, null, true, true);
365
-
366
- expect(dijkstraRes1ntt).toBeTruthy();
367
- if (dijkstraRes1ntt) {
368
- const {distMap, minDist, minPath, paths, preMap, seen} = dijkstraRes1ntt;
369
- expect(distMap).toBeInstanceOf(Map);
370
- expect(distMap.size).toBe(9);
371
- expect(distMap.get(vertex1)).toBe(0);
372
- expect(distMap.get(vertex2)).toBe(12);
373
- expect(distMap.get(vertex3)).toBe(35);
374
- expect(distMap.get(vertex4)).toBe(14);
375
- expect(distMap.get(vertex5)).toBe(70);
376
- expect(distMap.get(vertex6)).toBe(Infinity);
377
- expect(distMap.get(vertex7)).toBe(61);
378
- expect(distMap.get(vertex8)).toBe(Infinity);
379
- expect(distMap.get(vertex9)).toBe(19);
380
-
381
- expect(minDist).toBe(12);
382
- expect(minPath).toBeInstanceOf(Array);
383
- expect(minPath.length).toBe(2);
384
- expect(minPath[0]).toBe(vertex1);
385
- expect(minPath[1]).toBe(vertex2);
386
-
387
- expect(paths).toBeInstanceOf(Array);
388
- expect(paths.length).toBe(9);
389
- expect(paths[0]).toBeInstanceOf(Array);
390
- expect(paths[0][0]).toBe(vertex1);
391
-
392
- expect(paths[1]).toBeInstanceOf(Array);
393
- expect(paths[1][0]).toBe(vertex1);
394
- expect(paths[1][1]).toBe(vertex2);
395
-
396
- expect(paths[2]).toBeInstanceOf(Array);
397
- expect(paths[2][0]).toBe(vertex1);
398
- expect(paths[2][1]).toBe(vertex2);
399
- expect(paths[2][2]).toBe(vertex3);
400
-
401
- expect(paths[3]).toBeInstanceOf(Array);
402
- expect(paths[3][0]).toBe(vertex1);
403
- expect(paths[3][1]).toBe(vertex4);
404
-
405
- expect(paths[4]).toBeInstanceOf(Array);
406
- expect(paths[4][0]).toBe(vertex1);
407
- expect(paths[4][1]).toBe(vertex2);
408
- expect(paths[4][2]).toBe(vertex3);
409
- expect(paths[4][3]).toBe(vertex5);
410
-
411
- expect(paths[5]).toBeInstanceOf(Array);
412
- expect(paths[5][0]).toBe(vertex6);
413
-
414
- expect(paths[6]).toBeInstanceOf(Array);
415
- expect(paths[6][0]).toBe(vertex1);
416
- expect(paths[6][1]).toBe(vertex4);
417
- expect(paths[6][2]).toBe(vertex7);
418
-
419
- expect(paths[7]).toBeInstanceOf(Array);
420
- expect(paths[7][0]).toBe(vertex8);
421
-
422
- expect(paths[8]).toBeInstanceOf(Array);
423
- expect(paths[8][0]).toBe(vertex1);
424
- expect(paths[8][1]).toBe(vertex9);
425
-
426
- }
427
-
428
- const dijkstraWithoutHeapRes1ntt = myGraph.dijkstraWithoutHeap(1, null, true, true);
429
- expect(dijkstraWithoutHeapRes1ntt).toBeTruthy();
430
- if (dijkstraWithoutHeapRes1ntt) {
431
- const {distMap, minDist, minPath, paths, preMap, seen} = dijkstraWithoutHeapRes1ntt;
432
- expect(distMap).toBeInstanceOf(Map);
433
- expect(distMap.size).toBe(9);
434
- expect(distMap.get(vertex1)).toBe(0);
435
- expect(distMap.get(vertex2)).toBe(12);
436
- expect(distMap.get(vertex3)).toBe(35);
437
- expect(distMap.get(vertex4)).toBe(14);
438
- expect(distMap.get(vertex5)).toBe(70);
439
- expect(distMap.get(vertex6)).toBe(Infinity);
440
- expect(distMap.get(vertex7)).toBe(61);
441
- expect(distMap.get(vertex8)).toBe(Infinity);
442
- expect(distMap.get(vertex9)).toBe(19);
443
-
444
- expect(minDist).toBe(12);
445
- expect(minPath).toBeInstanceOf(Array);
446
- expect(minPath.length).toBe(2);
447
- expect(minPath[0]).toBe(vertex1);
448
- expect(minPath[1]).toBe(vertex2);
449
-
450
- expect(paths).toBeInstanceOf(Array);
451
- expect(paths.length).toBe(9);
452
- expect(paths[0]).toBeInstanceOf(Array);
453
- expect(paths[0][0]).toBe(vertex1);
454
-
455
- expect(paths[1]).toBeInstanceOf(Array);
456
- expect(paths[1][0]).toBe(vertex1);
457
- expect(paths[1][1]).toBe(vertex2);
458
-
459
- expect(paths[2]).toBeInstanceOf(Array);
460
- expect(paths[2][0]).toBe(vertex1);
461
- expect(paths[2][1]).toBe(vertex2);
462
- expect(paths[2][2]).toBe(vertex3);
463
-
464
- expect(paths[3]).toBeInstanceOf(Array);
465
- expect(paths[3][0]).toBe(vertex1);
466
- expect(paths[3][1]).toBe(vertex4);
467
-
468
- expect(paths[4]).toBeInstanceOf(Array);
469
- expect(paths[4][0]).toBe(vertex1);
470
- expect(paths[4][1]).toBe(vertex2);
471
- expect(paths[4][2]).toBe(vertex3);
472
- expect(paths[4][3]).toBe(vertex5);
473
-
474
- expect(paths[5]).toBeInstanceOf(Array);
475
- expect(paths[5][0]).toBe(vertex6);
476
-
477
- expect(paths[6]).toBeInstanceOf(Array);
478
- expect(paths[6][0]).toBe(vertex1);
479
- expect(paths[6][1]).toBe(vertex4);
480
- expect(paths[6][2]).toBe(vertex7);
481
-
482
- expect(paths[7]).toBeInstanceOf(Array);
483
- expect(paths[7][0]).toBe(vertex8);
484
-
485
- expect(paths[8]).toBeInstanceOf(Array);
486
- expect(paths[8][0]).toBe(vertex1);
487
- expect(paths[8][1]).toBe(vertex9);
488
-
489
- }
490
- });
491
- });
492
-
@@ -1,3 +0,0 @@
1
- export * from './abstract-graph';
2
- export * from './directed-graph.test';
3
- export * from './undirected-graph';