@zajno/common 2.0.0-beta.1 → 2.0.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 (201) hide show
  1. package/coverage/clover.xml +66 -21
  2. package/coverage/coverage-final.json +3 -2
  3. package/coverage/lcov-report/__tests__/helpers/expect.ts.html +1 -1
  4. package/coverage/lcov-report/__tests__/helpers/index.html +1 -1
  5. package/coverage/lcov-report/__tests__/helpers/main.ts.html +1 -1
  6. package/coverage/lcov-report/async/arrays.ts.html +1 -1
  7. package/coverage/lcov-report/async/index.html +1 -1
  8. package/coverage/lcov-report/async/timeout.ts.html +13 -13
  9. package/coverage/lcov-report/dates/calc.ts.html +1 -1
  10. package/coverage/lcov-report/dates/convert.ts.html +1 -1
  11. package/coverage/lcov-report/dates/datex.ts.html +1 -1
  12. package/coverage/lcov-report/dates/format.ts.html +1 -1
  13. package/coverage/lcov-report/dates/index.html +1 -1
  14. package/coverage/lcov-report/dates/index.ts.html +1 -1
  15. package/coverage/lcov-report/dates/parse.ts.html +1 -1
  16. package/coverage/lcov-report/dates/period.ts.html +1 -1
  17. package/coverage/lcov-report/dates/shift.ts.html +1 -1
  18. package/coverage/lcov-report/dates/types.ts.html +1 -1
  19. package/coverage/lcov-report/dates/yearDate.ts.html +1 -1
  20. package/coverage/lcov-report/fields/index.html +1 -1
  21. package/coverage/lcov-report/fields/update.ts.html +1 -1
  22. package/coverage/lcov-report/functions/index.html +17 -17
  23. package/coverage/lcov-report/functions/safeCall.ts.html +13 -13
  24. package/coverage/lcov-report/index.html +28 -28
  25. package/coverage/lcov-report/lazy/index.html +1 -1
  26. package/coverage/lcov-report/lazy/promise.ts.html +1 -1
  27. package/coverage/lcov-report/lazy/singleton.ts.html +1 -1
  28. package/coverage/lcov-report/logger/batch.ts.html +1 -1
  29. package/coverage/lcov-report/logger/console.ts.html +1 -1
  30. package/coverage/lcov-report/logger/index.html +1 -1
  31. package/coverage/lcov-report/logger/index.ts.html +1 -1
  32. package/coverage/lcov-report/logger/named.ts.html +1 -1
  33. package/coverage/lcov-report/logger/proxy.ts.html +1 -1
  34. package/coverage/lcov-report/math/arrays.ts.html +1 -1
  35. package/coverage/lcov-report/math/calc.ts.html +1 -1
  36. package/coverage/lcov-report/math/distribution.ts.html +1 -1
  37. package/coverage/lcov-report/math/index.html +1 -1
  38. package/coverage/lcov-report/math/index.ts.html +1 -1
  39. package/coverage/lcov-report/observing/event.ts.html +1 -1
  40. package/coverage/lcov-report/observing/index.html +1 -1
  41. package/coverage/lcov-report/queue/index.html +18 -18
  42. package/coverage/lcov-report/queue/tasks.ts.html +358 -0
  43. package/coverage/lcov-report/src/__tests__/helpers/expect.ts.html +1 -1
  44. package/coverage/lcov-report/src/__tests__/helpers/index.html +1 -1
  45. package/coverage/lcov-report/src/__tests__/helpers/main.ts.html +1 -1
  46. package/coverage/lcov-report/src/async/arrays.ts.html +1 -1
  47. package/coverage/lcov-report/src/async/index.html +36 -21
  48. package/coverage/lcov-report/src/async/timeout.ts.html +59 -59
  49. package/coverage/lcov-report/src/cache.ts.html +97 -97
  50. package/coverage/lcov-report/src/dates/calc.ts.html +1 -1
  51. package/coverage/lcov-report/src/dates/convert.ts.html +1 -1
  52. package/coverage/lcov-report/src/dates/datex.ts.html +1 -1
  53. package/coverage/lcov-report/src/dates/format.ts.html +1 -1
  54. package/coverage/lcov-report/src/dates/index.html +1 -1
  55. package/coverage/lcov-report/src/dates/index.ts.html +1 -1
  56. package/coverage/lcov-report/src/dates/parse.ts.html +1 -1
  57. package/coverage/lcov-report/src/dates/period.ts.html +1 -1
  58. package/coverage/lcov-report/src/dates/shift.ts.html +1 -1
  59. package/coverage/lcov-report/src/dates/types.ts.html +1 -1
  60. package/coverage/lcov-report/src/dates/yearDate.ts.html +1 -1
  61. package/coverage/lcov-report/src/disposer.ts.html +1 -1
  62. package/coverage/lcov-report/src/enumHelper.ts.html +1 -1
  63. package/coverage/lcov-report/src/event.ts.html +1 -1
  64. package/coverage/lcov-report/src/fields/index.html +1 -1
  65. package/coverage/lcov-report/src/fields/update.ts.html +1 -1
  66. package/coverage/lcov-report/src/functions.ts.html +13 -13
  67. package/coverage/lcov-report/src/index.html +155 -20
  68. package/coverage/lcov-report/src/lazy/index.html +1 -1
  69. package/coverage/lcov-report/src/lazy/light.ts.html +1 -1
  70. package/coverage/lcov-report/src/lazy/observable.ts.html +1 -1
  71. package/coverage/lcov-report/src/lazy/promise.ts.html +1 -1
  72. package/coverage/lcov-report/src/lazy/singleton.ts.html +1 -1
  73. package/coverage/lcov-report/src/logger/batch.ts.html +1 -1
  74. package/coverage/lcov-report/src/logger/console.ts.html +1 -1
  75. package/coverage/lcov-report/src/logger/index.html +1 -1
  76. package/coverage/lcov-report/src/logger/index.ts.html +1 -1
  77. package/coverage/lcov-report/src/logger/named.ts.html +1 -1
  78. package/coverage/lcov-report/src/logger/proxy.ts.html +1 -1
  79. package/coverage/lcov-report/src/math/arrays.ts.html +277 -316
  80. package/coverage/lcov-report/src/math/calc.ts.html +1 -1
  81. package/coverage/lcov-report/src/math/distribution.ts.html +1 -1
  82. package/coverage/lcov-report/src/math/index.html +66 -21
  83. package/coverage/lcov-report/src/math/index.ts.html +1 -1
  84. package/coverage/lcov-report/src/observersMap.ts.html +1 -1
  85. package/coverage/lcov-report/src/observingCache.ts.html +1 -1
  86. package/coverage/lcov-report/src/queue/index.html +24 -9
  87. package/coverage/lcov-report/src/queue/parallel.ts.html +1 -1
  88. package/coverage/lcov-report/src/queue/tasks.ts.html +358 -0
  89. package/coverage/lcov-report/src/tempoCache.ts.html +1 -1
  90. package/coverage/lcov-report/src/transitionObserver.ts.html +1 -1
  91. package/coverage/lcov-report/src/types.ts.html +1 -1
  92. package/coverage/lcov-report/src/validation/ValidationErrors.ts.html +1 -1
  93. package/coverage/lcov-report/src/validation/creditCard.ts.html +1 -1
  94. package/coverage/lcov-report/src/validation/helpers.ts.html +1 -1
  95. package/coverage/lcov-report/src/validation/index.html +1 -1
  96. package/coverage/lcov-report/src/validation/index.ts.html +1 -1
  97. package/coverage/lcov-report/src/validation/types.ts.html +1 -1
  98. package/coverage/lcov-report/src/validation/validators.ts.html +1 -1
  99. package/coverage/lcov-report/src/validation/wrappers.ts.html +1 -1
  100. package/coverage/lcov-report/src/viewModels/CommonModel.ts.html +1 -1
  101. package/coverage/lcov-report/src/viewModels/FlagModel.ts.html +1 -1
  102. package/coverage/lcov-report/src/viewModels/LoadingModel.ts.html +2 -5
  103. package/coverage/lcov-report/src/viewModels/MultiSelectModel.ts.html +1 -1
  104. package/coverage/lcov-report/src/viewModels/NumberModel.ts.html +1 -1
  105. package/coverage/lcov-report/src/viewModels/SelectModel.ts.html +1 -1
  106. package/coverage/lcov-report/src/viewModels/TextModel.ts.html +1 -1
  107. package/coverage/lcov-report/src/viewModels/Validatable.ts.html +1 -1
  108. package/coverage/lcov-report/src/viewModels/index.html +130 -10
  109. package/coverage/lcov-report/src/viewModels/wrappers.ts.html +1 -1
  110. package/coverage/lcov-report/structures/helpers/enum.ts.html +1 -1
  111. package/coverage/lcov-report/structures/helpers/index.html +1 -1
  112. package/coverage/lcov-report/structures/index.html +1 -1
  113. package/coverage/lcov-report/structures/queue/index.html +24 -9
  114. package/coverage/lcov-report/structures/queue/parallel.ts.html +1 -1
  115. package/coverage/lcov-report/structures/queue/tasks.ts.html +358 -0
  116. package/coverage/lcov-report/structures/tempoCache.ts.html +1 -1
  117. package/coverage/lcov-report/tasks.ts.html +355 -0
  118. package/coverage/lcov-report/types/comparator.ts.html +1 -1
  119. package/coverage/lcov-report/types/getter.ts.html +1 -1
  120. package/coverage/lcov-report/types/index.html +1 -1
  121. package/coverage/lcov-report/types/index.ts.html +26 -2
  122. package/coverage/lcov-report/validation/ValidationErrors.ts.html +1 -1
  123. package/coverage/lcov-report/validation/creditCard.ts.html +1 -1
  124. package/coverage/lcov-report/validation/helpers.ts.html +1 -1
  125. package/coverage/lcov-report/validation/index.html +1 -1
  126. package/coverage/lcov-report/validation/index.ts.html +1 -1
  127. package/coverage/lcov-report/validation/types.ts.html +1 -1
  128. package/coverage/lcov-report/validation/validators.ts.html +1 -1
  129. package/coverage/lcov-report/validation/wrappers.ts.html +1 -1
  130. package/coverage/lcov.info +112 -24
  131. package/lib/models/File.d.ts +10 -0
  132. package/lib/models/File.d.ts.map +1 -0
  133. package/lib/{web/breakpoints/types.js → models/File.js} +1 -1
  134. package/lib/models/File.js.map +1 -0
  135. package/lib/{abstractions/services/storage.d.ts → storage/abstractions.d.ts} +3 -2
  136. package/lib/storage/abstractions.d.ts.map +1 -0
  137. package/lib/{abstractions/services/storage.js → storage/abstractions.js} +1 -1
  138. package/lib/storage/abstractions.js.map +1 -0
  139. package/lib/storage/asyncWrapper.d.ts +10 -0
  140. package/lib/storage/asyncWrapper.d.ts.map +1 -0
  141. package/lib/storage/asyncWrapper.js +24 -0
  142. package/lib/storage/asyncWrapper.js.map +1 -0
  143. package/lib/storage/index.d.ts +1 -28
  144. package/lib/storage/index.d.ts.map +1 -1
  145. package/lib/storage/index.js +2 -53
  146. package/lib/storage/index.js.map +1 -1
  147. package/lib/storage/keyStorage.d.ts +21 -0
  148. package/lib/storage/keyStorage.d.ts.map +1 -0
  149. package/lib/storage/keyStorage.js +36 -0
  150. package/lib/storage/keyStorage.js.map +1 -0
  151. package/lib/structures/queue/tasks.d.ts +17 -0
  152. package/lib/structures/queue/tasks.d.ts.map +1 -0
  153. package/lib/structures/queue/tasks.js +76 -0
  154. package/lib/structures/queue/tasks.js.map +1 -0
  155. package/lib/types/index.d.ts +4 -0
  156. package/lib/types/index.d.ts.map +1 -1
  157. package/package.json +1 -1
  158. package/src/models/File.ts +14 -0
  159. package/src/{abstractions/services/storage.ts → storage/abstractions.ts} +3 -1
  160. package/src/storage/asyncWrapper.ts +24 -0
  161. package/src/storage/index.ts +1 -62
  162. package/src/storage/keyStorage.ts +40 -0
  163. package/src/structures/queue/__tests__/tasks.test.ts +87 -0
  164. package/src/structures/queue/tasks.ts +91 -0
  165. package/src/types/index.ts +8 -0
  166. package/lib/abstractions/services/storage.d.ts.map +0 -1
  167. package/lib/abstractions/services/storage.js.map +0 -1
  168. package/lib/storage/web/localStorage.d.ts +0 -13
  169. package/lib/storage/web/localStorage.d.ts.map +0 -1
  170. package/lib/storage/web/localStorage.js +0 -29
  171. package/lib/storage/web/localStorage.js.map +0 -1
  172. package/lib/storage/web/sessionStorage.d.ts +0 -13
  173. package/lib/storage/web/sessionStorage.d.ts.map +0 -1
  174. package/lib/storage/web/sessionStorage.js +0 -29
  175. package/lib/storage/web/sessionStorage.js.map +0 -1
  176. package/lib/storage/web/webStorage.d.ts +0 -9
  177. package/lib/storage/web/webStorage.d.ts.map +0 -1
  178. package/lib/storage/web/webStorage.js +0 -24
  179. package/lib/storage/web/webStorage.js.map +0 -1
  180. package/lib/web/breakpoints/index.d.ts +0 -3
  181. package/lib/web/breakpoints/index.d.ts.map +0 -1
  182. package/lib/web/breakpoints/index.js +0 -6
  183. package/lib/web/breakpoints/index.js.map +0 -1
  184. package/lib/web/breakpoints/manager.d.ts +0 -17
  185. package/lib/web/breakpoints/manager.d.ts.map +0 -1
  186. package/lib/web/breakpoints/manager.js +0 -56
  187. package/lib/web/breakpoints/manager.js.map +0 -1
  188. package/lib/web/breakpoints/rem.d.ts +0 -3
  189. package/lib/web/breakpoints/rem.d.ts.map +0 -1
  190. package/lib/web/breakpoints/rem.js +0 -22
  191. package/lib/web/breakpoints/rem.js.map +0 -1
  192. package/lib/web/breakpoints/types.d.ts +0 -22
  193. package/lib/web/breakpoints/types.d.ts.map +0 -1
  194. package/lib/web/breakpoints/types.js.map +0 -1
  195. package/src/storage/web/localStorage.ts +0 -35
  196. package/src/storage/web/sessionStorage.ts +0 -35
  197. package/src/storage/web/webStorage.ts +0 -29
  198. package/src/web/breakpoints/index.ts +0 -3
  199. package/src/web/breakpoints/manager.ts +0 -65
  200. package/src/web/breakpoints/rem.ts +0 -24
  201. package/src/web/breakpoints/types.ts +0 -26
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">14.47% </span>
26
+ <span class="strong">100% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>23/159</span>
28
+ <span class='fraction'>151/151</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">0% </span>
33
+ <span class="strong">96.77% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>0/65</span>
35
+ <span class='fraction'>60/62</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">0% </span>
40
+ <span class="strong">100% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>0/31</span>
42
+ <span class='fraction'>29/29</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">15.75% </span>
47
+ <span class="strong">100% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>23/146</span>
49
+ <span class='fraction'>138/138</span>
50
50
  </div>
51
51
 
52
52
 
@@ -61,7 +61,7 @@
61
61
  </div>
62
62
  </template>
63
63
  </div>
64
- <div class='status-line low'></div>
64
+ <div class='status-line high'></div>
65
65
  <pre><table class="coverage">
66
66
  <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
67
  <a name='L2'></a><a href='#L2'>2</a>
@@ -324,566 +324,527 @@
324
324
  <a name='L259'></a><a href='#L259'>259</a>
325
325
  <a name='L260'></a><a href='#L260'>260</a>
326
326
  <a name='L261'></a><a href='#L261'>261</a>
327
- <a name='L262'></a><a href='#L262'>262</a>
328
- <a name='L263'></a><a href='#L263'>263</a>
329
- <a name='L264'></a><a href='#L264'>264</a>
330
- <a name='L265'></a><a href='#L265'>265</a>
331
- <a name='L266'></a><a href='#L266'>266</a>
332
- <a name='L267'></a><a href='#L267'>267</a>
333
- <a name='L268'></a><a href='#L268'>268</a>
334
- <a name='L269'></a><a href='#L269'>269</a>
335
- <a name='L270'></a><a href='#L270'>270</a>
336
- <a name='L271'></a><a href='#L271'>271</a>
337
- <a name='L272'></a><a href='#L272'>272</a>
338
- <a name='L273'></a><a href='#L273'>273</a>
339
- <a name='L274'></a><a href='#L274'>274</a>
340
- <a name='L275'></a><a href='#L275'>275</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
341
- <span class="cline-any cline-yes">1x</span>
327
+ <a name='L262'></a><a href='#L262'>262</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">10x</span>
328
+ <span class="cline-any cline-yes">10x</span>
342
329
  <span class="cline-any cline-neutral">&nbsp;</span>
343
- <span class="cline-any cline-yes">1x</span>
344
- <span class="cline-any cline-no">&nbsp;</span>
345
- <span class="cline-any cline-no">&nbsp;</span>
330
+ <span class="cline-any cline-yes">10x</span>
331
+ <span class="cline-any cline-yes">3x</span>
332
+ <span class="cline-any cline-yes">2x</span>
346
333
  <span class="cline-any cline-neutral">&nbsp;</span>
347
334
  <span class="cline-any cline-neutral">&nbsp;</span>
348
- <span class="cline-any cline-no">&nbsp;</span>
349
- <span class="cline-any cline-no">&nbsp;</span>
350
- <span class="cline-any cline-no">&nbsp;</span>
351
- <span class="cline-any cline-no">&nbsp;</span>
352
- <span class="cline-any cline-no">&nbsp;</span>
335
+ <span class="cline-any cline-yes">1x</span>
336
+ <span class="cline-any cline-yes">1x</span>
337
+ <span class="cline-any cline-yes">3x</span>
338
+ <span class="cline-any cline-yes">3x</span>
339
+ <span class="cline-any cline-yes">3x</span>
353
340
  <span class="cline-any cline-neutral">&nbsp;</span>
354
341
  <span class="cline-any cline-neutral">&nbsp;</span>
355
342
  <span class="cline-any cline-neutral">&nbsp;</span>
356
- <span class="cline-any cline-no">&nbsp;</span>
343
+ <span class="cline-any cline-yes">1x</span>
357
344
  <span class="cline-any cline-neutral">&nbsp;</span>
358
345
  <span class="cline-any cline-neutral">&nbsp;</span>
359
- <span class="cline-any cline-yes">1x</span>
360
- <span class="cline-any cline-no">&nbsp;</span>
361
- <span class="cline-any cline-no">&nbsp;</span>
346
+ <span class="cline-any cline-yes">10x</span>
347
+ <span class="cline-any cline-yes">17x</span>
348
+ <span class="cline-any cline-yes">4x</span>
362
349
  <span class="cline-any cline-neutral">&nbsp;</span>
363
350
  <span class="cline-any cline-neutral">&nbsp;</span>
364
- <span class="cline-any cline-no">&nbsp;</span>
365
- <span class="cline-any cline-no">&nbsp;</span>
366
- <span class="cline-any cline-no">&nbsp;</span>
367
- <span class="cline-any cline-no">&nbsp;</span>
368
- <span class="cline-any cline-no">&nbsp;</span>
351
+ <span class="cline-any cline-yes">13x</span>
352
+ <span class="cline-any cline-yes">13x</span>
353
+ <span class="cline-any cline-yes">23x</span>
354
+ <span class="cline-any cline-yes">23x</span>
355
+ <span class="cline-any cline-yes">10x</span>
369
356
  <span class="cline-any cline-neutral">&nbsp;</span>
370
357
  <span class="cline-any cline-neutral">&nbsp;</span>
371
358
  <span class="cline-any cline-neutral">&nbsp;</span>
372
- <span class="cline-any cline-no">&nbsp;</span>
359
+ <span class="cline-any cline-yes">12x</span>
373
360
  <span class="cline-any cline-neutral">&nbsp;</span>
374
361
  <span class="cline-any cline-neutral">&nbsp;</span>
375
- <span class="cline-any cline-yes">1x</span>
376
- <span class="cline-any cline-no">&nbsp;</span>
362
+ <span class="cline-any cline-yes">10x</span>
363
+ <span class="cline-any cline-yes">7x</span>
377
364
  <span class="cline-any cline-neutral">&nbsp;</span>
378
365
  <span class="cline-any cline-neutral">&nbsp;</span>
379
- <span class="cline-any cline-yes">1x</span>
380
- <span class="cline-any cline-no">&nbsp;</span>
366
+ <span class="cline-any cline-yes">10x</span>
367
+ <span class="cline-any cline-yes">7x</span>
381
368
  <span class="cline-any cline-neutral">&nbsp;</span>
382
369
  <span class="cline-any cline-neutral">&nbsp;</span>
383
- <span class="cline-any cline-yes">1x</span>
384
- <span class="cline-any cline-no">&nbsp;</span>
385
- <span class="cline-any cline-no">&nbsp;</span>
370
+ <span class="cline-any cline-yes">10x</span>
371
+ <span class="cline-any cline-yes">5x</span>
372
+ <span class="cline-any cline-yes">2x</span>
386
373
  <span class="cline-any cline-neutral">&nbsp;</span>
387
374
  <span class="cline-any cline-neutral">&nbsp;</span>
388
- <span class="cline-any cline-no">&nbsp;</span>
389
- <span class="cline-any cline-no">&nbsp;</span>
390
- <span class="cline-any cline-no">&nbsp;</span>
391
- <span class="cline-any cline-no">&nbsp;</span>
375
+ <span class="cline-any cline-yes">3x</span>
376
+ <span class="cline-any cline-yes">3x</span>
377
+ <span class="cline-any cline-yes">9x</span>
378
+ <span class="cline-any cline-yes">9x</span>
392
379
  <span class="cline-any cline-neutral">&nbsp;</span>
393
380
  <span class="cline-any cline-neutral">&nbsp;</span>
394
- <span class="cline-any cline-no">&nbsp;</span>
381
+ <span class="cline-any cline-yes">3x</span>
395
382
  <span class="cline-any cline-neutral">&nbsp;</span>
396
383
  <span class="cline-any cline-neutral">&nbsp;</span>
397
- <span class="cline-any cline-yes">1x</span>
398
- <span class="cline-any cline-no">&nbsp;</span>
399
- <span class="cline-any cline-no">&nbsp;</span>
384
+ <span class="cline-any cline-yes">10x</span>
385
+ <span class="cline-any cline-yes">5x</span>
386
+ <span class="cline-any cline-yes">2x</span>
400
387
  <span class="cline-any cline-neutral">&nbsp;</span>
401
388
  <span class="cline-any cline-neutral">&nbsp;</span>
402
- <span class="cline-any cline-no">&nbsp;</span>
403
- <span class="cline-any cline-no">&nbsp;</span>
404
- <span class="cline-any cline-no">&nbsp;</span>
405
- <span class="cline-any cline-no">&nbsp;</span>
389
+ <span class="cline-any cline-yes">3x</span>
390
+ <span class="cline-any cline-yes">3x</span>
391
+ <span class="cline-any cline-yes">7x</span>
392
+ <span class="cline-any cline-yes">4x</span>
406
393
  <span class="cline-any cline-neutral">&nbsp;</span>
407
394
  <span class="cline-any cline-neutral">&nbsp;</span>
408
- <span class="cline-any cline-no">&nbsp;</span>
395
+ <span class="cline-any cline-yes">2x</span>
409
396
  <span class="cline-any cline-neutral">&nbsp;</span>
410
397
  <span class="cline-any cline-neutral">&nbsp;</span>
398
+ <span class="cline-any cline-yes">10x</span>
399
+ <span class="cline-any cline-yes">4x</span>
400
+ <span class="cline-any cline-yes">2x</span>
401
+ <span class="cline-any cline-yes">3x</span>
402
+ <span class="cline-any cline-yes">2x</span>
411
403
  <span class="cline-any cline-yes">1x</span>
412
- <span class="cline-any cline-no">&nbsp;</span>
413
- <span class="cline-any cline-no">&nbsp;</span>
414
- <span class="cline-any cline-no">&nbsp;</span>
415
- <span class="cline-any cline-no">&nbsp;</span>
416
- <span class="cline-any cline-no">&nbsp;</span>
417
404
  <span class="cline-any cline-neutral">&nbsp;</span>
418
405
  <span class="cline-any cline-neutral">&nbsp;</span>
419
406
  <span class="cline-any cline-neutral">&nbsp;</span>
420
407
  <span class="cline-any cline-neutral">&nbsp;</span>
421
- <span class="cline-any cline-no">&nbsp;</span>
408
+ <span class="cline-any cline-yes">2x</span>
422
409
  <span class="cline-any cline-neutral">&nbsp;</span>
423
410
  <span class="cline-any cline-neutral">&nbsp;</span>
424
- <span class="cline-any cline-yes">1x</span>
425
- <span class="cline-any cline-no">&nbsp;</span>
426
- <span class="cline-any cline-no">&nbsp;</span>
411
+ <span class="cline-any cline-yes">10x</span>
412
+ <span class="cline-any cline-yes">8x</span>
413
+ <span class="cline-any cline-yes">2x</span>
427
414
  <span class="cline-any cline-neutral">&nbsp;</span>
428
415
  <span class="cline-any cline-neutral">&nbsp;</span>
429
- <span class="cline-any cline-no">&nbsp;</span>
430
- <span class="cline-any cline-no">&nbsp;</span>
416
+ <span class="cline-any cline-yes">6x</span>
417
+ <span class="cline-any cline-yes">6x</span>
431
418
  <span class="cline-any cline-neutral">&nbsp;</span>
432
419
  <span class="cline-any cline-neutral">&nbsp;</span>
433
420
  <span class="cline-any cline-neutral">&nbsp;</span>
434
421
  <span class="cline-any cline-neutral">&nbsp;</span>
435
422
  <span class="cline-any cline-neutral">&nbsp;</span>
436
- <span class="cline-any cline-no">&nbsp;</span>
437
- <span class="cline-any cline-no">&nbsp;</span>
438
- <span class="cline-any cline-no">&nbsp;</span>
439
- <span class="cline-any cline-no">&nbsp;</span>
440
- <span class="cline-any cline-no">&nbsp;</span>
423
+ <span class="cline-any cline-yes">6x</span>
424
+ <span class="cline-any cline-yes">7x</span>
425
+ <span class="cline-any cline-yes">7x</span>
426
+ <span class="cline-any cline-yes">7x</span>
427
+ <span class="cline-any cline-yes">3x</span>
441
428
  <span class="cline-any cline-neutral">&nbsp;</span>
442
429
  <span class="cline-any cline-neutral">&nbsp;</span>
443
- <span class="cline-any cline-no">&nbsp;</span>
430
+ <span class="cline-any cline-yes">4x</span>
444
431
  <span class="cline-any cline-neutral">&nbsp;</span>
445
432
  <span class="cline-any cline-neutral">&nbsp;</span>
446
- <span class="cline-any cline-no">&nbsp;</span>
447
- <span class="cline-any cline-no">&nbsp;</span>
433
+ <span class="cline-any cline-yes">6x</span>
434
+ <span class="cline-any cline-yes">1x</span>
448
435
  <span class="cline-any cline-neutral">&nbsp;</span>
449
436
  <span class="cline-any cline-neutral">&nbsp;</span>
450
- <span class="cline-any cline-no">&nbsp;</span>
451
- <span class="cline-any cline-no">&nbsp;</span>
437
+ <span class="cline-any cline-yes">6x</span>
438
+ <span class="cline-any cline-yes">6x</span>
452
439
  <span class="cline-any cline-neutral">&nbsp;</span>
453
440
  <span class="cline-any cline-neutral">&nbsp;</span>
454
- <span class="cline-any cline-yes">1x</span>
455
- <span class="cline-any cline-no">&nbsp;</span>
456
- <span class="cline-any cline-no">&nbsp;</span>
441
+ <span class="cline-any cline-yes">10x</span>
442
+ <span class="cline-any cline-yes">9x</span>
443
+ <span class="cline-any cline-yes">2x</span>
457
444
  <span class="cline-any cline-neutral">&nbsp;</span>
458
445
  <span class="cline-any cline-neutral">&nbsp;</span>
459
- <span class="cline-any cline-no">&nbsp;</span>
460
- <span class="cline-any cline-no">&nbsp;</span>
461
- <span class="cline-any cline-no">&nbsp;</span>
446
+ <span class="cline-any cline-yes">7x</span>
447
+ <span class="cline-any cline-yes">7x</span>
448
+ <span class="cline-any cline-yes">7x</span>
462
449
  <span class="cline-any cline-neutral">&nbsp;</span>
463
450
  <span class="cline-any cline-neutral">&nbsp;</span>
464
451
  <span class="cline-any cline-neutral">&nbsp;</span>
465
452
  <span class="cline-any cline-neutral">&nbsp;</span>
466
453
  <span class="cline-any cline-neutral">&nbsp;</span>
467
- <span class="cline-any cline-no">&nbsp;</span>
468
- <span class="cline-any cline-no">&nbsp;</span>
469
- <span class="cline-any cline-no">&nbsp;</span>
454
+ <span class="cline-any cline-yes">7x</span>
455
+ <span class="cline-any cline-yes">9x</span>
456
+ <span class="cline-any cline-yes">2x</span>
470
457
  <span class="cline-any cline-neutral">&nbsp;</span>
471
458
  <span class="cline-any cline-neutral">&nbsp;</span>
472
- <span class="cline-any cline-no">&nbsp;</span>
459
+ <span class="cline-any cline-yes">7x</span>
473
460
  <span class="cline-any cline-neutral">&nbsp;</span>
474
461
  <span class="cline-any cline-neutral">&nbsp;</span>
475
462
  <span class="cline-any cline-neutral">&nbsp;</span>
476
- <span class="cline-any cline-no">&nbsp;</span>
463
+ <span class="cline-any cline-yes">7x</span>
477
464
  <span class="cline-any cline-neutral">&nbsp;</span>
478
- <span class="cline-any cline-no">&nbsp;</span>
465
+ <span class="cline-any cline-yes">1x</span>
479
466
  <span class="cline-any cline-neutral">&nbsp;</span>
480
467
  <span class="cline-any cline-neutral">&nbsp;</span>
481
- <span class="cline-any cline-no">&nbsp;</span>
482
- <span class="cline-any cline-no">&nbsp;</span>
468
+ <span class="cline-any cline-yes">7x</span>
469
+ <span class="cline-any cline-yes">7x</span>
483
470
  <span class="cline-any cline-neutral">&nbsp;</span>
484
471
  <span class="cline-any cline-neutral">&nbsp;</span>
485
- <span class="cline-any cline-yes">1x</span>
486
- <span class="cline-any cline-no">&nbsp;</span>
472
+ <span class="cline-any cline-yes">10x</span>
473
+ <span class="cline-any cline-yes">7x</span>
487
474
  <span class="cline-any cline-neutral">&nbsp;</span>
488
475
  <span class="cline-any cline-neutral">&nbsp;</span>
476
+ <span class="cline-any cline-yes">10x</span>
477
+ <span class="cline-any cline-yes">3x</span>
489
478
  <span class="cline-any cline-yes">1x</span>
490
- <span class="cline-any cline-no">&nbsp;</span>
491
- <span class="cline-any cline-no">&nbsp;</span>
492
479
  <span class="cline-any cline-neutral">&nbsp;</span>
493
480
  <span class="cline-any cline-neutral">&nbsp;</span>
494
- <span class="cline-any cline-no">&nbsp;</span>
495
- <span class="cline-any cline-no">&nbsp;</span>
496
- <span class="cline-any cline-no">&nbsp;</span>
497
- <span class="cline-any cline-no">&nbsp;</span>
498
- <span class="cline-any cline-no">&nbsp;</span>
481
+ <span class="cline-any cline-yes">2x</span>
482
+ <span class="cline-any cline-yes">2x</span>
483
+ <span class="cline-any cline-yes">2x</span>
484
+ <span class="cline-any cline-yes">2x</span>
485
+ <span class="cline-any cline-yes">2x</span>
499
486
  <span class="cline-any cline-neutral">&nbsp;</span>
500
487
  <span class="cline-any cline-neutral">&nbsp;</span>
501
- <span class="cline-any cline-no">&nbsp;</span>
488
+ <span class="cline-any cline-yes">3x</span>
502
489
  <span class="cline-any cline-neutral">&nbsp;</span>
503
490
  <span class="cline-any cline-neutral">&nbsp;</span>
491
+ <span class="cline-any cline-yes">10x</span>
492
+ <span class="cline-any cline-yes">4x</span>
504
493
  <span class="cline-any cline-yes">1x</span>
505
- <span class="cline-any cline-no">&nbsp;</span>
506
- <span class="cline-any cline-no">&nbsp;</span>
507
494
  <span class="cline-any cline-neutral">&nbsp;</span>
508
495
  <span class="cline-any cline-neutral">&nbsp;</span>
509
- <span class="cline-any cline-no">&nbsp;</span>
510
- <span class="cline-any cline-no">&nbsp;</span>
496
+ <span class="cline-any cline-yes">2x</span>
497
+ <span class="cline-any cline-yes">2x</span>
511
498
  <span class="cline-any cline-neutral">&nbsp;</span>
512
499
  <span class="cline-any cline-neutral">&nbsp;</span>
513
- <span class="cline-any cline-yes">1x</span>
514
- <span class="cline-any cline-no">&nbsp;</span>
515
- <span class="cline-any cline-no">&nbsp;</span>
516
- <span class="cline-any cline-no">&nbsp;</span>
500
+ <span class="cline-any cline-yes">10x</span>
501
+ <span class="cline-any cline-yes">5x</span>
502
+ <span class="cline-any cline-yes">5x</span>
503
+ <span class="cline-any cline-yes">5x</span>
517
504
  <span class="cline-any cline-neutral">&nbsp;</span>
518
505
  <span class="cline-any cline-neutral">&nbsp;</span>
519
506
  <span class="cline-any cline-neutral">&nbsp;</span>
520
507
  <span class="cline-any cline-neutral">&nbsp;</span>
521
508
  <span class="cline-any cline-neutral">&nbsp;</span>
522
509
  <span class="cline-any cline-neutral">&nbsp;</span>
523
- <span class="cline-any cline-yes">1x</span>
524
- <span class="cline-any cline-no">&nbsp;</span>
510
+ <span class="cline-any cline-yes">10x</span>
511
+ <span class="cline-any cline-yes">4x</span>
525
512
  <span class="cline-any cline-neutral">&nbsp;</span>
526
- <span class="cline-any cline-no">&nbsp;</span>
527
- <span class="cline-any cline-no">&nbsp;</span>
528
- <span class="cline-any cline-no">&nbsp;</span>
513
+ <span class="cline-any cline-yes">4x</span>
514
+ <span class="cline-any cline-yes">4x</span>
515
+ <span class="cline-any cline-yes">4x</span>
529
516
  <span class="cline-any cline-neutral">&nbsp;</span>
530
517
  <span class="cline-any cline-neutral">&nbsp;</span>
531
- <span class="cline-any cline-no">&nbsp;</span>
518
+ <span class="cline-any cline-yes">4x</span>
532
519
  <span class="cline-any cline-neutral">&nbsp;</span>
533
520
  <span class="cline-any cline-neutral">&nbsp;</span>
534
- <span class="cline-any cline-yes">1x</span>
535
- <span class="cline-any cline-no">&nbsp;</span>
536
- <span class="cline-any cline-no">&nbsp;</span>
537
- <span class="cline-any cline-no">&nbsp;</span>
538
- <span class="cline-any cline-no">&nbsp;</span>
539
- <span class="cline-any cline-no">&nbsp;</span>
540
- <span class="cline-any cline-no">&nbsp;</span>
541
- <span class="cline-any cline-no">&nbsp;</span>
542
- <span class="cline-any cline-neutral">&nbsp;</span>
521
+ <span class="cline-any cline-yes">10x</span>
522
+ <span class="cline-any cline-yes">2x</span>
523
+ <span class="cline-any cline-yes">2x</span>
524
+ <span class="cline-any cline-yes">4x</span>
525
+ <span class="cline-any cline-yes">4x</span>
526
+ <span class="cline-any cline-yes">4x</span>
527
+ <span class="cline-any cline-yes">3x</span>
528
+ <span class="cline-any cline-yes">3x</span>
543
529
  <span class="cline-any cline-neutral">&nbsp;</span>
544
- <span class="cline-any cline-no">&nbsp;</span>
545
530
  <span class="cline-any cline-neutral">&nbsp;</span>
546
- <span class="cline-any cline-neutral">&nbsp;</span>
547
- <span class="cline-any cline-no">&nbsp;</span>
531
+ <span class="cline-any cline-yes">4x</span>
548
532
  <span class="cline-any cline-neutral">&nbsp;</span>
549
533
  <span class="cline-any cline-neutral">&nbsp;</span>
550
534
  <span class="cline-any cline-yes">1x</span>
551
- <span class="cline-any cline-no">&nbsp;</span>
552
- <span class="cline-any cline-no">&nbsp;</span>
553
- <span class="cline-any cline-no">&nbsp;</span>
554
- <span class="cline-any cline-no">&nbsp;</span>
555
535
  <span class="cline-any cline-neutral">&nbsp;</span>
556
536
  <span class="cline-any cline-neutral">&nbsp;</span>
557
- <span class="cline-any cline-no">&nbsp;</span>
537
+ <span class="cline-any cline-yes">10x</span>
538
+ <span class="cline-any cline-yes">2x</span>
539
+ <span class="cline-any cline-yes">2x</span>
540
+ <span class="cline-any cline-yes">4x</span>
541
+ <span class="cline-any cline-yes">4x</span>
558
542
  <span class="cline-any cline-neutral">&nbsp;</span>
559
543
  <span class="cline-any cline-neutral">&nbsp;</span>
560
544
  <span class="cline-any cline-yes">1x</span>
561
- <span class="cline-any cline-no">&nbsp;</span>
562
- <span class="cline-any cline-no">&nbsp;</span>
563
545
  <span class="cline-any cline-neutral">&nbsp;</span>
564
- <span class="cline-any cline-no">&nbsp;</span>
565
- <span class="cline-any cline-no">&nbsp;</span>
566
546
  <span class="cline-any cline-neutral">&nbsp;</span>
547
+ <span class="cline-any cline-yes">10x</span>
548
+ <span class="cline-any cline-yes">2x</span>
549
+ <span class="cline-any cline-yes">2x</span>
567
550
  <span class="cline-any cline-neutral">&nbsp;</span>
551
+ <span class="cline-any cline-yes">2x</span>
552
+ <span class="cline-any cline-yes">4x</span>
568
553
  <span class="cline-any cline-neutral">&nbsp;</span>
569
554
  <span class="cline-any cline-neutral">&nbsp;</span>
570
- <span class="cline-any cline-no">&nbsp;</span>
571
555
  <span class="cline-any cline-neutral">&nbsp;</span>
572
556
  <span class="cline-any cline-neutral">&nbsp;</span>
573
557
  <span class="cline-any cline-yes">1x</span>
574
- <span class="cline-any cline-no">&nbsp;</span>
575
- <span class="cline-any cline-no">&nbsp;</span>
576
- <span class="cline-any cline-neutral">&nbsp;</span>
577
- <span class="cline-any cline-neutral">&nbsp;</span>
578
- <span class="cline-any cline-no">&nbsp;</span>
579
558
  <span class="cline-any cline-neutral">&nbsp;</span>
580
559
  <span class="cline-any cline-neutral">&nbsp;</span>
560
+ <span class="cline-any cline-yes">10x</span>
561
+ <span class="cline-any cline-yes">4x</span>
562
+ <span class="cline-any cline-yes">1x</span>
581
563
  <span class="cline-any cline-neutral">&nbsp;</span>
582
564
  <span class="cline-any cline-neutral">&nbsp;</span>
583
- <span class="cline-any cline-yes">1x</span>
584
- <span class="cline-any cline-no">&nbsp;</span>
565
+ <span class="cline-any cline-yes">7x</span>
585
566
  <span class="cline-any cline-neutral">&nbsp;</span>
586
567
  <span class="cline-any cline-neutral">&nbsp;</span>
587
- <span class="cline-any cline-no">&nbsp;</span>
588
- <span class="cline-any cline-no">&nbsp;</span>
589
568
  <span class="cline-any cline-neutral">&nbsp;</span>
590
569
  <span class="cline-any cline-neutral">&nbsp;</span>
591
- <span class="cline-any cline-no">&nbsp;</span>
570
+ <span class="cline-any cline-yes">10x</span>
571
+ <span class="cline-any cline-yes">3x</span>
592
572
  <span class="cline-any cline-neutral">&nbsp;</span>
593
573
  <span class="cline-any cline-neutral">&nbsp;</span>
574
+ <span class="cline-any cline-yes">3x</span>
594
575
  <span class="cline-any cline-yes">1x</span>
595
- <span class="cline-any cline-no">&nbsp;</span>
596
- <span class="cline-any cline-no">&nbsp;</span>
597
- <span class="cline-any cline-no">&nbsp;</span>
598
- <span class="cline-any cline-neutral">&nbsp;</span>
599
- <span class="cline-any cline-no">&nbsp;</span>
600
576
  <span class="cline-any cline-neutral">&nbsp;</span>
601
577
  <span class="cline-any cline-neutral">&nbsp;</span>
602
- <span class="cline-any cline-yes">1x</span>
603
- <span class="cline-any cline-no">&nbsp;</span>
604
- <span class="cline-any cline-no">&nbsp;</span>
605
- <span class="cline-any cline-no">&nbsp;</span>
606
- <span class="cline-any cline-no">&nbsp;</span>
607
- <span class="cline-any cline-no">&nbsp;</span>
578
+ <span class="cline-any cline-yes">2x</span>
608
579
  <span class="cline-any cline-neutral">&nbsp;</span>
609
580
  <span class="cline-any cline-neutral">&nbsp;</span>
610
- <span class="cline-any cline-no">&nbsp;</span>
611
- <span class="cline-any cline-no">&nbsp;</span>
581
+ <span class="cline-any cline-yes">10x</span>
582
+ <span class="cline-any cline-yes">1x</span>
583
+ <span class="cline-any cline-yes">1x</span>
584
+ <span class="cline-any cline-yes">5x</span>
612
585
  <span class="cline-any cline-neutral">&nbsp;</span>
586
+ <span class="cline-any cline-yes">1x</span>
613
587
  <span class="cline-any cline-neutral">&nbsp;</span>
614
588
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { Comparator, Getter, Predicate } from '../types';
615
589
  import { random } from './calc';
616
590
  &nbsp;
617
- export function <span class="fstat-no" title="function not covered" >arrayCompareG&lt;</span>T&gt;(arr: ReadonlyArray&lt;T&gt;, cond: (current: T, previous: T) =&gt; boolean): T {
618
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!Array.isArray(arr) || arr.length &lt;= 0) {</span>
619
- <span class="cstat-no" title="statement not covered" > return null;</span>
591
+ export function arrayCompareG&lt;T&gt;(arr: ReadonlyArray&lt;T&gt;, cond: (current: T, previous: T) =&gt; boolean): T {
592
+ if (!Array.isArray(arr) || arr.length &lt;= 0) {
593
+ return null;
620
594
  }
621
595
  &nbsp;
622
- let result: T = <span class="cstat-no" title="statement not covered" >null;</span>
623
- <span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >0;</span> i &lt; arr.length; i++) {</span>
624
- const current: T = <span class="cstat-no" title="statement not covered" >arr[i];</span>
625
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (cond(current, result)) {</span>
626
- <span class="cstat-no" title="statement not covered" > result = current;</span>
596
+ let result: T = null;
597
+ for (let i = 0; i &lt; arr.length; i++) {
598
+ const current: T = arr[i];
599
+ if (cond(current, result)) {
600
+ result = current;
627
601
  }
628
602
  }
629
603
  &nbsp;
630
- <span class="cstat-no" title="statement not covered" > return result;</span>
604
+ return result;
631
605
  }
632
606
  &nbsp;
633
- export function <span class="fstat-no" title="function not covered" >arrayCompare(</span>arr: number[], absolute: boolean, cond: (i: number, t: number) =&gt; boolean) {
634
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!Array.isArray(arr) || arr.length &lt;= 0) {</span>
635
- <span class="cstat-no" title="statement not covered" > return null;</span>
607
+ export function arrayCompare(arr: number[], absolute: boolean, cond: (i: number, t: number) =&gt; boolean) {
608
+ if (!Array.isArray(arr) || arr.length &lt;= 0) {
609
+ return null;
636
610
  }
637
611
  &nbsp;
638
- let max = <span class="cstat-no" title="statement not covered" >arr[0];</span>
639
- <span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >1;</span> i &lt; arr.length; i++) {</span>
640
- const e = <span class="cstat-no" title="statement not covered" >absolute ? Math.abs(arr[i]) : arr[i];</span>
641
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (cond(e, max)) {</span>
642
- <span class="cstat-no" title="statement not covered" > max = e;</span>
612
+ let max = arr[0];
613
+ for (let i = 1; i &lt; arr.length; i++) {
614
+ const e = absolute ? Math.abs(arr[i]) : arr[i];
615
+ if (cond(e, max)) {
616
+ max = e;
643
617
  }
644
618
  }
645
619
  &nbsp;
646
- <span class="cstat-no" title="statement not covered" > return max;</span>
620
+ return max;
647
621
  }
648
622
  &nbsp;
649
- export function <span class="fstat-no" title="function not covered" >arrayMax(</span>arr: number[], absolute = <span class="branch-0 cbranch-no" title="branch not covered" >false)</span> {
650
- <span class="cstat-no" title="statement not covered" > return arrayCompare(arr, absolute, <span class="fstat-no" title="function not covered" >(e</span>, max) =&gt; <span class="cstat-no" title="statement not covered" >e &gt; max)</span>;</span>
623
+ export function arrayMax(arr: number[], absolute = false) {
624
+ return arrayCompare(arr, absolute, (e, max) =&gt; e &gt; max);
651
625
  }
652
626
  &nbsp;
653
- export function <span class="fstat-no" title="function not covered" >arrayMin(</span>arr: number[], absolute = <span class="branch-0 cbranch-no" title="branch not covered" >false)</span> {
654
- <span class="cstat-no" title="statement not covered" > return arrayCompare(arr, absolute, <span class="fstat-no" title="function not covered" >(e</span>, min) =&gt; <span class="cstat-no" title="statement not covered" >e &lt; min)</span>;</span>
627
+ export function arrayMin(arr: number[], absolute = false) {
628
+ return arrayCompare(arr, absolute, (e, min) =&gt; e &lt; min);
655
629
  }
656
630
  &nbsp;
657
- export function <span class="fstat-no" title="function not covered" >arrayAverage(</span>arr: number[], absolute = <span class="branch-0 cbranch-no" title="branch not covered" >false)</span> {
658
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!Array.isArray(arr) || arr.length &lt;= 0) {</span>
659
- <span class="cstat-no" title="statement not covered" > return 0;</span>
631
+ export function arrayAverage(arr: number[], absolute = false) {
632
+ if (!Array.isArray(arr) || arr.length &lt;= 0) {
633
+ return 0;
660
634
  }
661
635
  &nbsp;
662
- let sum = <span class="cstat-no" title="statement not covered" >0;</span>
663
- <span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >0;</span> i &lt; arr.length; i++) {</span>
664
- const e = <span class="cstat-no" title="statement not covered" >absolute ? Math.abs(arr[i]) : arr[i];</span>
665
- <span class="cstat-no" title="statement not covered" > sum += e;</span>
636
+ let sum = 0;
637
+ for (let i = 0; i &lt; arr.length; i++) {
638
+ const e = absolute ? Math.abs(arr[i]) : arr[i];
639
+ sum += e;
666
640
  }
667
641
  &nbsp;
668
- <span class="cstat-no" title="statement not covered" > return sum / arr.length;</span>
642
+ return sum / arr.length;
669
643
  }
670
644
  &nbsp;
671
- export function <span class="fstat-no" title="function not covered" >arrayCount&lt;</span>T&gt;(arr: ReadonlyArray&lt;T&gt;, condition: (o: T) =&gt; boolean): number {
672
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!arr || !arr.length) {</span>
673
- <span class="cstat-no" title="statement not covered" > return 0;</span>
645
+ export function arrayCount&lt;T&gt;(arr: ReadonlyArray&lt;T&gt;, condition: (o: T) =&gt; boolean): number {
646
+ if (!arr || !arr.length) {
647
+ return 0;
674
648
  }
675
649
  &nbsp;
676
- let count = <span class="cstat-no" title="statement not covered" >0;</span>
677
- <span class="cstat-no" title="statement not covered" > arr.forEach(<span class="fstat-no" title="function not covered" >a </span>=&gt; {</span>
678
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (condition(a)) {</span>
679
- <span class="cstat-no" title="statement not covered" > ++count;</span>
650
+ let count = 0;
651
+ arr.forEach(a =&gt; {
652
+ if (condition(a)) {
653
+ ++count;
680
654
  }
681
655
  });
682
- <span class="cstat-no" title="statement not covered" > return count;</span>
656
+ return count;
683
657
  }
684
658
  &nbsp;
685
- export function <span class="fstat-no" title="function not covered" >arrayFirstResult&lt;</span>T, V&gt;(arr: ReadonlyArray&lt;T&gt;, mapper: (o: T) =&gt; V | null | false): V | null | false {
686
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (arr?.length) {</span>
687
- <span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >0;</span> i &lt; arr.length; ++i) {</span>
688
- const r = <span class="cstat-no" title="statement not covered" >mapper(arr[i]);</span>
689
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (r) {</span>
690
- <span class="cstat-no" title="statement not covered" > return r;</span>
659
+ export function arrayFirstResult&lt;T, V&gt;(arr: ReadonlyArray&lt;T&gt;, mapper: (o: T) =&gt; V | null | false): V | null | false {
660
+ if (arr?.length) {
661
+ for (let i = 0; i &lt; arr.length; ++i) {
662
+ const r = mapper(arr[i]);
663
+ if (r) {
664
+ return r;
691
665
  }
692
666
  }
693
667
  }
694
668
  &nbsp;
695
- <span class="cstat-no" title="statement not covered" > return false;</span>
669
+ return false;
696
670
  }
697
671
  &nbsp;
698
- export function <span class="fstat-no" title="function not covered" >arraysCompare&lt;</span>T&gt;(base: readonly T[], target: readonly T[], comparator?: Comparator&lt;T&gt;) {
699
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!base || !target) {</span>
700
- <span class="cstat-no" title="statement not covered" > return null;</span>
672
+ export function arraysCompare&lt;T&gt;(base: readonly T[], target: readonly T[], comparator?: Comparator&lt;T&gt;) {
673
+ if (!base || !target) {
674
+ return null;
701
675
  }
702
676
  &nbsp;
703
- const compare = <span class="cstat-no" title="statement not covered" >comparator || Comparator.Default;</span>
704
- const result = <span class="cstat-no" title="statement not covered" >{</span>
677
+ const compare = comparator || Comparator.Default;
678
+ const result = {
705
679
  missing: [] as T[],
706
680
  extra: [] as T[],
707
681
  diff: 0,
708
682
  };
709
683
  &nbsp;
710
- <span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >0;</span> i &lt; base.length; ++i) {</span>
711
- const baseItem = <span class="cstat-no" title="statement not covered" >base[i];</span>
712
- const targetItem = <span class="cstat-no" title="statement not covered" >target[i];</span>
713
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (compare(baseItem, targetItem)) {</span>
714
- <span class="cstat-no" title="statement not covered" > continue;</span>
684
+ for (let i = 0; i &lt; base.length; ++i) {
685
+ const baseItem = base[i];
686
+ const targetItem = target[i];
687
+ if (compare(baseItem, targetItem)) {
688
+ continue;
715
689
  }
716
690
  &nbsp;
717
- <span class="cstat-no" title="statement not covered" > result.missing.push(baseItem);</span>
691
+ result.missing.push(baseItem);
718
692
  }
719
693
  &nbsp;
720
- <span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >base.length;</span> i &lt; target.length; ++i) {</span>
721
- <span class="cstat-no" title="statement not covered" > result.extra.push(target[i]);</span>
694
+ for (let i = base.length; i &lt; target.length; ++i) {
695
+ result.extra.push(target[i]);
722
696
  }
723
697
  &nbsp;
724
- <span class="cstat-no" title="statement not covered" > result.diff = result.missing.length + result.extra.length;</span>
725
- <span class="cstat-no" title="statement not covered" > return result;</span>
698
+ result.diff = result.missing.length + result.extra.length;
699
+ return result;
726
700
  }
727
701
  &nbsp;
728
- export function <span class="fstat-no" title="function not covered" >arraysCompareDistinct&lt;</span>T&gt;(base: readonly T[], target: readonly T[]) {
729
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!base || !target) {</span>
730
- <span class="cstat-no" title="statement not covered" > return null;</span>
702
+ export function arraysCompareDistinct&lt;T&gt;(base: readonly T[], target: readonly T[]) {
703
+ if (!base || !target) {
704
+ return null;
731
705
  }
732
706
  &nbsp;
733
- const baseSet = <span class="cstat-no" title="statement not covered" >new Set(base);</span>
734
- const targetSet = <span class="cstat-no" title="statement not covered" >new Set(target);</span>
735
- const result = <span class="cstat-no" title="statement not covered" >{</span>
707
+ const baseSet = new Set(base);
708
+ const targetSet = new Set(target);
709
+ const result = {
736
710
  missing: [] as T[],
737
711
  extra: [] as T[],
738
712
  diff: 0,
739
713
  };
740
714
  &nbsp;
741
- <span class="cstat-no" title="statement not covered" > for (const item of baseSet) {</span>
742
- <span class="cstat-no" title="statement not covered" > if (!targetSet.has(item)) {</span>
743
- <span class="cstat-no" title="statement not covered" > result.missing.push(item);</span>
715
+ for (const item of baseSet) {
716
+ if (!targetSet.has(item)) {
717
+ result.missing.push(item);
744
718
  } else {
745
719
  // reduce iterations for 'extra'
746
- <span class="cstat-no" title="statement not covered" > targetSet.delete(item);</span>
720
+ targetSet.delete(item);
747
721
  }
748
722
  }
749
723
  &nbsp;
750
- <span class="cstat-no" title="statement not covered" > for (const item of targetSet) {</span>
724
+ for (const item of targetSet) {
751
725
  // all items left in 'target' is missing in 'base'
752
- <span class="cstat-no" title="statement not covered" > result.extra.push(item);</span>
726
+ result.extra.push(item);
753
727
  }
754
728
  &nbsp;
755
- <span class="cstat-no" title="statement not covered" > result.diff = result.missing.length + result.extra.length;</span>
756
- <span class="cstat-no" title="statement not covered" > return result;</span>
729
+ result.diff = result.missing.length + result.extra.length;
730
+ return result;
757
731
  }
758
732
  &nbsp;
759
- export function <span class="fstat-no" title="function not covered" >arrayDistinct&lt;</span>T&gt;(arr: readonly T[]) {
760
- <span class="cstat-no" title="statement not covered" > return Array.from(new Set(arr || []));</span>
733
+ export function arrayDistinct&lt;T&gt;(arr: readonly T[]) {
734
+ return Array.from(new Set(arr || []));
761
735
  }
762
736
  &nbsp;
763
- export function <span class="fstat-no" title="function not covered" >normalize(</span>arr: number[]): number[] {
764
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (arr.length === 0) {</span>
765
- <span class="cstat-no" title="statement not covered" > return arr;</span>
737
+ export function normalize(arr: number[]): number[] {
738
+ if (arr.length === 0) {
739
+ return arr;
766
740
  }
767
741
  &nbsp;
768
- const min = <span class="cstat-no" title="statement not covered" >arrayMin(arr);</span>
769
- const max = <span class="cstat-no" title="statement not covered" >arrayMax(arr);</span>
770
- const dist = <span class="cstat-no" title="statement not covered" >max - min;</span>
771
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (Math.abs(dist) &lt; 0.000001) { // almost zero</span>
772
- <span class="cstat-no" title="statement not covered" > return arr.map(<span class="fstat-no" title="function not covered" >() =</span>&gt; <span class="cstat-no" title="statement not covered" >1)</span>;</span>
742
+ const min = arrayMin(arr);
743
+ const max = arrayMax(arr);
744
+ const dist = max - min;
745
+ if (Math.abs(dist) &lt; 0.000001) { // almost zero
746
+ return arr.map(() =&gt; 1);
773
747
  }
774
748
  &nbsp;
775
- <span class="cstat-no" title="statement not covered" > return arr.map(<span class="fstat-no" title="function not covered" >x </span>=&gt; <span class="cstat-no" title="statement not covered" >(x - min) / dist)</span>;</span>
749
+ return arr.map(x =&gt; (x - min) / dist);
776
750
  }
777
751
  &nbsp;
778
- export function <span class="fstat-no" title="function not covered" >randomArrayItem&lt;</span>T&gt;(arr: T[]): T {
779
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!arr.length) {</span>
780
- <span class="cstat-no" title="statement not covered" > return null;</span>
752
+ export function randomArrayItem&lt;T&gt;(arr: T[]): T {
753
+ if (!arr.length) {
754
+ return null;
781
755
  }
782
756
  &nbsp;
783
- const i = <span class="cstat-no" title="statement not covered" >random(0, arr.length - 1);</span>
784
- <span class="cstat-no" title="statement not covered" > return arr[i];</span>
757
+ const i = random(0, arr.length - 1);
758
+ return arr[i];
785
759
  }
786
760
  &nbsp;
787
- export function <span class="fstat-no" title="function not covered" >arraySwap&lt;</span>T&gt;(arr: T[], i1: number, i2: number) {
788
- const x = <span class="cstat-no" title="statement not covered" >arr[i1];</span>
789
- <span class="cstat-no" title="statement not covered" > arr[i1] = arr[i2];</span>
790
- <span class="cstat-no" title="statement not covered" > arr[i2] = x;</span>
761
+ export function arraySwap&lt;T&gt;(arr: T[], i1: number, i2: number) {
762
+ const x = arr[i1];
763
+ arr[i1] = arr[i2];
764
+ arr[i2] = x;
791
765
  }
792
766
  &nbsp;
793
767
  export function shuffle&lt;T&gt;(arr: T[], slice: false): T[];
794
768
  export function shuffle&lt;T&gt;(arr: ReadonlyArray&lt;T&gt;): T[];
795
769
  export function shuffle&lt;T&gt;(arr: ReadonlyArray&lt;T&gt;, slice: true): T[];
796
770
  &nbsp;
797
- export function <span class="fstat-no" title="function not covered" >shuffle&lt;</span>T&gt;(arr: T[], slice = <span class="branch-0 cbranch-no" title="branch not covered" >true)</span>: T[] {
798
- const res = <span class="cstat-no" title="statement not covered" >(slice ? arr?.slice() : arr) || [];</span>
771
+ export function shuffle&lt;T&gt;(arr: T[], slice = true): T[] {
772
+ const res = (slice ? arr?.slice() : <span class="branch-1 cbranch-no" title="branch not covered" >arr)</span> || [];
799
773
  &nbsp;
800
- <span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >0;</span> i &lt; res.length - 1; ++i) {</span>
801
- const nextIndex = <span class="cstat-no" title="statement not covered" >random(i + 1, res.length - 1);</span>
802
- <span class="cstat-no" title="statement not covered" > arraySwap(res, i, nextIndex);</span>
774
+ for (let i = 0; i &lt; res.length - 1; ++i) {
775
+ const nextIndex = random(i + 1, res.length - 1);
776
+ arraySwap(res, i, nextIndex);
803
777
  }
804
778
  &nbsp;
805
- <span class="cstat-no" title="statement not covered" > return res;</span>
779
+ return res;
806
780
  }
807
781
  &nbsp;
808
- export function <span class="fstat-no" title="function not covered" >groupBy&lt;</span>T, K extends string | number&gt;(arr: ReadonlyArray&lt;T&gt;, grouper: (item: T) =&gt; K): Partial&lt;Record&lt;K, T[]&gt;&gt; {
809
- const result: Partial&lt;Record&lt;K, T[]&gt;&gt; = <span class="cstat-no" title="statement not covered" >{ };</span>
810
- <span class="cstat-no" title="statement not covered" > arr.forEach(<span class="fstat-no" title="function not covered" >item </span>=&gt; {</span>
811
- const k = <span class="cstat-no" title="statement not covered" >grouper(item);</span>
812
- let g = <span class="cstat-no" title="statement not covered" >result[k];</span>
813
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!g) {</span>
814
- <span class="cstat-no" title="statement not covered" > g = [];</span>
815
- <span class="cstat-no" title="statement not covered" > result[k] = g;</span>
782
+ export function groupBy&lt;T, K extends string | number&gt;(arr: ReadonlyArray&lt;T&gt;, grouper: (item: T) =&gt; K): Partial&lt;Record&lt;K, T[]&gt;&gt; {
783
+ const result: Partial&lt;Record&lt;K, T[]&gt;&gt; = { };
784
+ arr.forEach(item =&gt; {
785
+ const k = grouper(item);
786
+ let g = result[k];
787
+ if (!g) {
788
+ g = [];
789
+ result[k] = g;
816
790
  }
817
791
  &nbsp;
818
- <span class="cstat-no" title="statement not covered" > g.push(item);</span>
792
+ g.push(item);
819
793
  });
820
794
  &nbsp;
821
- <span class="cstat-no" title="statement not covered" > return result;</span>
795
+ return result;
822
796
  }
823
797
  &nbsp;
824
- export function <span class="fstat-no" title="function not covered" >groupOneBy&lt;</span>T, K extends string | number&gt;(arr: ReadonlyArray&lt;T&gt;, grouper: (item: T) =&gt; K): Partial&lt;Record&lt;K, T&gt;&gt; {
825
- const result: Partial&lt;Record&lt;K, T&gt;&gt; = <span class="cstat-no" title="statement not covered" >{ };</span>
826
- <span class="cstat-no" title="statement not covered" > arr.forEach(<span class="fstat-no" title="function not covered" >item </span>=&gt; {</span>
827
- const k = <span class="cstat-no" title="statement not covered" >grouper(item);</span>
828
- <span class="cstat-no" title="statement not covered" > result[k] = item;</span>
798
+ export function groupOneBy&lt;T, K extends string | number&gt;(arr: ReadonlyArray&lt;T&gt;, grouper: (item: T) =&gt; K): Partial&lt;Record&lt;K, T&gt;&gt; {
799
+ const result: Partial&lt;Record&lt;K, T&gt;&gt; = { };
800
+ arr.forEach(item =&gt; {
801
+ const k = grouper(item);
802
+ result[k] = item;
829
803
  });
830
804
  &nbsp;
831
- <span class="cstat-no" title="statement not covered" > return result;</span>
805
+ return result;
832
806
  }
833
807
  &nbsp;
834
- export function <span class="fstat-no" title="function not covered" >arraySplit&lt;</span>T&gt;(arr: ReadonlyArray&lt;T&gt;, predicate: (t: T) =&gt; boolean): [T[], T[]] {
835
- const trueArr: T[] = <span class="cstat-no" title="statement not covered" >[];</span>
836
- const falseArr: T[] = <span class="cstat-no" title="statement not covered" >[];</span>
808
+ export function arraySplit&lt;T&gt;(arr: ReadonlyArray&lt;T&gt;, predicate: (t: T) =&gt; boolean): [T[], T[]] {
809
+ const trueArr: T[] = [];
810
+ const falseArr: T[] = [];
837
811
  &nbsp;
838
- <span class="cstat-no" title="statement not covered" > arr.forEach(<span class="fstat-no" title="function not covered" >a </span>=&gt; {</span>
839
- <span class="cstat-no" title="statement not covered" > (predicate(a)</span>
812
+ arr.forEach(a =&gt; {
813
+ (predicate(a)
840
814
  ? trueArr
841
815
  : falseArr).push(a);
842
816
  });
843
817
  &nbsp;
844
- <span class="cstat-no" title="statement not covered" > return [trueArr, falseArr];</span>
818
+ return [trueArr, falseArr];
845
819
  }
846
820
  &nbsp;
847
- export function <span class="fstat-no" title="function not covered" >findIndexLeast(</span>num: number, arr: number[], sort = <span class="branch-0 cbranch-no" title="branch not covered" >false)</span> {
848
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (sort) {</span>
849
- <span class="cstat-no" title="statement not covered" > arr.sort();</span>
821
+ export function findIndexLeast(num: number, arr: number[], sort = false) {
822
+ if (sort) {
823
+ arr.sort();
850
824
  }
851
825
  &nbsp;
852
- <span class="cstat-no" title="statement not covered" > return arr.findIndex(<span class="fstat-no" title="function not covered" >i </span>=&gt; <span class="cstat-no" title="statement not covered" >i &gt; num)</span>;</span>
826
+ return arr.findIndex(i =&gt; i &gt; num);
853
827
  }
854
828
  &nbsp;
855
829
  type NonFunction&lt;T&gt; = T extends Function ? never : T;
856
830
  &nbsp;
857
- export function <span class="fstat-no" title="function not covered" >removeItem&lt;</span>T&gt;(array: T[], item: NonFunction&lt;T&gt; | Predicate&lt;T&gt;): T {
858
- const index = <span class="cstat-no" title="statement not covered" >typeof item === 'function'</span>
831
+ export function removeItem&lt;T&gt;(array: T[], item: NonFunction&lt;T&gt; | Predicate&lt;T&gt;): T {
832
+ const index = typeof item === 'function'
859
833
  ? array.findIndex(item as Predicate&lt;T&gt;)
860
834
  : array.indexOf(item);
861
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (index &lt; 0) {</span>
862
- <span class="cstat-no" title="statement not covered" > return null;</span>
835
+ if (index &lt; 0) {
836
+ return null;
863
837
  }
864
838
  &nbsp;
865
- <span class="cstat-no" title="statement not covered" > return array.splice(index, 1)[0];</span>
839
+ return array.splice(index, 1)[0];
866
840
  }
867
841
  &nbsp;
868
- export function <span class="fstat-no" title="function not covered" >arrayRepeat&lt;</span>T&gt;(factory: Getter&lt;T&gt;, count = <span class="branch-0 cbranch-no" title="branch not covered" >1)</span> {
869
- const res: T[] = <span class="cstat-no" title="statement not covered" >[];</span>
870
- <span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >0;</span> i &lt; count; ++i) {</span>
871
- <span class="cstat-no" title="statement not covered" > res.push(Getter.getValue(factory));</span>
842
+ export function arrayRepeat&lt;T&gt;(factory: Getter&lt;T&gt;, count = <span class="branch-0 cbranch-no" title="branch not covered" >1)</span> {
843
+ const res: T[] = [];
844
+ for (let i = 0; i &lt; count; ++i) {
845
+ res.push(Getter.getValue(factory));
872
846
  }
873
- <span class="cstat-no" title="statement not covered" > return res;</span>
874
- }
875
- &nbsp;
876
- export function <span class="fstat-no" title="function not covered" >chunkify&lt;</span>T&gt;(array: T[], size: number): T[][] {
877
- <span class="cstat-no" title="statement not covered" > return array.reduce(<span class="fstat-no" title="function not covered" >(r</span>es, item) =&gt; {</span>
878
- let arr = <span class="cstat-no" title="statement not covered" >res[res.length - 1];</span>
879
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!arr || arr.length &gt;= size) {</span>
880
- <span class="cstat-no" title="statement not covered" > arr = [];</span>
881
- <span class="cstat-no" title="statement not covered" > res.push(arr);</span>
882
- }
883
- &nbsp;
884
- <span class="cstat-no" title="statement not covered" > arr.push(item);</span>
885
- <span class="cstat-no" title="statement not covered" > return res;</span>
886
- }, [] as T[][]);
847
+ return res;
887
848
  }
888
849
  &nbsp;</pre></td></tr></table></pre>
889
850
 
@@ -892,7 +853,7 @@ export function <span class="fstat-no" title="function not covered" >chunkify&lt
892
853
  <div class='footer quiet pad2 space-top1 center small'>
893
854
  Code coverage generated by
894
855
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
895
- at 2022-10-29T11:19:43.305Z
856
+ at 2022-10-29T19:51:46.084Z
896
857
  </div>
897
858
  <script src="../../prettify.js"></script>
898
859
  <script>