data-structure-typed 2.1.2 → 2.2.1

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 (55) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/CONTRIBUTING.md +4 -0
  3. package/README.md +66 -21
  4. package/benchmark/report.html +1 -1
  5. package/benchmark/report.json +145 -169
  6. package/dist/cjs/index.cjs +1173 -583
  7. package/dist/cjs/index.cjs.map +1 -1
  8. package/dist/cjs-legacy/index.cjs +13623 -0
  9. package/dist/cjs-legacy/index.cjs.map +1 -0
  10. package/dist/esm/index.mjs +1173 -583
  11. package/dist/esm/index.mjs.map +1 -1
  12. package/dist/esm-legacy/index.mjs +13545 -0
  13. package/dist/esm-legacy/index.mjs.map +1 -0
  14. package/dist/types/data-structures/binary-tree/avl-tree-counter.d.ts +57 -3
  15. package/dist/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +65 -3
  16. package/dist/types/data-structures/binary-tree/avl-tree.d.ts +61 -5
  17. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +1 -0
  18. package/dist/types/data-structures/binary-tree/bst.d.ts +58 -3
  19. package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +59 -4
  20. package/dist/types/data-structures/binary-tree/tree-counter.d.ts +57 -3
  21. package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +66 -3
  22. package/dist/types/types/data-structures/base/base.d.ts +1 -1
  23. package/dist/umd/data-structure-typed.js +614 -53
  24. package/dist/umd/data-structure-typed.js.map +1 -1
  25. package/dist/umd/data-structure-typed.min.js +3 -3
  26. package/dist/umd/data-structure-typed.min.js.map +1 -1
  27. package/package.json +20 -2
  28. package/src/data-structures/base/iterable-entry-base.ts +4 -4
  29. package/src/data-structures/binary-tree/avl-tree-counter.ts +103 -12
  30. package/src/data-structures/binary-tree/avl-tree-multi-map.ts +116 -12
  31. package/src/data-structures/binary-tree/avl-tree.ts +109 -16
  32. package/src/data-structures/binary-tree/binary-tree.ts +3 -2
  33. package/src/data-structures/binary-tree/bst.ts +104 -12
  34. package/src/data-structures/binary-tree/red-black-tree.ts +110 -19
  35. package/src/data-structures/binary-tree/tree-counter.ts +102 -11
  36. package/src/data-structures/binary-tree/tree-multi-map.ts +124 -12
  37. package/src/data-structures/graph/abstract-graph.ts +8 -8
  38. package/src/data-structures/graph/directed-graph.ts +5 -5
  39. package/src/data-structures/graph/undirected-graph.ts +5 -5
  40. package/src/data-structures/hash/hash-map.ts +4 -4
  41. package/src/types/data-structures/base/base.ts +1 -1
  42. package/test/performance/data-structures/binary-tree/red-black-tree.test.ts +39 -36
  43. package/test/performance/runner-config.json +4 -4
  44. package/test/unit/data-structures/binary-tree/avl-tree-counter.test.ts +8 -7
  45. package/test/unit/data-structures/binary-tree/avl-tree-multi-map.test.ts +3 -3
  46. package/test/unit/data-structures/binary-tree/avl-tree.test.ts +6 -6
  47. package/test/unit/data-structures/binary-tree/binary-tree.test.ts +4 -4
  48. package/test/unit/data-structures/binary-tree/bst.test.ts +5 -5
  49. package/test/unit/data-structures/binary-tree/red-black-tree.test.ts +6 -6
  50. package/test/unit/data-structures/binary-tree/tree-counter.test.ts +8 -7
  51. package/test/unit/data-structures/binary-tree/tree-multi-map.test.ts +7 -7
  52. package/test/unit/data-structures/graph/directed-graph.test.ts +3 -3
  53. package/test/unit/data-structures/hash/hash-map.test.ts +14 -14
  54. package/tsup.node.config.js +40 -6
  55. package/test/performance/reportor.mjs +0 -505
package/CHANGELOG.md CHANGED
@@ -8,7 +8,7 @@ All notable changes to this project will be documented in this file.
8
8
  - [Semantic Versioning](https://semver.org/spec/v2.0.0.html)
9
9
  - [`auto-changelog`](https://github.com/CookPete/auto-changelog)
10
10
 
11
- ## [v2.1.2](https://github.com/zrwusa/data-structure-typed/compare/v2.0.4...main) (upcoming)
11
+ ## [v2.2.1](https://github.com/zrwusa/data-structure-typed/compare/v2.0.4...main) (upcoming)
12
12
 
13
13
  ### Changes
14
14
 
package/CONTRIBUTING.md CHANGED
@@ -82,6 +82,10 @@
82
82
  - `git push`
83
83
  - click the `New pull request` on Github https://github.com/zrwusa/data-structure-typed/branches
84
84
 
85
+ **performance inspection**
86
+ - `node --inspect-brk benchmark/all.js`
87
+ - chrome://inspect/#devices -> Open dedicated DevTools for Node
88
+
85
89
  **Contributing New Data Structures**
86
90
 
87
91
  - Make your pull requests to be **specific** and **focused**. Instead of
package/README.md CHANGED
@@ -798,11 +798,8 @@ Array.from(dijkstraResult?.seen ?? []).map(vertex => vertex.key) // ['A', 'B', '
798
798
 
799
799
  ```
800
800
 
801
- [//]: # (No deletion!!! Start of Example Replace Section)
802
801
 
803
802
 
804
- [//]: # (No deletion!!! End of Example Replace Section)
805
-
806
803
  ## API docs & Examples
807
804
 
808
805
  [API Docs](https://data-structure-typed-docs.vercel.app)
@@ -823,29 +820,16 @@ Graphics Radeon Pro 555X 4 GB
823
820
 
824
821
  Intel UHD Graphics 630 1536 MB
825
822
 
826
- macOS Big Sur
823
+ macOS Sequoia 15.7.2
827
824
 
828
- Version 11.7.9
825
+ ## Performance & Runtime Compatibility
829
826
 
830
- ***Our performance testing is conducted directly on the TypeScript source code. The actual performance of the compiled JavaScript code is generally 3 times higher. We have compared it with C++, and it is only 30% slower than C++.***
831
- Try it
827
+ [//]: # (No deletion!!! Start of Replace Section)
832
828
 
833
- Just run
829
+ <h2>red-black-tree</h2><table><thead><tr><th>test name</th><th>time taken (ms)</th><th>sample mean (secs)</th><th>sample deviation</th></tr></thead><tbody><tr><td>1,000,000 add</td><td>410.34</td><td>0.41</td><td>0.01</td></tr><tr><td>1,000,000 get</td><td>5.20</td><td>0.01</td><td>8.16e-5</td></tr><tr><td>1,000,000 iterator</td><td>154.25</td><td>0.15</td><td>0.02</td></tr><tr><td>CPT 1,000,000 add</td><td>656.43</td><td>0.66</td><td>0.00</td></tr><tr><td>CPT 1,000,000 add</td><td>684.17</td><td>0.68</td><td>0.01</td></tr></tbody></table><h2>queue</h2><table><thead><tr><th>test name</th><th>time taken (ms)</th><th>sample mean (secs)</th><th>sample deviation</th></tr></thead><tbody><tr><td>1,000,000 push</td><td>26.97</td><td>0.03</td><td>0.00</td></tr><tr><td>100,000 push & shift</td><td>2.87</td><td>0.00</td><td>2.71e-4</td></tr><tr><td>Native JS Array 100,000 push & shift</td><td>1120.94</td><td>1.12</td><td>0.20</td></tr></tbody></table><h2>deque</h2><table><thead><tr><th>test name</th><th>time taken (ms)</th><th>sample mean (secs)</th><th>sample deviation</th></tr></thead><tbody><tr><td>1,000,000 push</td><td>8.75</td><td>0.01</td><td>6.99e-4</td></tr><tr><td>1,000,000 push & pop</td><td>12.95</td><td>0.01</td><td>4.21e-4</td></tr><tr><td>1,000,000 push & shift</td><td>13.73</td><td>0.01</td><td>4.53e-4</td></tr><tr><td>100,000 push & shift</td><td>1.36</td><td>0.00</td><td>5.42e-5</td></tr><tr><td>Native JS Array 100,000 push & shift</td><td>1167.06</td><td>1.17</td><td>0.26</td></tr><tr><td>100,000 unshift & shift</td><td>1.31</td><td>0.00</td><td>4.73e-5</td></tr><tr><td>Native JS Array 100,000 unshift & shift</td><td>1911.47</td><td>1.91</td><td>0.02</td></tr></tbody></table><h2>heap</h2><table><thead><tr><th>test name</th><th>time taken (ms)</th><th>sample mean (secs)</th><th>sample deviation</th></tr></thead><tbody><tr><td>100,000 add</td><td>4.60</td><td>0.00</td><td>1.07e-4</td></tr><tr><td>100,000 add & poll</td><td>16.96</td><td>0.02</td><td>3.45e-4</td></tr></tbody></table><h2>avl-tree</h2><table><thead><tr><th>test name</th><th>time taken (ms)</th><th>sample mean (secs)</th><th>sample deviation</th></tr></thead><tbody><tr><td>100,000 add randomly</td><td>324.51</td><td>0.32</td><td>0.01</td></tr><tr><td>100,000 add</td><td>299.76</td><td>0.30</td><td>0.02</td></tr><tr><td>100,000 get</td><td>0.26</td><td>2.58e-4</td><td>3.65e-6</td></tr><tr><td>100,000 getNode</td><td>169.33</td><td>0.17</td><td>0.00</td></tr><tr><td>100,000 iterator</td><td>14.43</td><td>0.01</td><td>0.00</td></tr><tr><td>100,000 add & delete orderly</td><td>434.44</td><td>0.43</td><td>0.01</td></tr><tr><td>100,000 add & delete randomly</td><td>541.78</td><td>0.54</td><td>0.01</td></tr></tbody></table><h2>hash-map</h2><table><thead><tr><th>test name</th><th>time taken (ms)</th><th>sample mean (secs)</th><th>sample deviation</th></tr></thead><tbody><tr><td>1,000,000 set</td><td>43.23</td><td>0.04</td><td>0.01</td></tr><tr><td>Native JS Map 1,000,000 set</td><td>147.12</td><td>0.15</td><td>0.01</td></tr><tr><td>Native JS Set 1,000,000 add</td><td>116.18</td><td>0.12</td><td>0.01</td></tr><tr><td>1,000,000 set & get</td><td>46.39</td><td>0.05</td><td>0.01</td></tr><tr><td>Native JS Map 1,000,000 set & get</td><td>196.92</td><td>0.20</td><td>0.01</td></tr><tr><td>Native JS Set 1,000,000 add & has</td><td>163.92</td><td>0.16</td><td>0.01</td></tr><tr><td>1,000,000 ObjKey set & get</td><td>243.36</td><td>0.24</td><td>0.03</td></tr><tr><td>Native JS Map 1,000,000 ObjKey set & get</td><td>211.66</td><td>0.21</td><td>0.02</td></tr><tr><td>Native JS Set 1,000,000 ObjKey add & has</td><td>196.57</td><td>0.20</td><td>0.01</td></tr></tbody></table><h2>directed-graph</h2><table><thead><tr><th>test name</th><th>time taken (ms)</th><th>sample mean (secs)</th><th>sample deviation</th></tr></thead><tbody><tr><td>1,000 addVertex</td><td>0.05</td><td>4.60e-5</td><td>6.59e-7</td></tr><tr><td>1,000 addEdge</td><td>3.02</td><td>0.00</td><td>2.85e-4</td></tr><tr><td>1,000 getVertex</td><td>0.04</td><td>3.77e-5</td><td>4.66e-7</td></tr><tr><td>1,000 getEdge</td><td>41.48</td><td>0.04</td><td>0.01</td></tr><tr><td>tarjan</td><td>240.33</td><td>0.24</td><td>0.01</td></tr><tr><td>topologicalSort</td><td>195.62</td><td>0.20</td><td>0.01</td></tr></tbody></table><h2>trie</h2><table><thead><tr><th>test name</th><th>time taken (ms)</th><th>sample mean (secs)</th><th>sample deviation</th></tr></thead><tbody><tr><td>100,000 push</td><td>27.15</td><td>0.03</td><td>6.61e-4</td></tr><tr><td>100,000 getWords</td><td>41.18</td><td>0.04</td><td>0.00</td></tr></tbody></table><h2>stack</h2><table><thead><tr><th>test name</th><th>time taken (ms)</th><th>sample mean (secs)</th><th>sample deviation</th></tr></thead><tbody><tr><td>1,000,000 push</td><td>25.21</td><td>0.03</td><td>0.00</td></tr><tr><td>1,000,000 push & pop</td><td>29.12</td><td>0.03</td><td>0.00</td></tr></tbody></table>
834
830
 
835
- ```shell
836
- pnpm perf:rbtree
837
- ```
838
-
839
- ```html
840
- 1,000,000 add randomly: 1.367s
841
- 1,000,000 add: 374.859ms
842
- 1,000,000 get: 8.025ms
843
- 1,000,000 getNode: 1.293s
844
- ```
831
+ [//]: # (No deletion!!! End of Replace Section)
845
832
 
846
- [//]: # (No deletion!!! Start of Replace Section)
847
- <h2>comparison</h2><table><thead><tr><th>test name</th><th>time taken (ms)</th><th>sample mean (secs)</th><th>sample deviation</th></tr></thead><tbody><tr><td>SRC PQ 1,000,000 add</td><td>36.30</td><td>0.04</td><td>0.01</td></tr><tr><td>CJS PQ 100,000 add</td><td>2.76</td><td>0.00</td><td>1.11e-4</td></tr><tr><td>MJS PQ 100,000 add</td><td>14.33</td><td>0.01</td><td>2.60e-4</td></tr><tr><td>CPT PQ 100,000 add</td><td>4.81</td><td>0.00</td><td>1.36e-4</td></tr><tr><td>SRC PQ 100,000 add & poll</td><td>22.57</td><td>0.02</td><td>4.66e-4</td></tr><tr><td>CJS PQ 100,000 add & poll</td><td>22.84</td><td>0.02</td><td>6.65e-4</td></tr><tr><td>MJS PQ 100,000 add & poll</td><td>23.43</td><td>0.02</td><td>0.00</td></tr><tr><td>CPT PQ 1,000,000 add & pop</td><td>181.14</td><td>0.18</td><td>0.03</td></tr><tr><td>CPT OM 100,000 add</td><td>26.64</td><td>0.03</td><td>0.00</td></tr><tr><td>CPT HM 100,000 set</td><td>5.90</td><td>0.01</td><td>8.46e-4</td></tr><tr><td>CPT HM 100,000 set & get</td><td>
848
- 6.69</td><td>0.01</td><td>7.52e-4</td></tr><tr><td>CPT LL 1,000,000 unshift</td><td>19.78</td><td>0.02</td><td>0.01</td></tr><tr><td>CPT PQ 100,000 add & pop</td><td>14.36</td><td>0.01</td><td>0.00</td></tr><tr><td>CPT DQ 1,000,000 push</td><td>8.11</td><td>0.01</td><td>5.23e-4</td></tr><tr><td>CPT Q 1,000,000 push</td><td>30.25</td><td>0.03</td><td>0.01</td></tr><tr><td>CPT ST 1,000,000 push</td><td>27.10</td><td>0.03</td><td>0.00</td></tr><tr><td>CPT ST 1,000,000 push & pop</td><td>30.19</td><td>0.03</td><td>0.00</td></tr></tbody></table>[//]: # (No deletion!!! End of Replace Section)
849
833
 
850
834
  ## The corresponding relationships between data structures in different language standard libraries.
851
835
 
@@ -1107,6 +1091,67 @@ pnpm perf:rbtree
1107
1091
  </tbody>
1108
1092
  </table>
1109
1093
 
1094
+ Starting from v2.2.0, `data-structure-typed` ships **two runtime targets** to balance
1095
+ maximum performance on modern engines with broad compatibility for older Node.js
1096
+ and browsers.
1097
+
1098
+ ### Build Targets
1099
+
1100
+ | Target | Output | Recommended runtime | Minimum runtime | Notes |
1101
+ |---|---|---:|---:|---|
1102
+ | **Modern (ES2022)** | `dist/esm` / `dist/cjs` | **Node.js 18+** | Node.js 16+ | Best performance. Enables V8 to fully optimize hot paths (JIT-friendly class semantics). |
1103
+ | **Legacy (ES2018)** | `dist/esm-legacy` / `dist/cjs-legacy` | Node.js 16+ | **Node.js 12+** | Maximum compatibility. Slightly slower due to older compilation target and reduced JIT opportunities. |
1104
+
1105
+ ### Benchmarks (Insertion-heavy workloads)
1106
+
1107
+ The modern build (ES2022) is significantly faster for insertion-heavy operations
1108
+ (e.g. Red-Black Tree `add/insert`) because it avoids performance overhead from
1109
+ transpiled class field initialization and improves JIT optimization.
1110
+
1111
+ | Benchmark | Legacy (ES2018) | Modern (ES2022) | Speedup |
1112
+ |---|---:|---:|---:|
1113
+ | Red-Black Tree `add` (1,000,000 inserts) | **~1100 ms** *(example)* | **473.12 ms** | **~2.3×** |
1114
+
1115
+ > Notes:
1116
+ > - Results vary by hardware and Node version.
1117
+ > - We recommend running benchmarks on **Node.js 18+** for stable, modern V8 behavior.
1118
+
1119
+ ### Node.js Support Policy
1120
+
1121
+ - **Supported:** Node.js **12+** (via the legacy build)
1122
+ - **Recommended:** Node.js **18+** (modern build, best performance and stability)
1123
+ - **Best experience:** Node.js **20+** (latest V8 improvements)
1124
+
1125
+ If you target Node.js 18+ only, you will get the best performance out of the box.
1126
+
1127
+ ### Browser Support
1128
+
1129
+ - **Modern browsers (Evergreen):** use the **Modern (ES2022)** ESM build.
1130
+ - **Older browsers / conservative bundlers:** use the **Legacy (ES2018)** ESM build.
1131
+
1132
+ In most bundler setups, the correct build is resolved automatically via `exports`.
1133
+ If you need to force a specific target, use the explicit entry points:
1134
+
1135
+ ```js
1136
+ // Force modern build (ES2022)
1137
+ import { RedBlackTree } from "data-structure-typed/modern";
1138
+
1139
+ // Force legacy build (ES2018)
1140
+ import { RedBlackTree } from "data-structure-typed/legacy";
1141
+ ```
1142
+
1143
+ Just run
1144
+
1145
+ ```shell
1146
+ pnpm test:perf red-black-tree.test.ts
1147
+ ```
1148
+
1149
+ ```html
1150
+ 1,000,000 add randomly: 1.141s
1151
+ 1,000,000 add: 374.859ms
1152
+ 1,000,000 get: 5.99ms
1153
+ ```
1154
+
1110
1155
  ## Software Engineering Design Standards
1111
1156
 
1112
1157
  We strictly adhere to computer science theory and software development standards. Our LinkedList is designed in the
@@ -10,5 +10,5 @@
10
10
  .content table tr:nth-child(odd) { background:#fff; }
11
11
  </style></head><body><div class="content">
12
12
  <div class="json-to-html-title">Benchmark Report</div>
13
- <h2>heap</h2><table><thead><tr><th>test name</th><th>time taken (ms)</th><th>sample mean (secs)</th><th>sample deviation</th></tr></thead><tbody><tr><td>100,000 add</td><td>4.71</td><td>0.00</td><td>3.11e-4</td></tr><tr><td>100,000 add & poll</td><td>17.07</td><td>0.02</td><td>3.42e-4</td></tr></tbody></table><h2>avl-tree</h2><table><thead><tr><th>test name</th><th>time taken (ms)</th><th>sample mean (secs)</th><th>sample deviation</th></tr></thead><tbody><tr><td>100,000 add randomly</td><td>329.37</td><td>0.33</td><td>0.01</td></tr><tr><td>100,000 add</td><td>299.89</td><td>0.30</td><td>0.00</td></tr><tr><td>100,000 get</td><td>0.26</td><td>2.62e-4</td><td>7.89e-6</td></tr><tr><td>100,000 getNode</td><td>164.60</td><td>0.16</td><td>0.00</td></tr><tr><td>100,000 iterator</td><td>13.34</td><td>0.01</td><td>9.18e-4</td></tr><tr><td>100,000 add & delete orderly</td><td>455.17</td><td>0.46</td><td>0.04</td></tr><tr><td>100,000 add & delete randomly</td><td>598.46</td><td>0.60</td><td>0.05</td></tr></tbody></table><h2>red-black-tree</h2><table><thead><tr><th>test name</th><th>time taken (ms)</th><th>sample mean (secs)</th><th>sample deviation</th></tr></thead><tbody><tr><td>100,000 add randomly</td><td>54.72</td><td>0.05</td><td>0.01</td></tr><tr><td>100,000 add</td><td>56.27</td><td>0.06</td><td>0.00</td></tr><tr><td>100,000 get</td><td>0.56</td><td>5.65e-4</td><td>1.33e-5</td></tr><tr><td>100,000 getNode</td><td>205.94</td><td>0.21</td><td>0.02</td></tr><tr><td>100,000 node mode add randomly</td><td>58.79</td><td>0.06</td><td>0.01</td></tr><tr><td>100,000 node mode get</td><td>209.90</td><td>0.21</td><td>0.03</td></tr><tr><td>100,000 iterator</td><td>14.40</td><td>0.01</td><td>0.00</td></tr><tr><td>100,000 add & delete orderly</td><td>142.34</td><td>0.14</td><td>0.01</td></tr><tr><td>100,000 add & delete randomly</td><td>255.91</td><td>0.26</td><td>0.01</td></tr></tbody></table><h2>hash-map</h2><table><thead><tr><th>test name</th><th>time taken (ms)</th><th>sample mean (secs)</th><th>sample deviation</th></tr></thead><tbody><tr><td>1,000,000 set</td><td>44.46</td><td>0.04</td><td>0.01</td></tr><tr><td>Native JS Map 1,000,000 set</td><td>154.58</td><td>0.15</td><td>0.01</td></tr><tr><td>Native JS Set 1,000,000 add</td><td>119.86</td><td>0.12</td><td>0.01</td></tr><tr><td>1,000,000 set & get</td><td>49.01</td><td>0.05</td><td>0.01</td></tr><tr><td>Native JS Map 1,000,000 set & get</td><td>223.74</td><td>0.22</td><td>0.03</td></tr><tr><td>Native JS Set 1,000,000 add & has</td><td>174.69</td><td>0.17</td><td>0.02</td></tr><tr><td>1,000,000 ObjKey set & get</td><td>251.98</td><td>0.25</td><td>0.03</td></tr><tr><td>Native JS Map 1,000,000 ObjKey set & get</td><td>245.68</td><td>0.25</td><td>0.05</td></tr><tr><td>Native JS Set 1,000,000 ObjKey add & has</td><td>218.86</td><td>0.22</td><td>0.03</td></tr></tbody></table><h2>directed-graph</h2><table><thead><tr><th>test name</th><th>time taken (ms)</th><th>sample mean (secs)</th><th>sample deviation</th></tr></thead><tbody><tr><td>1,000 addVertex</td><td>0.05</td><td>4.80e-5</td><td>1.82e-6</td></tr><tr><td>1,000 addEdge</td><td>3.26</td><td>0.00</td><td>3.92e-4</td></tr><tr><td>1,000 getVertex</td><td>0.04</td><td>4.13e-5</td><td>8.87e-6</td></tr><tr><td>1,000 getEdge</td><td>37.94</td><td>0.04</td><td>0.01</td></tr><tr><td>tarjan</td><td>239.04</td><td>0.24</td><td>0.03</td></tr><tr><td>topologicalSort</td><td>191.44</td><td>0.19</td><td>0.03</td></tr></tbody></table><h2>queue</h2><table><thead><tr><th>test name</th><th>time taken (ms)</th><th>sample mean (secs)</th><th>sample deviation</th></tr></thead><tbody><tr><td>1,000,000 push</td><td>26.75</td><td>0.03</td><td>0.00</td></tr><tr><td>100,000 push & shift</td><td>2.88</td><td>0.00</td><td>2.58e-4</td></tr><tr><td>Native JS Array 100,000 push & shift</td><td>1049.96</td><td>1.05</td><td>0.14</td></tr></tbody></table><h2>deque</h2><table><thead><tr><th>test name</th><th>time taken (ms)</th><th>sample mean (secs)</th><th>sample deviation</th></tr></thead><tbody><tr><td>1,000,000 push</td><td>8.49</td><td>0.01</td><td>4.85e-4</td></tr><tr><td>1,000,000 push & pop</td><td>12.92</td><td>0.01</td><td>4.52e-4</td></tr><tr><td>1,000,000 push & shift</td><td>13.96</td><td>0.01</td><td>9.90e-4</td></tr><tr><td>100,000 push & shift</td><td>1.35</td><td>0.00</td><td>4.62e-5</td></tr><tr><td>Native JS Array 100,000 push & shift</td><td>1133.01</td><td>1.13</td><td>0.20</td></tr><tr><td>100,000 unshift & shift</td><td>1.30</td><td>0.00</td><td>5.14e-5</td></tr><tr><td>Native JS Array 100,000 unshift & shift</td><td>1897.52</td><td>1.90</td><td>0.06</td></tr></tbody></table><h2>trie</h2><table><thead><tr><th>test name</th><th>time taken (ms)</th><th>sample mean (secs)</th><th>sample deviation</th></tr></thead><tbody><tr><td>100,000 push</td><td>27.04</td><td>0.03</td><td>5.81e-4</td></tr><tr><td>100,000 getWords</td><td>39.37</td><td>0.04</td><td>0.00</td></tr></tbody></table><h2>stack</h2><table><thead><tr><th>test name</th><th>time taken (ms)</th><th>sample mean (secs)</th><th>sample deviation</th></tr></thead><tbody><tr><td>1,000,000 push</td><td>25.61</td><td>0.03</td><td>0.00</td></tr><tr><td>1,000,000 push & pop</td><td>29.09</td><td>0.03</td><td>0.00</td></tr></tbody></table>
13
+ <h2>red-black-tree</h2><table><thead><tr><th>test name</th><th>time taken (ms)</th><th>sample mean (secs)</th><th>sample deviation</th></tr></thead><tbody><tr><td>1,000,000 add</td><td>410.34</td><td>0.41</td><td>0.01</td></tr><tr><td>1,000,000 get</td><td>5.20</td><td>0.01</td><td>8.16e-5</td></tr><tr><td>1,000,000 iterator</td><td>154.25</td><td>0.15</td><td>0.02</td></tr><tr><td>CPT 1,000,000 add</td><td>656.43</td><td>0.66</td><td>0.00</td></tr><tr><td>CPT 1,000,000 add</td><td>684.17</td><td>0.68</td><td>0.01</td></tr></tbody></table><h2>queue</h2><table><thead><tr><th>test name</th><th>time taken (ms)</th><th>sample mean (secs)</th><th>sample deviation</th></tr></thead><tbody><tr><td>1,000,000 push</td><td>26.97</td><td>0.03</td><td>0.00</td></tr><tr><td>100,000 push & shift</td><td>2.87</td><td>0.00</td><td>2.71e-4</td></tr><tr><td>Native JS Array 100,000 push & shift</td><td>1120.94</td><td>1.12</td><td>0.20</td></tr></tbody></table><h2>deque</h2><table><thead><tr><th>test name</th><th>time taken (ms)</th><th>sample mean (secs)</th><th>sample deviation</th></tr></thead><tbody><tr><td>1,000,000 push</td><td>8.75</td><td>0.01</td><td>6.99e-4</td></tr><tr><td>1,000,000 push & pop</td><td>12.95</td><td>0.01</td><td>4.21e-4</td></tr><tr><td>1,000,000 push & shift</td><td>13.73</td><td>0.01</td><td>4.53e-4</td></tr><tr><td>100,000 push & shift</td><td>1.36</td><td>0.00</td><td>5.42e-5</td></tr><tr><td>Native JS Array 100,000 push & shift</td><td>1167.06</td><td>1.17</td><td>0.26</td></tr><tr><td>100,000 unshift & shift</td><td>1.31</td><td>0.00</td><td>4.73e-5</td></tr><tr><td>Native JS Array 100,000 unshift & shift</td><td>1911.47</td><td>1.91</td><td>0.02</td></tr></tbody></table><h2>heap</h2><table><thead><tr><th>test name</th><th>time taken (ms)</th><th>sample mean (secs)</th><th>sample deviation</th></tr></thead><tbody><tr><td>100,000 add</td><td>4.60</td><td>0.00</td><td>1.07e-4</td></tr><tr><td>100,000 add & poll</td><td>16.96</td><td>0.02</td><td>3.45e-4</td></tr></tbody></table><h2>avl-tree</h2><table><thead><tr><th>test name</th><th>time taken (ms)</th><th>sample mean (secs)</th><th>sample deviation</th></tr></thead><tbody><tr><td>100,000 add randomly</td><td>324.51</td><td>0.32</td><td>0.01</td></tr><tr><td>100,000 add</td><td>299.76</td><td>0.30</td><td>0.02</td></tr><tr><td>100,000 get</td><td>0.26</td><td>2.58e-4</td><td>3.65e-6</td></tr><tr><td>100,000 getNode</td><td>169.33</td><td>0.17</td><td>0.00</td></tr><tr><td>100,000 iterator</td><td>14.43</td><td>0.01</td><td>0.00</td></tr><tr><td>100,000 add & delete orderly</td><td>434.44</td><td>0.43</td><td>0.01</td></tr><tr><td>100,000 add & delete randomly</td><td>541.78</td><td>0.54</td><td>0.01</td></tr></tbody></table><h2>hash-map</h2><table><thead><tr><th>test name</th><th>time taken (ms)</th><th>sample mean (secs)</th><th>sample deviation</th></tr></thead><tbody><tr><td>1,000,000 set</td><td>43.23</td><td>0.04</td><td>0.01</td></tr><tr><td>Native JS Map 1,000,000 set</td><td>147.12</td><td>0.15</td><td>0.01</td></tr><tr><td>Native JS Set 1,000,000 add</td><td>116.18</td><td>0.12</td><td>0.01</td></tr><tr><td>1,000,000 set & get</td><td>46.39</td><td>0.05</td><td>0.01</td></tr><tr><td>Native JS Map 1,000,000 set & get</td><td>196.92</td><td>0.20</td><td>0.01</td></tr><tr><td>Native JS Set 1,000,000 add & has</td><td>163.92</td><td>0.16</td><td>0.01</td></tr><tr><td>1,000,000 ObjKey set & get</td><td>243.36</td><td>0.24</td><td>0.03</td></tr><tr><td>Native JS Map 1,000,000 ObjKey set & get</td><td>211.66</td><td>0.21</td><td>0.02</td></tr><tr><td>Native JS Set 1,000,000 ObjKey add & has</td><td>196.57</td><td>0.20</td><td>0.01</td></tr></tbody></table><h2>directed-graph</h2><table><thead><tr><th>test name</th><th>time taken (ms)</th><th>sample mean (secs)</th><th>sample deviation</th></tr></thead><tbody><tr><td>1,000 addVertex</td><td>0.05</td><td>4.60e-5</td><td>6.59e-7</td></tr><tr><td>1,000 addEdge</td><td>3.02</td><td>0.00</td><td>2.85e-4</td></tr><tr><td>1,000 getVertex</td><td>0.04</td><td>3.77e-5</td><td>4.66e-7</td></tr><tr><td>1,000 getEdge</td><td>41.48</td><td>0.04</td><td>0.01</td></tr><tr><td>tarjan</td><td>240.33</td><td>0.24</td><td>0.01</td></tr><tr><td>topologicalSort</td><td>195.62</td><td>0.20</td><td>0.01</td></tr></tbody></table><h2>trie</h2><table><thead><tr><th>test name</th><th>time taken (ms)</th><th>sample mean (secs)</th><th>sample deviation</th></tr></thead><tbody><tr><td>100,000 push</td><td>27.15</td><td>0.03</td><td>6.61e-4</td></tr><tr><td>100,000 getWords</td><td>41.18</td><td>0.04</td><td>0.00</td></tr></tbody></table><h2>stack</h2><table><thead><tr><th>test name</th><th>time taken (ms)</th><th>sample mean (secs)</th><th>sample deviation</th></tr></thead><tbody><tr><td>1,000,000 push</td><td>25.21</td><td>0.03</td><td>0.00</td></tr><tr><td>1,000,000 push & pop</td><td>29.12</td><td>0.03</td><td>0.00</td></tr></tbody></table>
14
14
  </div></body></html>