data-structure-typed 1.50.1 → 1.50.2

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 (155) hide show
  1. package/CHANGELOG.md +2 -1
  2. package/README.md +26 -26
  3. package/benchmark/report.html +13 -13
  4. package/benchmark/report.json +153 -159
  5. package/dist/cjs/data-structures/base/iterable-base.d.ts +114 -9
  6. package/dist/cjs/data-structures/base/iterable-base.js +143 -7
  7. package/dist/cjs/data-structures/base/iterable-base.js.map +1 -1
  8. package/dist/cjs/data-structures/binary-tree/avl-tree.d.ts +43 -46
  9. package/dist/cjs/data-structures/binary-tree/avl-tree.js +68 -71
  10. package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
  11. package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +244 -199
  12. package/dist/cjs/data-structures/binary-tree/binary-tree.js +484 -376
  13. package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
  14. package/dist/cjs/data-structures/binary-tree/bst.d.ts +54 -74
  15. package/dist/cjs/data-structures/binary-tree/bst.js +30 -71
  16. package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
  17. package/dist/cjs/data-structures/binary-tree/rb-tree.d.ts +78 -60
  18. package/dist/cjs/data-structures/binary-tree/rb-tree.js +84 -89
  19. package/dist/cjs/data-structures/binary-tree/rb-tree.js.map +1 -1
  20. package/dist/cjs/data-structures/binary-tree/tree-multimap.d.ts +37 -56
  21. package/dist/cjs/data-structures/binary-tree/tree-multimap.js +64 -85
  22. package/dist/cjs/data-structures/binary-tree/tree-multimap.js.map +1 -1
  23. package/dist/cjs/data-structures/graph/abstract-graph.d.ts +1 -0
  24. package/dist/cjs/data-structures/graph/abstract-graph.js +3 -0
  25. package/dist/cjs/data-structures/graph/abstract-graph.js.map +1 -1
  26. package/dist/cjs/data-structures/graph/directed-graph.d.ts +14 -0
  27. package/dist/cjs/data-structures/graph/directed-graph.js +26 -0
  28. package/dist/cjs/data-structures/graph/directed-graph.js.map +1 -1
  29. package/dist/cjs/data-structures/graph/map-graph.d.ts +8 -0
  30. package/dist/cjs/data-structures/graph/map-graph.js +14 -0
  31. package/dist/cjs/data-structures/graph/map-graph.js.map +1 -1
  32. package/dist/cjs/data-structures/graph/undirected-graph.d.ts +16 -0
  33. package/dist/cjs/data-structures/graph/undirected-graph.js +25 -0
  34. package/dist/cjs/data-structures/graph/undirected-graph.js.map +1 -1
  35. package/dist/cjs/data-structures/hash/hash-map.d.ts +121 -15
  36. package/dist/cjs/data-structures/hash/hash-map.js +160 -25
  37. package/dist/cjs/data-structures/hash/hash-map.js.map +1 -1
  38. package/dist/cjs/data-structures/heap/heap.d.ts +66 -6
  39. package/dist/cjs/data-structures/heap/heap.js +66 -6
  40. package/dist/cjs/data-structures/heap/heap.js.map +1 -1
  41. package/dist/cjs/data-structures/linked-list/doubly-linked-list.d.ts +67 -50
  42. package/dist/cjs/data-structures/linked-list/doubly-linked-list.js +70 -64
  43. package/dist/cjs/data-structures/linked-list/doubly-linked-list.js.map +1 -1
  44. package/dist/cjs/data-structures/linked-list/singly-linked-list.d.ts +128 -103
  45. package/dist/cjs/data-structures/linked-list/singly-linked-list.js +130 -112
  46. package/dist/cjs/data-structures/linked-list/singly-linked-list.js.map +1 -1
  47. package/dist/cjs/data-structures/linked-list/skip-linked-list.d.ts +63 -36
  48. package/dist/cjs/data-structures/linked-list/skip-linked-list.js +63 -36
  49. package/dist/cjs/data-structures/linked-list/skip-linked-list.js.map +1 -1
  50. package/dist/cjs/data-structures/matrix/matrix.d.ts +35 -4
  51. package/dist/cjs/data-structures/matrix/matrix.js +50 -11
  52. package/dist/cjs/data-structures/matrix/matrix.js.map +1 -1
  53. package/dist/cjs/data-structures/queue/deque.d.ts +49 -19
  54. package/dist/cjs/data-structures/queue/deque.js +101 -47
  55. package/dist/cjs/data-structures/queue/deque.js.map +1 -1
  56. package/dist/cjs/data-structures/queue/queue.d.ts +39 -5
  57. package/dist/cjs/data-structures/queue/queue.js +47 -5
  58. package/dist/cjs/data-structures/queue/queue.js.map +1 -1
  59. package/dist/cjs/data-structures/stack/stack.d.ts +16 -0
  60. package/dist/cjs/data-structures/stack/stack.js +22 -0
  61. package/dist/cjs/data-structures/stack/stack.js.map +1 -1
  62. package/dist/cjs/data-structures/trie/trie.d.ts +38 -1
  63. package/dist/cjs/data-structures/trie/trie.js +41 -0
  64. package/dist/cjs/data-structures/trie/trie.js.map +1 -1
  65. package/dist/cjs/types/data-structures/binary-tree/binary-tree.d.ts +1 -1
  66. package/dist/cjs/types/data-structures/hash/hash-map.d.ts +4 -3
  67. package/dist/cjs/types/utils/utils.d.ts +1 -0
  68. package/dist/mjs/data-structures/base/iterable-base.d.ts +114 -9
  69. package/dist/mjs/data-structures/base/iterable-base.js +143 -7
  70. package/dist/mjs/data-structures/binary-tree/avl-tree.d.ts +43 -46
  71. package/dist/mjs/data-structures/binary-tree/avl-tree.js +68 -71
  72. package/dist/mjs/data-structures/binary-tree/binary-tree.d.ts +244 -199
  73. package/dist/mjs/data-structures/binary-tree/binary-tree.js +483 -375
  74. package/dist/mjs/data-structures/binary-tree/bst.d.ts +54 -74
  75. package/dist/mjs/data-structures/binary-tree/bst.js +30 -71
  76. package/dist/mjs/data-structures/binary-tree/rb-tree.d.ts +78 -60
  77. package/dist/mjs/data-structures/binary-tree/rb-tree.js +84 -89
  78. package/dist/mjs/data-structures/binary-tree/tree-multimap.d.ts +37 -56
  79. package/dist/mjs/data-structures/binary-tree/tree-multimap.js +64 -85
  80. package/dist/mjs/data-structures/graph/abstract-graph.d.ts +1 -0
  81. package/dist/mjs/data-structures/graph/abstract-graph.js +3 -0
  82. package/dist/mjs/data-structures/graph/directed-graph.d.ts +14 -0
  83. package/dist/mjs/data-structures/graph/directed-graph.js +26 -0
  84. package/dist/mjs/data-structures/graph/map-graph.d.ts +8 -0
  85. package/dist/mjs/data-structures/graph/map-graph.js +14 -0
  86. package/dist/mjs/data-structures/graph/undirected-graph.d.ts +16 -0
  87. package/dist/mjs/data-structures/graph/undirected-graph.js +25 -0
  88. package/dist/mjs/data-structures/hash/hash-map.d.ts +121 -15
  89. package/dist/mjs/data-structures/hash/hash-map.js +160 -25
  90. package/dist/mjs/data-structures/heap/heap.d.ts +66 -6
  91. package/dist/mjs/data-structures/heap/heap.js +66 -6
  92. package/dist/mjs/data-structures/linked-list/doubly-linked-list.d.ts +67 -50
  93. package/dist/mjs/data-structures/linked-list/doubly-linked-list.js +70 -64
  94. package/dist/mjs/data-structures/linked-list/singly-linked-list.d.ts +128 -103
  95. package/dist/mjs/data-structures/linked-list/singly-linked-list.js +130 -112
  96. package/dist/mjs/data-structures/linked-list/skip-linked-list.d.ts +63 -36
  97. package/dist/mjs/data-structures/linked-list/skip-linked-list.js +63 -36
  98. package/dist/mjs/data-structures/matrix/matrix.d.ts +35 -4
  99. package/dist/mjs/data-structures/matrix/matrix.js +50 -11
  100. package/dist/mjs/data-structures/queue/deque.d.ts +49 -19
  101. package/dist/mjs/data-structures/queue/deque.js +101 -47
  102. package/dist/mjs/data-structures/queue/queue.d.ts +39 -5
  103. package/dist/mjs/data-structures/queue/queue.js +47 -5
  104. package/dist/mjs/data-structures/stack/stack.d.ts +16 -0
  105. package/dist/mjs/data-structures/stack/stack.js +22 -0
  106. package/dist/mjs/data-structures/trie/trie.d.ts +38 -1
  107. package/dist/mjs/data-structures/trie/trie.js +41 -0
  108. package/dist/mjs/types/data-structures/binary-tree/binary-tree.d.ts +1 -1
  109. package/dist/mjs/types/data-structures/hash/hash-map.d.ts +4 -3
  110. package/dist/mjs/types/utils/utils.d.ts +1 -0
  111. package/dist/umd/data-structure-typed.js +1730 -1042
  112. package/dist/umd/data-structure-typed.min.js +3 -3
  113. package/dist/umd/data-structure-typed.min.js.map +1 -1
  114. package/package.json +8 -3
  115. package/src/data-structures/base/iterable-base.ts +172 -19
  116. package/src/data-structures/binary-tree/avl-tree.ts +97 -97
  117. package/src/data-structures/binary-tree/binary-tree.ts +674 -671
  118. package/src/data-structures/binary-tree/bst.ts +89 -131
  119. package/src/data-structures/binary-tree/rb-tree.ts +127 -155
  120. package/src/data-structures/binary-tree/tree-multimap.ts +96 -112
  121. package/src/data-structures/graph/abstract-graph.ts +4 -0
  122. package/src/data-structures/graph/directed-graph.ts +30 -0
  123. package/src/data-structures/graph/map-graph.ts +15 -0
  124. package/src/data-structures/graph/undirected-graph.ts +28 -0
  125. package/src/data-structures/hash/hash-map.ts +175 -34
  126. package/src/data-structures/heap/heap.ts +66 -6
  127. package/src/data-structures/linked-list/doubly-linked-list.ts +72 -66
  128. package/src/data-structures/linked-list/singly-linked-list.ts +132 -114
  129. package/src/data-structures/linked-list/skip-linked-list.ts +63 -37
  130. package/src/data-structures/matrix/matrix.ts +52 -12
  131. package/src/data-structures/queue/deque.ts +108 -49
  132. package/src/data-structures/queue/queue.ts +51 -5
  133. package/src/data-structures/stack/stack.ts +24 -0
  134. package/src/data-structures/trie/trie.ts +45 -1
  135. package/src/types/data-structures/binary-tree/binary-tree.ts +1 -1
  136. package/src/types/data-structures/hash/hash-map.ts +4 -3
  137. package/src/types/utils/utils.ts +2 -0
  138. package/test/performance/data-structures/graph/directed-graph.test.ts +3 -3
  139. package/test/performance/data-structures/queue/deque.test.ts +26 -25
  140. package/test/unit/data-structures/binary-tree/avl-tree.test.ts +37 -0
  141. package/test/unit/data-structures/binary-tree/binary-tree.test.ts +46 -17
  142. package/test/unit/data-structures/binary-tree/bst.test.ts +65 -1
  143. package/test/unit/data-structures/binary-tree/rb-tree.test.ts +38 -1
  144. package/test/unit/data-structures/binary-tree/tree-multimap.test.ts +37 -32
  145. package/test/unit/data-structures/graph/abstract-graph.test.ts +8 -0
  146. package/test/unit/data-structures/graph/directed-graph.test.ts +249 -0
  147. package/test/unit/data-structures/hash/hash-map.test.ts +376 -353
  148. package/test/unit/data-structures/heap/heap.test.ts +18 -1
  149. package/test/unit/data-structures/linked-list/doubly-linked-list.test.ts +24 -5
  150. package/test/unit/data-structures/linked-list/singly-linked-list.test.ts +20 -2
  151. package/test/unit/data-structures/linked-list/skip-list.test.ts +1 -1
  152. package/test/unit/data-structures/queue/deque.test.ts +65 -5
  153. package/test/unit/data-structures/queue/queue.test.ts +22 -5
  154. package/test/unit/data-structures/stack/stack.test.ts +17 -0
  155. package/test/unit/data-structures/trie/trie.test.ts +17 -0
@@ -555,38 +555,6 @@ describe('TreeMultimap Performance test', function () {
555
555
  beforeEach(() => {
556
556
  treeMS.clear();
557
557
  });
558
- it(`Observe the time consumption of TreeMultimap.add fitting O(n log n)`, function () {
559
- // // Create a benchmark suite
560
- // const suite = new Benchmark.Suite();
561
- // // Define a function to generate a random array of a given size
562
- // function generateRandomArray(size: number): number[] {
563
- // const arr: number[] = [];
564
- // for (let i = 0; i < size; i++) {
565
- // arr.push(Math.floor(Math.random() * size));
566
- // }
567
- // return arr;
568
- // }
569
- // const inputArray = generateRandomArray(inputSize[0]);
570
- //
571
- // suite.add(`TreeMultimap addMany (n=${inputSize[0]})`, () => {
572
- // treeMS.addMany([...inputArray]);
573
- // });
574
- //
575
- // // Run the benchmarks
576
- // suite
577
- // .on('cycle', (event: any) => {
578
- // const benchmark = event.target;
579
- // const n = parseInt(benchmark.name.split('=')[1]);
580
- // const observedTime = benchmark.times.elapsed;
581
- // const expected = expectedTime(n);
582
- // console.log(`Input size (n): ${n}, Observed time: ${observedTime.toFixed(2)}ms, Expected time: ${expected.toFixed(2)}ms`);
583
- // })
584
- // .on('complete', () => {
585
- // console.log(`Benchmark (n=${inputSize[0]}) completed.`);
586
- // done(); // Call done to indicate the test is complete
587
- // })
588
- // .run({async: true});
589
- });
590
558
 
591
559
  it(`Observe the time consumption of TreeMultimap.dfs be good`, function () {
592
560
  const startDFS = performance.now();
@@ -604,6 +572,43 @@ describe('TreeMultimap Performance test', function () {
604
572
  treeMS.lesserOrGreaterTraverse(node => (node.count += 1), CP.lt, inputSize / 2);
605
573
  isDebug && console.log('---lesserOrGreaterTraverse', performance.now() - startL);
606
574
  });
575
+
576
+ it('should the clone method', () => {
577
+ function checkTreeStructure(treeMultimap: TreeMultimap<string, number>) {
578
+ expect(treeMultimap.size).toBe(4);
579
+ expect(treeMultimap.root?.key).toBe('2');
580
+ expect(treeMultimap.root?.left?.key).toBe('1');
581
+ expect(treeMultimap.root?.left?.left?.key).toBe(undefined);
582
+ expect(treeMultimap.root?.left?.right?.key).toBe(undefined);
583
+ expect(treeMultimap.root?.right?.key).toBe('4');
584
+ expect(treeMultimap.root?.right?.left?.key).toBe(undefined);
585
+ expect(treeMultimap.root?.right?.right?.key).toBe('5');
586
+ }
587
+
588
+ const treeMultimap = new TreeMultimap<string, number>();
589
+ treeMultimap.addMany([
590
+ ['2', 2],
591
+ ['4', 4],
592
+ ['5', 5],
593
+ ['3', 3],
594
+ ['1', 1]
595
+ ]);
596
+ expect(treeMultimap.size).toBe(5);
597
+ expect(treeMultimap.root?.key).toBe('2');
598
+ expect(treeMultimap.root?.left?.key).toBe('1');
599
+ expect(treeMultimap.root?.left?.left?.key).toBe(undefined);
600
+ expect(treeMultimap.root?.left?.right?.key).toBe(undefined);
601
+ expect(treeMultimap.root?.right?.key).toBe('4');
602
+ expect(treeMultimap.root?.right?.left?.key).toBe('3');
603
+ expect(treeMultimap.root?.right?.right?.key).toBe('5');
604
+ treeMultimap.delete('3');
605
+ checkTreeStructure(treeMultimap);
606
+ const cloned = treeMultimap.clone();
607
+ checkTreeStructure(cloned);
608
+ cloned.delete('1');
609
+ expect(treeMultimap.size).toBe(4);
610
+ expect(cloned.size).toBe(3);
611
+ });
607
612
  });
608
613
 
609
614
  describe('TreeMultimap iterative methods test', () => {
@@ -77,6 +77,14 @@ class MyGraph<
77
77
  return true;
78
78
  }
79
79
 
80
+ isEmpty(): boolean {
81
+ return true;
82
+ }
83
+
84
+ clone(): any {
85
+ return {};
86
+ }
87
+
80
88
  protected _addEdge(edge: EO): boolean {
81
89
  return edge ? true : true;
82
90
  }
@@ -810,3 +810,252 @@ describe('DirectedGraph getCycles', () => {
810
810
  ]);
811
811
  });
812
812
  });
813
+
814
+ // describe('DirectedGraph tarjan', () => {
815
+ // test('should simple cycles graph tarjan cycles return correct result', () => {
816
+ // const graph = new DirectedGraph();
817
+ //
818
+ // graph.addVertex('A');
819
+ // graph.addVertex('B');
820
+ // graph.addVertex('C');
821
+ // graph.addVertex('D');
822
+ //
823
+ // graph.addEdge('A', 'B');
824
+ // graph.addEdge('B', 'C');
825
+ // graph.addEdge('C', 'A');
826
+ // graph.addEdge('A', 'D');
827
+ // graph.addEdge('D', 'C');
828
+ // const cycles = graph.tarjan(false, false, false, true).cycles;
829
+ // expect(cycles.size).toBe(2);
830
+ // expect(getAsVerticesArrays(cycles)).toEqual([
831
+ // ['A', 'B', 'C'],
832
+ // ['A', 'D', 'C']
833
+ // ]);
834
+ // });
835
+ //
836
+ // function getAsVerticesArrays(vss: Map<number, DirectedVertex<any>[]>) {
837
+ // return [...vss.values()].map(vs => vs.map(vertex => vertex.key));
838
+ // }
839
+ //
840
+ // function createExampleGraph1() {
841
+ // const graph = new DirectedGraph();
842
+ // graph.addVertex('A');
843
+ // graph.addVertex('B');
844
+ // graph.addVertex('C');
845
+ // graph.addVertex('D');
846
+ // graph.addVertex('E');
847
+ // graph.addEdge('A', 'B');
848
+ // graph.addEdge('A', 'C');
849
+ // graph.addEdge('B', 'D');
850
+ // graph.addEdge('C', 'D');
851
+ // graph.addEdge('D', 'E');
852
+ // graph.addEdge('E', 'B');
853
+ // return graph;
854
+ // }
855
+ //
856
+ // test('should tarjan cycles return correct result', () => {
857
+ // const graph = createExampleGraph1();
858
+ // const cycles = graph.tarjan(false, false, false, true).cycles;
859
+ // expect(cycles.size).toBe(1);
860
+ // expect(getAsVerticesArrays(cycles)).toEqual([['B', 'D', 'E']]);
861
+ // });
862
+ //
863
+ // test('should tarjan SCCs return correct result', () => {
864
+ // const graph = createExampleGraph1();
865
+ // const sccs = graph.tarjan(false, false, true, false).SCCs;
866
+ // expect(sccs.size).toBe(3);
867
+ // expect(getAsVerticesArrays(sccs)).toEqual([['A'], ['C'], ['B', 'D', 'E']]);
868
+ // });
869
+ //
870
+ // test('should tarjan cut vertexes return correct result', () => {
871
+ // const graph = createExampleGraph1();
872
+ // const cutVertexes = graph.tarjan(true, false, false, false).cutVertexes;
873
+ // expect(cutVertexes.length).toBe(0);
874
+ // });
875
+ //
876
+ // test('should tarjan bridges return correct result', () => {
877
+ // const graph = createExampleGraph1();
878
+ // const bridges = graph.tarjan(false, true, false, false).bridges;
879
+ // expect(bridges.length).toBe(0);
880
+ // });
881
+ //
882
+ // function createExampleGraph2() {
883
+ // const graph = createExampleGraph1();
884
+ // graph.addVertex('F');
885
+ // graph.addVertex('G');
886
+ // graph.addEdge('B', 'F');
887
+ // graph.addEdge('F', 'E');
888
+ // graph.addEdge('C', 'G');
889
+ // graph.addEdge('G', 'A');
890
+ // return graph;
891
+ // }
892
+ //
893
+ // test('should 3 cycles graph tarjan cycles return correct result', () => {
894
+ // const graph = createExampleGraph2();
895
+ // const cycles = graph.tarjan(false, false, false, true).cycles;
896
+ // expect(cycles.size).toBe(3);
897
+ // expect(getAsVerticesArrays(cycles)).toEqual([
898
+ // ['A', 'C', 'G'],
899
+ // ['B', 'D', 'E'],
900
+ // ['B', 'F', 'E']
901
+ // ]);
902
+ // });
903
+ //
904
+ // test('should 3 cycles graph tarjan SCCs return correct result', () => {
905
+ // const graph = createExampleGraph2();
906
+ // const sccs = graph.tarjan(false, false, true, false).SCCs;
907
+ // expect(sccs.size).toBe(2);
908
+ // expect(getAsVerticesArrays(sccs)).toEqual([
909
+ // ['A', 'C', 'G'],
910
+ // ['B', 'D', 'E', 'F']
911
+ // ]);
912
+ // });
913
+ //
914
+ // test('should 3 cycles graph tarjan cut vertexes return correct result', () => {
915
+ // const graph = createExampleGraph1();
916
+ // const cutVertexes = graph.tarjan(true, false, false, false).cutVertexes;
917
+ // expect(cutVertexes.length).toBe(0);
918
+ // });
919
+ //
920
+ // test('should 3 cycles graph tarjan bridges return correct result', () => {
921
+ // const graph = createExampleGraph1();
922
+ // const bridges = graph.tarjan(false, true, false, false).bridges;
923
+ // expect(bridges.length).toBe(0);
924
+ // });
925
+ //
926
+ // function createExampleGraph3() {
927
+ // const graph = new DirectedGraph();
928
+ // graph.addVertex('A');
929
+ // graph.addVertex('B');
930
+ // graph.addVertex('C');
931
+ // graph.addVertex('D');
932
+ // graph.addVertex('E');
933
+ // graph.addVertex('F');
934
+ // graph.addVertex('G');
935
+ // graph.addEdge('A', 'B');
936
+ // graph.addEdge('B', 'C');
937
+ // graph.addEdge('C', 'D');
938
+ // graph.addEdge('D', 'B');
939
+ // graph.addEdge('A', 'E');
940
+ // graph.addEdge('E', 'F');
941
+ // graph.addEdge('F', 'G');
942
+ // graph.addEdge('G', 'E');
943
+ // return graph;
944
+ // }
945
+ //
946
+ // test('should cuttable graph tarjan cycles return correct result', () => {
947
+ // const graph = createExampleGraph3();
948
+ // const cycles = graph.tarjan(false, false, false, true).cycles;
949
+ // expect(cycles.size).toBe(2);
950
+ // expect(getAsVerticesArrays(cycles)).toEqual([
951
+ // ['B', 'C', 'D'],
952
+ // ['E', 'F', 'G']
953
+ // ]);
954
+ // });
955
+ //
956
+ // test('should cuttable graph tarjan SCCs return correct result', () => {
957
+ // const graph = createExampleGraph3();
958
+ // const sccs = graph.tarjan(false, false, true, false).SCCs;
959
+ // expect(sccs.size).toBe(3);
960
+ // expect(getAsVerticesArrays(sccs)).toEqual([['A'], ['B', 'C', 'D'], ['E', 'F', 'G']]);
961
+ // });
962
+ //
963
+ // test('should cuttable graph tarjan cut vertexes return correct result', () => {
964
+ // const graph = createExampleGraph3();
965
+ // const cutVertexes = graph.tarjan(true, false, false, false).cutVertexes;
966
+ // expect(cutVertexes.length).toBe(3);
967
+ // expect(cutVertexes.map(cv => cv.key)).toEqual(['B', 'E', 'A']);
968
+ // });
969
+ //
970
+ // test('should cuttable graph tarjan bridges return correct result', () => {
971
+ // const graph = createExampleGraph3();
972
+ // const bridges = graph.tarjan(false, true, false, false).bridges;
973
+ // expect(bridges.length).toBe(2);
974
+ // expect(bridges.map(b => '' + b.src + b.dest)).toEqual(['AB', 'AE']);
975
+ // });
976
+ //
977
+ // function createExampleGraph4() {
978
+ // const graph = createExampleGraph3();
979
+ // graph.addVertex('H');
980
+ // graph.addVertex('I');
981
+ // graph.addVertex('J');
982
+ // graph.addVertex('K');
983
+ // graph.addEdge('C', 'H');
984
+ // graph.addEdge('H', 'I');
985
+ // graph.addEdge('I', 'D');
986
+ // graph.addEdge('H', 'J');
987
+ // graph.addEdge('J', 'K');
988
+ // graph.addEdge('K', 'H');
989
+ // return graph;
990
+ // }
991
+ //
992
+ // test('should more cuttable graph tarjan cycles return correct result', () => {
993
+ // const graph = createExampleGraph4();
994
+ // const cycles = graph.tarjan(false, false, false, true).cycles;
995
+ // expect(cycles.size).toBe(4);
996
+ // expect(getAsVerticesArrays(cycles)).toEqual([
997
+ // ['B', 'C', 'D'],
998
+ // ['H', 'J', 'K'],
999
+ // ['E', 'F', 'G'],
1000
+ // ['B', 'C', 'H', 'I', 'D']
1001
+ // ]);
1002
+ // });
1003
+ //
1004
+ // test('should more cuttable graph tarjan SCCs return correct result', () => {
1005
+ // const graph = createExampleGraph4();
1006
+ // const sccs = graph.tarjan(false, false, true, false).SCCs;
1007
+ // expect(sccs.size).toBe(3);
1008
+ // expect(getAsVerticesArrays(sccs)).toEqual([['A'], ['B', 'C', 'D', 'H', 'I', 'J', 'K'], ['E', 'F', 'G']]);
1009
+ // });
1010
+ //
1011
+ // test('should more cuttable graph tarjan cut vertexes return correct result', () => {
1012
+ // const graph = createExampleGraph4();
1013
+ // const cutVertexes = graph.tarjan(true, false, false, false).cutVertexes;
1014
+ // expect(cutVertexes.length).toBe(4);
1015
+ // expect(cutVertexes.map(cv => cv.key)).toEqual(['B', 'E', 'A', 'H']);
1016
+ // });
1017
+ //
1018
+ // test('should more cuttable graph tarjan bridges return correct result', () => {
1019
+ // const graph = createExampleGraph4();
1020
+ // const bridges = graph.tarjan(false, true, false, false).bridges;
1021
+ // expect(bridges.length).toBe(2);
1022
+ // expect(bridges.map(b => '' + b.src + b.dest)).toEqual(['AB', 'AE']);
1023
+ // });
1024
+ //
1025
+ // function createExampleGraph5() {
1026
+ // const graph = createExampleGraph4();
1027
+ // graph.addEdge('F', 'H');
1028
+ // return graph;
1029
+ // }
1030
+ //
1031
+ // test('should uncuttable graph tarjan cycles return correct result', () => {
1032
+ // const graph = createExampleGraph5();
1033
+ // const cycles = graph.tarjan(false, false, false, true).cycles;
1034
+ // expect(cycles.size).toBe(4);
1035
+ // expect(getAsVerticesArrays(cycles)).toEqual([
1036
+ // ['B', 'C', 'D'],
1037
+ // ['H', 'J', 'K'],
1038
+ // ['E', 'F', 'G'],
1039
+ // ['B', 'C', 'H', 'I', 'D']
1040
+ // ]);
1041
+ // });
1042
+ //
1043
+ // test('should uncuttable graph tarjan SCCs return correct result', () => {
1044
+ // const graph = createExampleGraph5();
1045
+ // const sccs = graph.tarjan(false, false, true, false).SCCs;
1046
+ // expect(sccs.size).toBe(3);
1047
+ // expect(getAsVerticesArrays(sccs)).toEqual([['A'], ['B', 'C', 'D', 'H', 'I', 'J', 'K'], ['E', 'F', 'G']]);
1048
+ // });
1049
+ //
1050
+ // test('should uncuttable graph tarjan cut vertexes return correct result', () => {
1051
+ // const graph = createExampleGraph5();
1052
+ // const cutVertexes = graph.tarjan(true, false, false, false).cutVertexes;
1053
+ // expect(cutVertexes.length).toBe(0);
1054
+ // });
1055
+ //
1056
+ // test('should uncuttable graph tarjan bridges return correct result', () => {
1057
+ // const graph = createExampleGraph5();
1058
+ // const bridges = graph.tarjan(false, true, false, false).bridges;
1059
+ // expect(bridges.length).toBe(0);
1060
+ // });
1061
+ // });