@fncts/test 0.0.50 → 0.0.52

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 (416) hide show
  1. package/LICENSE +26 -0
  2. package/_cjs/Fragment.cjs +424 -0
  3. package/_cjs/Fragment.cjs.map +1 -0
  4. package/_cjs/api.cjs +97 -83
  5. package/_cjs/api.cjs.map +1 -1
  6. package/_cjs/chunk.cjs +28 -0
  7. package/_cjs/control/AbstractRunnableSpec.cjs +83 -86
  8. package/_cjs/control/AbstractRunnableSpec.cjs.map +1 -1
  9. package/_cjs/control/Annotations/api.cjs +25 -24
  10. package/_cjs/control/Annotations/api.cjs.map +1 -1
  11. package/_cjs/control/Annotations/definition.cjs +20 -23
  12. package/_cjs/control/Annotations/definition.cjs.map +1 -1
  13. package/_cjs/control/Annotations/live.cjs +50 -39
  14. package/_cjs/control/Annotations/live.cjs.map +1 -1
  15. package/_cjs/control/Annotations.cjs +13 -39
  16. package/_cjs/control/Assertion/api.cjs +170 -156
  17. package/_cjs/control/Assertion/api.cjs.map +1 -1
  18. package/_cjs/control/Assertion/definition.cjs +21 -19
  19. package/_cjs/control/Assertion/definition.cjs.map +1 -1
  20. package/_cjs/control/Assertion.cjs +39 -28
  21. package/_cjs/control/AssertionIO/api.cjs +33 -31
  22. package/_cjs/control/AssertionIO/api.cjs.map +1 -1
  23. package/_cjs/control/AssertionIO/definition.cjs +27 -27
  24. package/_cjs/control/AssertionIO/definition.cjs.map +1 -1
  25. package/_cjs/control/AssertionIO.cjs +9 -28
  26. package/_cjs/control/DefaultRunnableSpec.cjs +14 -18
  27. package/_cjs/control/DefaultRunnableSpec.cjs.map +1 -1
  28. package/_cjs/control/DefaultTestReporter/definition.cjs +5 -6
  29. package/_cjs/control/DefaultTestReporter/definition.cjs.map +1 -1
  30. package/_cjs/control/DefaultTestReporter/render.cjs +184 -176
  31. package/_cjs/control/DefaultTestReporter/render.cjs.map +1 -1
  32. package/_cjs/control/DefaultTestReporter.cjs +10 -28
  33. package/_cjs/control/FreeBooleanAlgebraIO/api.cjs +47 -46
  34. package/_cjs/control/FreeBooleanAlgebraIO/api.cjs.map +1 -1
  35. package/_cjs/control/FreeBooleanAlgebraIO/definition.cjs +5 -6
  36. package/_cjs/control/FreeBooleanAlgebraIO/definition.cjs.map +1 -1
  37. package/_cjs/control/FreeBooleanAlgebraIO.cjs +12 -28
  38. package/_cjs/control/Gen/api.cjs +653 -614
  39. package/_cjs/control/Gen/api.cjs.map +1 -1
  40. package/_cjs/control/Gen/constraints.cjs +0 -2
  41. package/_cjs/control/Gen/definition.cjs +13 -14
  42. package/_cjs/control/Gen/definition.cjs.map +1 -1
  43. package/_cjs/control/Gen.cjs +84 -39
  44. package/_cjs/control/Live/definition.cjs +43 -38
  45. package/_cjs/control/Live/definition.cjs.map +1 -1
  46. package/_cjs/control/Live.cjs +6 -17
  47. package/_cjs/control/Sample/api.cjs +143 -145
  48. package/_cjs/control/Sample/api.cjs.map +1 -1
  49. package/_cjs/control/Sample/definition.cjs +15 -15
  50. package/_cjs/control/Sample/definition.cjs.map +1 -1
  51. package/_cjs/control/Sample.cjs +18 -28
  52. package/_cjs/control/Sized/api.cjs +17 -16
  53. package/_cjs/control/Sized/api.cjs.map +1 -1
  54. package/_cjs/control/Sized/definition.cjs +15 -15
  55. package/_cjs/control/Sized/definition.cjs.map +1 -1
  56. package/_cjs/control/Sized/live.cjs +25 -24
  57. package/_cjs/control/Sized/live.cjs.map +1 -1
  58. package/_cjs/control/Sized.cjs +9 -39
  59. package/_cjs/control/Spec/api.cjs +288 -385
  60. package/_cjs/control/Spec/api.cjs.map +1 -1
  61. package/_cjs/control/Spec/definition.cjs +86 -72
  62. package/_cjs/control/Spec/definition.cjs.map +1 -1
  63. package/_cjs/control/Spec.cjs +38 -28
  64. package/_cjs/control/SummaryBuilder.cjs +48 -56
  65. package/_cjs/control/SummaryBuilder.cjs.map +1 -1
  66. package/_cjs/control/Test.cjs +21 -17
  67. package/_cjs/control/Test.cjs.map +1 -1
  68. package/_cjs/control/TestAnnotationRenderer/api.cjs +63 -57
  69. package/_cjs/control/TestAnnotationRenderer/api.cjs.map +1 -1
  70. package/_cjs/control/TestAnnotationRenderer/definition.cjs +36 -31
  71. package/_cjs/control/TestAnnotationRenderer/definition.cjs.map +1 -1
  72. package/_cjs/control/TestAnnotationRenderer.cjs +14 -28
  73. package/_cjs/control/TestAspect/api.cjs +81 -80
  74. package/_cjs/control/TestAspect/api.cjs.map +1 -1
  75. package/_cjs/control/TestAspect/definition.cjs +0 -2
  76. package/_cjs/control/TestAspect.cjs +14 -28
  77. package/_cjs/control/TestClock/api.cjs +44 -32
  78. package/_cjs/control/TestClock/api.cjs.map +1 -1
  79. package/_cjs/control/TestClock/definition.cjs +175 -156
  80. package/_cjs/control/TestClock/definition.cjs.map +1 -1
  81. package/_cjs/control/TestClock.cjs +13 -28
  82. package/_cjs/control/TestConsole/api.cjs +45 -34
  83. package/_cjs/control/TestConsole/api.cjs.map +1 -1
  84. package/_cjs/control/TestConsole/definition.cjs +76 -68
  85. package/_cjs/control/TestConsole/definition.cjs.map +1 -1
  86. package/_cjs/control/TestConsole.cjs +8 -28
  87. package/_cjs/control/TestEnvironment.cjs +31 -23
  88. package/_cjs/control/TestEnvironment.cjs.map +1 -1
  89. package/_cjs/control/TestLogger.cjs +36 -31
  90. package/_cjs/control/TestLogger.cjs.map +1 -1
  91. package/_cjs/control/TestRandom/api.cjs +67 -58
  92. package/_cjs/control/TestRandom/api.cjs.map +1 -1
  93. package/_cjs/control/TestRandom/definition.cjs +332 -343
  94. package/_cjs/control/TestRandom/definition.cjs.map +1 -1
  95. package/_cjs/control/TestRandom.cjs +20 -28
  96. package/_cjs/control/TestRenderer/ConsoleRenderer.cjs +78 -82
  97. package/_cjs/control/TestRenderer/ConsoleRenderer.cjs.map +1 -1
  98. package/_cjs/control/TestRenderer/definition.cjs +0 -2
  99. package/_cjs/control.cjs +0 -2
  100. package/_cjs/data/AssertionData.cjs +35 -31
  101. package/_cjs/data/AssertionData.cjs.map +1 -1
  102. package/_cjs/data/AssertionResult.cjs +23 -21
  103. package/_cjs/data/AssertionResult.cjs.map +1 -1
  104. package/_cjs/data/AssertionValue/api.cjs +39 -40
  105. package/_cjs/data/AssertionValue/api.cjs.map +1 -1
  106. package/_cjs/data/AssertionValue/definition.cjs +27 -24
  107. package/_cjs/data/AssertionValue/definition.cjs.map +1 -1
  108. package/_cjs/data/AssertionValue.cjs +10 -28
  109. package/_cjs/data/ExecutedSpec/api.cjs +71 -90
  110. package/_cjs/data/ExecutedSpec/api.cjs.map +1 -1
  111. package/_cjs/data/ExecutedSpec/definition.cjs +39 -35
  112. package/_cjs/data/ExecutedSpec/definition.cjs.map +1 -1
  113. package/_cjs/data/ExecutedSpec.cjs +15 -28
  114. package/_cjs/data/ExecutionResult.cjs +78 -97
  115. package/_cjs/data/ExecutionResult.cjs.map +1 -1
  116. package/_cjs/data/FailureDetails.cjs +12 -12
  117. package/_cjs/data/FailureDetails.cjs.map +1 -1
  118. package/_cjs/data/FreeBooleanAlgebra/api.cjs +129 -127
  119. package/_cjs/data/FreeBooleanAlgebra/api.cjs.map +1 -1
  120. package/_cjs/data/FreeBooleanAlgebra/definition.cjs +40 -35
  121. package/_cjs/data/FreeBooleanAlgebra/definition.cjs.map +1 -1
  122. package/_cjs/data/FreeBooleanAlgebra.cjs +22 -28
  123. package/_cjs/data/GenFailureDetails.cjs +14 -13
  124. package/_cjs/data/GenFailureDetails.cjs.map +1 -1
  125. package/_cjs/data/LogLine/Fragment.cjs +10 -71
  126. package/_cjs/data/LogLine/Line.cjs +13 -110
  127. package/_cjs/data/LogLine/Message.cjs +13 -114
  128. package/_cjs/data/LogLine/Style.cjs +56 -65
  129. package/_cjs/data/LogLine/Style.cjs.map +1 -1
  130. package/_cjs/data/LogLine/api.cjs +30 -29
  131. package/_cjs/data/LogLine/api.cjs.map +1 -1
  132. package/_cjs/data/LogLine.cjs +24 -28
  133. package/_cjs/data/Render/api.cjs +13 -14
  134. package/_cjs/data/Render/api.cjs.map +1 -1
  135. package/_cjs/data/Render/definition.cjs +37 -31
  136. package/_cjs/data/Render/definition.cjs.map +1 -1
  137. package/_cjs/data/Render.cjs +8 -28
  138. package/_cjs/data/RenderParam/api.cjs +18 -22
  139. package/_cjs/data/RenderParam/api.cjs.map +1 -1
  140. package/_cjs/data/RenderParam/definition.cjs +20 -19
  141. package/_cjs/data/RenderParam/definition.cjs.map +1 -1
  142. package/_cjs/data/RenderParam.cjs +8 -28
  143. package/_cjs/data/Summary.cjs +19 -15
  144. package/_cjs/data/Summary.cjs.map +1 -1
  145. package/_cjs/data/TestAnnotation/api.cjs +55 -40
  146. package/_cjs/data/TestAnnotation/api.cjs.map +1 -1
  147. package/_cjs/data/TestAnnotation/definition.cjs +44 -36
  148. package/_cjs/data/TestAnnotation/definition.cjs.map +1 -1
  149. package/_cjs/data/TestAnnotation.cjs +19 -28
  150. package/_cjs/data/TestAnnotationMap.cjs +36 -33
  151. package/_cjs/data/TestAnnotationMap.cjs.map +1 -1
  152. package/_cjs/data/TestArgs/definition.cjs +14 -13
  153. package/_cjs/data/TestArgs/definition.cjs.map +1 -1
  154. package/_cjs/data/TestArgs.cjs +3 -17
  155. package/_cjs/data/TestConfig.cjs +46 -44
  156. package/_cjs/data/TestConfig.cjs.map +1 -1
  157. package/_cjs/data/TestFailure.cjs +41 -39
  158. package/_cjs/data/TestFailure.cjs.map +1 -1
  159. package/_cjs/data/TestSuccess.cjs +26 -27
  160. package/_cjs/data/TestSuccess.cjs.map +1 -1
  161. package/_cjs/data/TestTimeoutException.cjs +9 -11
  162. package/_cjs/data/TestTimeoutException.cjs.map +1 -1
  163. package/_cjs/data.cjs +0 -2
  164. package/_cjs/global.cjs +0 -2
  165. package/_cjs/index.cjs +0 -2
  166. package/_cjs/util/math.cjs +319 -440
  167. package/_cjs/util/math.cjs.map +1 -1
  168. package/_cjs/util.cjs +0 -2
  169. package/_cjs/vitest.cjs +115 -104
  170. package/_cjs/vitest.cjs.map +1 -1
  171. package/_mjs/Fragment.mjs +237 -0
  172. package/_mjs/Fragment.mjs.map +1 -0
  173. package/_mjs/api.mjs +67 -64
  174. package/_mjs/api.mjs.map +1 -1
  175. package/_mjs/control/AbstractRunnableSpec.mjs +53 -70
  176. package/_mjs/control/AbstractRunnableSpec.mjs.map +1 -1
  177. package/_mjs/control/Annotations/api.mjs +21 -17
  178. package/_mjs/control/Annotations/api.mjs.map +1 -1
  179. package/_mjs/control/Annotations/definition.mjs +14 -14
  180. package/_mjs/control/Annotations/definition.mjs.map +1 -1
  181. package/_mjs/control/Annotations/live.mjs +32 -27
  182. package/_mjs/control/Annotations/live.mjs.map +1 -1
  183. package/_mjs/control/Annotations.mjs +4 -5
  184. package/_mjs/control/Assertion/api.mjs +140 -142
  185. package/_mjs/control/Assertion/api.mjs.map +1 -1
  186. package/_mjs/control/Assertion/definition.mjs +19 -12
  187. package/_mjs/control/Assertion/definition.mjs.map +1 -1
  188. package/_mjs/control/Assertion.mjs +3 -4
  189. package/_mjs/control/AssertionIO/api.mjs +26 -22
  190. package/_mjs/control/AssertionIO/api.mjs.map +1 -1
  191. package/_mjs/control/AssertionIO/definition.mjs +22 -18
  192. package/_mjs/control/AssertionIO/definition.mjs.map +1 -1
  193. package/_mjs/control/AssertionIO.mjs +3 -4
  194. package/_mjs/control/DefaultRunnableSpec.mjs +9 -8
  195. package/_mjs/control/DefaultRunnableSpec.mjs.map +1 -1
  196. package/_mjs/control/DefaultTestReporter/definition.mjs +5 -1
  197. package/_mjs/control/DefaultTestReporter/definition.mjs.map +1 -1
  198. package/_mjs/control/DefaultTestReporter/render.mjs +152 -165
  199. package/_mjs/control/DefaultTestReporter/render.mjs.map +1 -1
  200. package/_mjs/control/DefaultTestReporter.mjs +3 -4
  201. package/_mjs/control/FreeBooleanAlgebraIO/api.mjs +43 -39
  202. package/_mjs/control/FreeBooleanAlgebraIO/api.mjs.map +1 -1
  203. package/_mjs/control/FreeBooleanAlgebraIO/definition.mjs +5 -1
  204. package/_mjs/control/FreeBooleanAlgebraIO/definition.mjs.map +1 -1
  205. package/_mjs/control/FreeBooleanAlgebraIO.mjs +3 -4
  206. package/_mjs/control/Gen/api.mjs +570 -591
  207. package/_mjs/control/Gen/api.mjs.map +1 -1
  208. package/_mjs/control/Gen/constraints.mjs +0 -2
  209. package/_mjs/control/Gen/definition.mjs +13 -8
  210. package/_mjs/control/Gen/definition.mjs.map +1 -1
  211. package/_mjs/control/Gen.mjs +4 -5
  212. package/_mjs/control/Live/definition.mjs +31 -27
  213. package/_mjs/control/Live/definition.mjs.map +1 -1
  214. package/_mjs/control/Live.mjs +2 -3
  215. package/_mjs/control/Sample/api.mjs +109 -126
  216. package/_mjs/control/Sample/api.mjs.map +1 -1
  217. package/_mjs/control/Sample/definition.mjs +15 -9
  218. package/_mjs/control/Sample/definition.mjs.map +1 -1
  219. package/_mjs/control/Sample.mjs +3 -4
  220. package/_mjs/control/Sized/api.mjs +13 -9
  221. package/_mjs/control/Sized/api.mjs.map +1 -1
  222. package/_mjs/control/Sized/definition.mjs +11 -7
  223. package/_mjs/control/Sized/definition.mjs.map +1 -1
  224. package/_mjs/control/Sized/live.mjs +18 -17
  225. package/_mjs/control/Sized/live.mjs.map +1 -1
  226. package/_mjs/control/Sized.mjs +4 -5
  227. package/_mjs/control/Spec/api.mjs +245 -366
  228. package/_mjs/control/Spec/api.mjs.map +1 -1
  229. package/_mjs/control/Spec/definition.mjs +79 -60
  230. package/_mjs/control/Spec/definition.mjs.map +1 -1
  231. package/_mjs/control/Spec.mjs +3 -4
  232. package/_mjs/control/SummaryBuilder.mjs +31 -41
  233. package/_mjs/control/SummaryBuilder.mjs.map +1 -1
  234. package/_mjs/control/Test.mjs +13 -9
  235. package/_mjs/control/Test.mjs.map +1 -1
  236. package/_mjs/control/TestAnnotationRenderer/api.mjs +53 -55
  237. package/_mjs/control/TestAnnotationRenderer/api.mjs.map +1 -1
  238. package/_mjs/control/TestAnnotationRenderer/definition.mjs +25 -19
  239. package/_mjs/control/TestAnnotationRenderer/definition.mjs.map +1 -1
  240. package/_mjs/control/TestAnnotationRenderer.mjs +3 -4
  241. package/_mjs/control/TestAspect/api.mjs +49 -63
  242. package/_mjs/control/TestAspect/api.mjs.map +1 -1
  243. package/_mjs/control/TestAspect/definition.mjs +0 -2
  244. package/_mjs/control/TestAspect.mjs +3 -4
  245. package/_mjs/control/TestClock/api.mjs +24 -20
  246. package/_mjs/control/TestClock/api.mjs.map +1 -1
  247. package/_mjs/control/TestClock/definition.mjs +128 -133
  248. package/_mjs/control/TestClock/definition.mjs.map +1 -1
  249. package/_mjs/control/TestClock.mjs +3 -4
  250. package/_mjs/control/TestConsole/api.mjs +27 -24
  251. package/_mjs/control/TestConsole/api.mjs.map +1 -1
  252. package/_mjs/control/TestConsole/definition.mjs +62 -57
  253. package/_mjs/control/TestConsole/definition.mjs.map +1 -1
  254. package/_mjs/control/TestConsole.mjs +3 -4
  255. package/_mjs/control/TestEnvironment.mjs +14 -10
  256. package/_mjs/control/TestEnvironment.mjs.map +1 -1
  257. package/_mjs/control/TestLogger.mjs +25 -21
  258. package/_mjs/control/TestLogger.mjs.map +1 -1
  259. package/_mjs/control/TestRandom/api.mjs +46 -43
  260. package/_mjs/control/TestRandom/api.mjs.map +1 -1
  261. package/_mjs/control/TestRandom/definition.mjs +311 -327
  262. package/_mjs/control/TestRandom/definition.mjs.map +1 -1
  263. package/_mjs/control/TestRandom.mjs +3 -4
  264. package/_mjs/control/TestRenderer/ConsoleRenderer.mjs +66 -72
  265. package/_mjs/control/TestRenderer/ConsoleRenderer.mjs.map +1 -1
  266. package/_mjs/control/TestRenderer/definition.mjs +0 -2
  267. package/_mjs/control.mjs +0 -2
  268. package/_mjs/data/AssertionData.mjs +27 -22
  269. package/_mjs/data/AssertionData.mjs.map +1 -1
  270. package/_mjs/data/AssertionResult.mjs +18 -12
  271. package/_mjs/data/AssertionResult.mjs.map +1 -1
  272. package/_mjs/data/AssertionValue/api.mjs +34 -32
  273. package/_mjs/data/AssertionValue/api.mjs.map +1 -1
  274. package/_mjs/data/AssertionValue/definition.mjs +24 -17
  275. package/_mjs/data/AssertionValue/definition.mjs.map +1 -1
  276. package/_mjs/data/AssertionValue.mjs +3 -4
  277. package/_mjs/data/ExecutedSpec/api.mjs +64 -80
  278. package/_mjs/data/ExecutedSpec/api.mjs.map +1 -1
  279. package/_mjs/data/ExecutedSpec/definition.mjs +38 -28
  280. package/_mjs/data/ExecutedSpec/definition.mjs.map +1 -1
  281. package/_mjs/data/ExecutedSpec.mjs +3 -4
  282. package/_mjs/data/ExecutionResult.mjs +63 -85
  283. package/_mjs/data/ExecutionResult.mjs.map +1 -1
  284. package/_mjs/data/FailureDetails.mjs +12 -6
  285. package/_mjs/data/FailureDetails.mjs.map +1 -1
  286. package/_mjs/data/FreeBooleanAlgebra/api.mjs +107 -111
  287. package/_mjs/data/FreeBooleanAlgebra/api.mjs.map +1 -1
  288. package/_mjs/data/FreeBooleanAlgebra/definition.mjs +37 -27
  289. package/_mjs/data/FreeBooleanAlgebra/definition.mjs.map +1 -1
  290. package/_mjs/data/FreeBooleanAlgebra.mjs +3 -4
  291. package/_mjs/data/GenFailureDetails.mjs +14 -7
  292. package/_mjs/data/GenFailureDetails.mjs.map +1 -1
  293. package/_mjs/data/LogLine/Fragment.mjs +2 -56
  294. package/_mjs/data/LogLine/Line.mjs +2 -92
  295. package/_mjs/data/LogLine/Message.mjs +2 -98
  296. package/_mjs/data/LogLine/Style.mjs +56 -66
  297. package/_mjs/data/LogLine/Style.mjs.map +1 -1
  298. package/_mjs/data/LogLine/api.mjs +24 -20
  299. package/_mjs/data/LogLine/api.mjs.map +1 -1
  300. package/_mjs/data/LogLine.mjs +3 -3
  301. package/_mjs/data/Render/api.mjs +12 -8
  302. package/_mjs/data/Render/api.mjs.map +1 -1
  303. package/_mjs/data/Render/definition.mjs +31 -22
  304. package/_mjs/data/Render/definition.mjs.map +1 -1
  305. package/_mjs/data/Render.mjs +3 -4
  306. package/_mjs/data/RenderParam/api.mjs +15 -15
  307. package/_mjs/data/RenderParam/api.mjs.map +1 -1
  308. package/_mjs/data/RenderParam/definition.mjs +19 -13
  309. package/_mjs/data/RenderParam/definition.mjs.map +1 -1
  310. package/_mjs/data/RenderParam.mjs +3 -4
  311. package/_mjs/data/Summary.mjs +19 -9
  312. package/_mjs/data/Summary.mjs.map +1 -1
  313. package/_mjs/data/TestAnnotation/api.mjs +34 -30
  314. package/_mjs/data/TestAnnotation/api.mjs.map +1 -1
  315. package/_mjs/data/TestAnnotation/definition.mjs +31 -24
  316. package/_mjs/data/TestAnnotation/definition.mjs.map +1 -1
  317. package/_mjs/data/TestAnnotation.mjs +3 -4
  318. package/_mjs/data/TestAnnotationMap.mjs +28 -23
  319. package/_mjs/data/TestAnnotationMap.mjs.map +1 -1
  320. package/_mjs/data/TestArgs/definition.mjs +14 -7
  321. package/_mjs/data/TestArgs/definition.mjs.map +1 -1
  322. package/_mjs/data/TestArgs.mjs +2 -3
  323. package/_mjs/data/TestConfig.mjs +34 -33
  324. package/_mjs/data/TestConfig.mjs.map +1 -1
  325. package/_mjs/data/TestFailure.mjs +35 -29
  326. package/_mjs/data/TestFailure.mjs.map +1 -1
  327. package/_mjs/data/TestSuccess.mjs +22 -19
  328. package/_mjs/data/TestSuccess.mjs.map +1 -1
  329. package/_mjs/data/TestTimeoutException.mjs +9 -5
  330. package/_mjs/data/TestTimeoutException.mjs.map +1 -1
  331. package/_mjs/data.mjs +0 -2
  332. package/_mjs/global.mjs +0 -2
  333. package/_mjs/index.mjs +0 -2
  334. package/_mjs/util/math.mjs +310 -432
  335. package/_mjs/util/math.mjs.map +1 -1
  336. package/_mjs/util.mjs +0 -2
  337. package/_mjs/vitest.mjs +80 -80
  338. package/_mjs/vitest.mjs.map +1 -1
  339. package/_src/control/TestClock/definition.ts +26 -18
  340. package/_src/control/TestConsole/definition.ts +19 -9
  341. package/_src/control/TestRandom/definition.ts +39 -17
  342. package/_src/data/Summary.ts +3 -1
  343. package/_src/vitest.ts +1 -1
  344. package/control/TestClock/definition.d.ts +4 -4
  345. package/control/TestConsole/definition.d.ts +5 -5
  346. package/control/TestRandom/definition.d.ts +13 -13
  347. package/data/Summary.d.ts +1 -1
  348. package/package.json +14 -5
  349. package/_cjs/control/Annotations.cjs.map +0 -1
  350. package/_cjs/control/Assertion.cjs.map +0 -1
  351. package/_cjs/control/AssertionIO.cjs.map +0 -1
  352. package/_cjs/control/DefaultTestReporter.cjs.map +0 -1
  353. package/_cjs/control/FreeBooleanAlgebraIO.cjs.map +0 -1
  354. package/_cjs/control/Gen/constraints.cjs.map +0 -1
  355. package/_cjs/control/Gen.cjs.map +0 -1
  356. package/_cjs/control/Live.cjs.map +0 -1
  357. package/_cjs/control/Sample.cjs.map +0 -1
  358. package/_cjs/control/Sized.cjs.map +0 -1
  359. package/_cjs/control/Spec.cjs.map +0 -1
  360. package/_cjs/control/TestAnnotationRenderer.cjs.map +0 -1
  361. package/_cjs/control/TestAspect/definition.cjs.map +0 -1
  362. package/_cjs/control/TestAspect.cjs.map +0 -1
  363. package/_cjs/control/TestClock.cjs.map +0 -1
  364. package/_cjs/control/TestConsole.cjs.map +0 -1
  365. package/_cjs/control/TestRandom.cjs.map +0 -1
  366. package/_cjs/control/TestRenderer/definition.cjs.map +0 -1
  367. package/_cjs/control.cjs.map +0 -1
  368. package/_cjs/data/AssertionValue.cjs.map +0 -1
  369. package/_cjs/data/ExecutedSpec.cjs.map +0 -1
  370. package/_cjs/data/FreeBooleanAlgebra.cjs.map +0 -1
  371. package/_cjs/data/LogLine/Fragment.cjs.map +0 -1
  372. package/_cjs/data/LogLine/Line.cjs.map +0 -1
  373. package/_cjs/data/LogLine/Message.cjs.map +0 -1
  374. package/_cjs/data/LogLine.cjs.map +0 -1
  375. package/_cjs/data/Render.cjs.map +0 -1
  376. package/_cjs/data/RenderParam.cjs.map +0 -1
  377. package/_cjs/data/TestAnnotation.cjs.map +0 -1
  378. package/_cjs/data/TestArgs.cjs.map +0 -1
  379. package/_cjs/data.cjs.map +0 -1
  380. package/_cjs/global.cjs.map +0 -1
  381. package/_cjs/index.cjs.map +0 -1
  382. package/_cjs/util.cjs.map +0 -1
  383. package/_mjs/control/Annotations.mjs.map +0 -1
  384. package/_mjs/control/Assertion.mjs.map +0 -1
  385. package/_mjs/control/AssertionIO.mjs.map +0 -1
  386. package/_mjs/control/DefaultTestReporter.mjs.map +0 -1
  387. package/_mjs/control/FreeBooleanAlgebraIO.mjs.map +0 -1
  388. package/_mjs/control/Gen/constraints.mjs.map +0 -1
  389. package/_mjs/control/Gen.mjs.map +0 -1
  390. package/_mjs/control/Live.mjs.map +0 -1
  391. package/_mjs/control/Sample.mjs.map +0 -1
  392. package/_mjs/control/Sized.mjs.map +0 -1
  393. package/_mjs/control/Spec.mjs.map +0 -1
  394. package/_mjs/control/TestAnnotationRenderer.mjs.map +0 -1
  395. package/_mjs/control/TestAspect/definition.mjs.map +0 -1
  396. package/_mjs/control/TestAspect.mjs.map +0 -1
  397. package/_mjs/control/TestClock.mjs.map +0 -1
  398. package/_mjs/control/TestConsole.mjs.map +0 -1
  399. package/_mjs/control/TestRandom.mjs.map +0 -1
  400. package/_mjs/control/TestRenderer/definition.mjs.map +0 -1
  401. package/_mjs/control.mjs.map +0 -1
  402. package/_mjs/data/AssertionValue.mjs.map +0 -1
  403. package/_mjs/data/ExecutedSpec.mjs.map +0 -1
  404. package/_mjs/data/FreeBooleanAlgebra.mjs.map +0 -1
  405. package/_mjs/data/LogLine/Fragment.mjs.map +0 -1
  406. package/_mjs/data/LogLine/Line.mjs.map +0 -1
  407. package/_mjs/data/LogLine/Message.mjs.map +0 -1
  408. package/_mjs/data/LogLine.mjs.map +0 -1
  409. package/_mjs/data/Render.mjs.map +0 -1
  410. package/_mjs/data/RenderParam.mjs.map +0 -1
  411. package/_mjs/data/TestAnnotation.mjs.map +0 -1
  412. package/_mjs/data/TestArgs.mjs.map +0 -1
  413. package/_mjs/data.mjs.map +0 -1
  414. package/_mjs/global.mjs.map +0 -1
  415. package/_mjs/index.mjs.map +0 -1
  416. package/_mjs/util.mjs.map +0 -1
@@ -1,505 +1,383 @@
1
- const fileName_1 = "(@fncts/test) src/util/math.ts";
2
1
  import * as tsplus_module_1 from "@fncts/io/IO/api";
3
2
  import * as tsplus_module_2 from "@fncts/io/Random/api";
3
+ //#region build/esm/util/math.js
4
+ const fileName_1 = "(@fncts/test) src/util/math.ts";
4
5
  /** @internal */
5
- export const MIN_VALUE_32 = 2 ** -126 * 2 ** -23;
6
+ const MIN_VALUE_32 = 2 ** -126 * 2 ** -23;
6
7
  /** @internal */
7
- export const MAX_VALUE_32 = 2 ** 127 * (1 + (2 ** 23 - 1) / 2 ** 23);
8
+ const MAX_VALUE_32 = 2 ** 127 * (1 + (2 ** 23 - 1) / 2 ** 23);
8
9
  /** @internal */
9
- export const EPSILON_32 = 2 ** -23;
10
+ const EPSILON_32 = 2 ** -23;
10
11
  /** @internal */
11
- const INDEX_POSITIVE_INFINITY_32 = 2139095040; // floatToIndex(MAX_VALUE_32) + 1;
12
+ const INDEX_POSITIVE_INFINITY_32 = 2139095040;
12
13
  /** @internal */
13
- const INDEX_NEGATIVE_INFINITY_32 = -2139095041; // floatToIndex(-MAX_VALUE_32) - 1
14
- export function safeFloatToIndex(f, label) {
15
- const conversionTrick = "you can convert any double to a 32-bit float by using `new Float32Array([myDouble])[0]`";
16
- const errorMessage = "fc.floatNext constraints." + label + " must be a 32-bit float - " + conversionTrick;
17
- if (Number.isNaN(f) || Number.isFinite(f) && (f < -MAX_VALUE_32 || f > MAX_VALUE_32)) {
18
- return tsplus_module_1.haltNow(new Error(errorMessage), fileName_1 + ":16:22");
19
- }
20
- const index = floatToIndex(f);
21
- if (!Number.isInteger(index)) {
22
- return tsplus_module_1.haltNow(new Error(errorMessage), fileName_1 + ":20:22");
23
- }
24
- return tsplus_module_1.succeedNow(index, fileName_1 + ":22:23");
14
+ const INDEX_NEGATIVE_INFINITY_32 = -2139095041;
15
+ function safeFloatToIndex(f, label) {
16
+ const errorMessage = "fc.floatNext constraints." + label + " must be a 32-bit float - you can convert any double to a 32-bit float by using `new Float32Array([myDouble])[0]`";
17
+ if (Number.isNaN(f) || Number.isFinite(f) && (f < -MAX_VALUE_32 || f > MAX_VALUE_32)) return tsplus_module_1.haltNow(new Error(errorMessage), fileName_1 + ":16:22");
18
+ const index = floatToIndex(f);
19
+ if (!Number.isInteger(index)) return tsplus_module_1.haltNow(new Error(errorMessage), fileName_1 + ":20:22");
20
+ return tsplus_module_1.succeedNow(index, fileName_1 + ":22:23");
25
21
  }
26
- export function decomposeFloat(f) {
27
- // 1 => significand 0b1 - exponent 1 (will be preferred)
28
- // => significand 0b0.1 - exponent 2
29
- const maxSignificand = 1 + (2 ** 23 - 1) / 2 ** 23;
30
- for (let exponent = -126; exponent !== 128; ++exponent) {
31
- const powExponent = 2 ** exponent;
32
- const maxForExponent = maxSignificand * powExponent;
33
- if (Math.abs(f) <= maxForExponent) {
34
- return {
35
- exponent,
36
- significand: f / powExponent
37
- };
38
- }
39
- }
40
- return {
41
- exponent: Number.NaN,
42
- significand: Number.NaN
43
- };
22
+ function decomposeFloat(f) {
23
+ const maxSignificand = 1 + (2 ** 23 - 1) / 2 ** 23;
24
+ for (let exponent = -126; exponent !== 128; ++exponent) {
25
+ const powExponent = 2 ** exponent;
26
+ const maxForExponent = maxSignificand * powExponent;
27
+ if (Math.abs(f) <= maxForExponent) return {
28
+ exponent,
29
+ significand: f / powExponent
30
+ };
31
+ }
32
+ return {
33
+ exponent: NaN,
34
+ significand: NaN
35
+ };
44
36
  }
45
- export function floatToIndex(f) {
46
- if (f === Number.POSITIVE_INFINITY) {
47
- return INDEX_POSITIVE_INFINITY_32;
48
- }
49
- if (f === Number.NEGATIVE_INFINITY) {
50
- return INDEX_NEGATIVE_INFINITY_32;
51
- }
52
- const {
53
- exponent,
54
- significand
55
- } = decomposeFloat(f);
56
- if (Number.isNaN(exponent) || Number.isNaN(significand) || !Number.isInteger(significand * 0x800000)) {
57
- return Number.NaN;
58
- }
59
- if (f > 0 || f === 0 && 1 / f === Number.POSITIVE_INFINITY) {
60
- return indexInFloatFromDecomp(exponent, significand);
61
- } else {
62
- return -indexInFloatFromDecomp(exponent, -significand) - 1;
63
- }
37
+ function floatToIndex(f) {
38
+ if (f === Number.POSITIVE_INFINITY) return INDEX_POSITIVE_INFINITY_32;
39
+ if (f === Number.NEGATIVE_INFINITY) return INDEX_NEGATIVE_INFINITY_32;
40
+ const { exponent, significand } = decomposeFloat(f);
41
+ if (Number.isNaN(exponent) || Number.isNaN(significand) || !Number.isInteger(significand * 8388608)) return NaN;
42
+ if (f > 0 || f === 0 && 1 / f === Number.POSITIVE_INFINITY) return indexInFloatFromDecomp(exponent, significand);
43
+ else return -indexInFloatFromDecomp(exponent, -significand) - 1;
64
44
  }
65
45
  /** @internal */
66
- export function indexInFloatFromDecomp(exponent, significand) {
67
- // WARNING: significand >= 0
68
- // By construct of significand in decomposeFloat,
69
- // significand is always max-ed.
70
- // The float close to zero are the only one having a significand <1, they also have an exponent of -126.
71
- // They are in range: [2**(-126) * 2**(-23), 2**(-126) * (2 - 2 ** 23)]
72
- // In other words there are 2**24 elements in that range if we include zero.
73
- // All other ranges (other exponents) have a length of 2**23 elements.
74
- if (exponent === -126) {
75
- return significand * 0x800000; // significand * 2**23
76
- }
77
- // Offset due to exp = -126 + Offset of previous exp (excl. -126) + Offset in current exp
78
- // 2**24 + (exponent - (-126) -1) * 2**23 + (significand - 1) * 2**23
79
- return (exponent + 127) * 0x800000 + (significand - 1) * 0x800000;
46
+ function indexInFloatFromDecomp(exponent, significand) {
47
+ if (exponent === -126) return significand * 8388608;
48
+ return (exponent + 127) * 8388608 + (significand - 1) * 8388608;
80
49
  }
81
50
  /**
82
- * Compute the 32-bit floating point number corresponding to the provided indexes
83
- *
84
- * @param n - index of the float
85
- *
86
- * @internal
87
- */
88
- export function indexToFloat(index) {
89
- if (index < 0) {
90
- return -indexToFloat(-index - 1);
91
- }
92
- if (index === INDEX_POSITIVE_INFINITY_32) {
93
- return Number.POSITIVE_INFINITY;
94
- }
95
- if (index < 0x1000000) {
96
- // The first 2**24 elements correspond to values having
97
- // exponent = -126 and significand = index * 2**(-23)
98
- return index * 2 ** -149;
99
- }
100
- const postIndex = index - 0x1000000;
101
- // Math.floor(postIndex / 0x800000) = Math.floor(postIndex / 2**23) = (postIndex >> 23)
102
- const exponent = -125 + (postIndex >> 23);
103
- // (postIndex % 0x800000) / 0x800000 = (postIndex & 0x7fffff) / 0x800000
104
- const significand = 1 + (postIndex & 0x7fffff) / 0x800000;
105
- return significand * 2 ** exponent;
51
+ * Compute the 32-bit floating point number corresponding to the provided indexes
52
+ *
53
+ * @param n - index of the float
54
+ *
55
+ * @internal
56
+ */
57
+ function indexToFloat(index) {
58
+ if (index < 0) return -indexToFloat(-index - 1);
59
+ if (index === INDEX_POSITIVE_INFINITY_32) return Number.POSITIVE_INFINITY;
60
+ if (index < 16777216) return index * 2 ** -149;
61
+ const postIndex = index - 16777216;
62
+ const exponent = -125 + (postIndex >> 23);
63
+ return (1 + (postIndex & 8388607) / 8388608) * 2 ** exponent;
106
64
  }
107
65
  /** @internal */
108
- export const Zero64 = {
109
- sign: 1,
110
- data: [0, 0]
66
+ const Zero64 = {
67
+ sign: 1,
68
+ data: [0, 0]
111
69
  };
112
70
  /** @internal */
113
- export const Unit64 = {
114
- sign: 1,
115
- data: [0, 1]
71
+ const Unit64 = {
72
+ sign: 1,
73
+ data: [0, 1]
116
74
  };
117
75
  /** @internal */
118
- export function isZero64(a) {
119
- return a.data[0] === 0 && a.data[1] === 0;
76
+ function isZero64(a) {
77
+ return a.data[0] === 0 && a.data[1] === 0;
120
78
  }
121
79
  /** @internal */
122
- export function isStrictlyNegative64(a) {
123
- return a.sign === -1 && !isZero64(a);
80
+ function isStrictlyNegative64(a) {
81
+ return a.sign === -1 && !isZero64(a);
124
82
  }
125
83
  /** @internal */
126
- export function isStrictlyPositive64(a) {
127
- return a.sign === 1 && !isZero64(a);
84
+ function isStrictlyPositive64(a) {
85
+ return a.sign === 1 && !isZero64(a);
128
86
  }
129
87
  /** @internal */
130
- export function isEqual64(a, b) {
131
- if (a.data[0] === b.data[0] && a.data[1] === b.data[1]) {
132
- return a.sign === b.sign || a.data[0] === 0 && a.data[1] === 0; // either the same or both zero
133
- }
134
- return false;
88
+ function isEqual64(a, b) {
89
+ if (a.data[0] === b.data[0] && a.data[1] === b.data[1]) return a.sign === b.sign || a.data[0] === 0 && a.data[1] === 0;
90
+ return false;
135
91
  }
136
92
  /** @internal */
137
93
  function isStrictlySmaller64Internal(a, b) {
138
- return a[0] < b[0] || a[0] === b[0] && a[1] < b[1];
94
+ return a[0] < b[0] || a[0] === b[0] && a[1] < b[1];
139
95
  }
140
96
  /** @internal */
141
- export function isStrictlySmaller64(a, b) {
142
- if (a.sign === b.sign) {
143
- return a.sign === 1 ? isStrictlySmaller64Internal(a.data, b.data) // a.sign = +1, b.sign = +1
144
- : isStrictlySmaller64Internal(b.data, a.data); // a.sign = -1, b.sign = -1
145
- }
146
- // a.sign = +1, b.sign = -1 is always false
147
- return a.sign === -1 && (!isZero64(a) || !isZero64(b)); // a.sign = -1, b.sign = +1
97
+ function isStrictlySmaller64(a, b) {
98
+ if (a.sign === b.sign) return a.sign === 1 ? isStrictlySmaller64Internal(a.data, b.data) : isStrictlySmaller64Internal(b.data, a.data);
99
+ return a.sign === -1 && (!isZero64(a) || !isZero64(b));
148
100
  }
149
101
  /** @internal */
150
- export function clone64(a) {
151
- return {
152
- sign: a.sign,
153
- data: [a.data[0], a.data[1]]
154
- };
102
+ function clone64(a) {
103
+ return {
104
+ sign: a.sign,
105
+ data: [a.data[0], a.data[1]]
106
+ };
155
107
  }
156
108
  /** @internal */
157
109
  function substract64DataInternal(a, b) {
158
- let reminderLow = 0;
159
- let low = a[1] - b[1];
160
- if (low < 0) {
161
- reminderLow = 1;
162
- low = low >>> 0;
163
- }
164
- return [a[0] - b[0] - reminderLow, low];
110
+ let reminderLow = 0;
111
+ let low = a[1] - b[1];
112
+ if (low < 0) {
113
+ reminderLow = 1;
114
+ low = low >>> 0;
115
+ }
116
+ return [a[0] - b[0] - reminderLow, low];
165
117
  }
166
118
  /**
167
- * Expects a >= b
168
- * @internal
169
- */
119
+ * Expects a >= b
120
+ * @internal
121
+ */
170
122
  function substract64Internal(a, b) {
171
- if (a.sign === 1 && b.sign === -1) {
172
- // Operation is a simple sum of a + abs(b)
173
- const low = a.data[1] + b.data[1];
174
- const high = a.data[0] + b.data[0] + (low > 0xffffffff ? 1 : 0);
175
- return {
176
- sign: 1,
177
- data: [high >>> 0, low >>> 0]
178
- };
179
- }
180
- // a.sign === -1 with b.sign === 1 is impossible given: a - b >= 0, except for a = 0 and b = 0
181
- // Operation is a substraction
182
- return {
183
- sign: 1,
184
- data: a.sign === 1 ? substract64DataInternal(a.data, b.data) : substract64DataInternal(b.data, a.data)
185
- };
123
+ if (a.sign === 1 && b.sign === -1) {
124
+ const low = a.data[1] + b.data[1];
125
+ return {
126
+ sign: 1,
127
+ data: [a.data[0] + b.data[0] + (low > 4294967295 ? 1 : 0) >>> 0, low >>> 0]
128
+ };
129
+ }
130
+ return {
131
+ sign: 1,
132
+ data: a.sign === 1 ? substract64DataInternal(a.data, b.data) : substract64DataInternal(b.data, a.data)
133
+ };
186
134
  }
187
135
  /**
188
- * Substract two ArrayInt64
189
- * @returns When result is zero always with sign=1
190
- * @internal
191
- */
192
- export function substract64(arrayIntA, arrayIntB) {
193
- if (isStrictlySmaller64(arrayIntA, arrayIntB)) {
194
- const out = substract64Internal(arrayIntB, arrayIntA);
195
- out.sign = -1;
196
- return out;
197
- }
198
- return substract64Internal(arrayIntA, arrayIntB);
136
+ * Substract two ArrayInt64
137
+ * @returns When result is zero always with sign=1
138
+ * @internal
139
+ */
140
+ function substract64(arrayIntA, arrayIntB) {
141
+ if (isStrictlySmaller64(arrayIntA, arrayIntB)) {
142
+ const out = substract64Internal(arrayIntB, arrayIntA);
143
+ out.sign = -1;
144
+ return out;
145
+ }
146
+ return substract64Internal(arrayIntA, arrayIntB);
199
147
  }
200
148
  /**
201
- * Negative version of an ArrayInt64
202
- * @internal
203
- */
204
- export function negative64(arrayIntA) {
205
- return {
206
- sign: -arrayIntA.sign,
207
- data: [arrayIntA.data[0], arrayIntA.data[1]]
208
- };
149
+ * Negative version of an ArrayInt64
150
+ * @internal
151
+ */
152
+ function negative64(arrayIntA) {
153
+ return {
154
+ sign: -arrayIntA.sign,
155
+ data: [arrayIntA.data[0], arrayIntA.data[1]]
156
+ };
209
157
  }
210
158
  /**
211
- * Add two ArrayInt64
212
- * @returns When result is zero always with sign=1
213
- * @internal
214
- */
215
- export function add64(arrayIntA, arrayIntB) {
216
- if (isZero64(arrayIntB)) {
217
- if (isZero64(arrayIntA)) {
218
- return clone64(Zero64);
219
- }
220
- return clone64(arrayIntA);
221
- }
222
- return substract64(arrayIntA, negative64(arrayIntB));
159
+ * Add two ArrayInt64
160
+ * @returns When result is zero always with sign=1
161
+ * @internal
162
+ */
163
+ function add64(arrayIntA, arrayIntB) {
164
+ if (isZero64(arrayIntB)) {
165
+ if (isZero64(arrayIntA)) return clone64(Zero64);
166
+ return clone64(arrayIntA);
167
+ }
168
+ return substract64(arrayIntA, negative64(arrayIntB));
223
169
  }
224
170
  /**
225
- * Halve an ArrayInt64
226
- * @internal
227
- */
228
- export function halve64(a) {
229
- return {
230
- sign: a.sign,
231
- data: [Math.floor(a.data[0] / 2), (a.data[0] % 2 === 1 ? 0x80000000 : 0) + Math.floor(a.data[1] / 2)]
232
- };
171
+ * Halve an ArrayInt64
172
+ * @internal
173
+ */
174
+ function halve64(a) {
175
+ return {
176
+ sign: a.sign,
177
+ data: [Math.floor(a.data[0] / 2), (a.data[0] % 2 === 1 ? 2147483648 : 0) + Math.floor(a.data[1] / 2)]
178
+ };
233
179
  }
234
180
  /**
235
- * Apply log2 to an ArrayInt64 (preserve sign)
236
- * @internal
237
- */
238
- export function logLike64(a) {
239
- // Math.floor(Math.log(hi * 2**32 + low) / Math.log(2)) <= Math.floor(Math.log(2**64) / Math.log(2)) = 64
240
- return {
241
- sign: a.sign,
242
- data: [0, Math.floor(Math.log(a.data[0] * 0x100000000 + a.data[1]) / Math.log(2))]
243
- };
181
+ * Apply log2 to an ArrayInt64 (preserve sign)
182
+ * @internal
183
+ */
184
+ function logLike64(a) {
185
+ return {
186
+ sign: a.sign,
187
+ data: [0, Math.floor(Math.log(a.data[0] * 4294967296 + a.data[1]) / Math.log(2))]
188
+ };
244
189
  }
245
190
  /** @internal */
246
191
  const INDEX_POSITIVE_INFINITY = {
247
- sign: 1,
248
- data: [2146435072, 0]
249
- }; // doubleToIndex(Number.MAX_VALUE) + 1;
192
+ sign: 1,
193
+ data: [2146435072, 0]
194
+ };
250
195
  /** @internal */
251
196
  const INDEX_NEGATIVE_INFINITY = {
252
- sign: -1,
253
- data: [2146435072, 1]
254
- }; // doubleToIndex(-Number.MAX_VALUE) - 1
197
+ sign: -1,
198
+ data: [2146435072, 1]
199
+ };
255
200
  /**
256
- * Decompose a 64-bit floating point number into a significand and exponent
257
- * such that:
258
- * - significand over 53 bits including sign (also referred as fraction)
259
- * - exponent over 11 bits including sign
260
- * - whenever there are multiple possibilities we take the one having the highest significand (in abs)
261
- * - Number.MAX_VALUE = 2**1023 * (1 + (2**52-1)/2**52)
262
- * = 2**1023 * (2 - Number.EPSILON)
263
- * - Number.MIN_VALUE = 2**(-1022) * 2**(-52)
264
- * - Number.EPSILON = 2**(-52)
265
- *
266
- * @param d - 64-bit floating point number to be decomposed into (significand, exponent)
267
- *
268
- * @internal
269
- */
270
- export function decomposeDouble(d) {
271
- // 1 => significand 0b1 - exponent 1 (will be preferred)
272
- // => significand 0b0.1 - exponent 2
273
- const maxSignificand = 2 - Number.EPSILON;
274
- for (let exponent = -1022; exponent !== 1024; ++exponent) {
275
- const powExponent = 2 ** exponent;
276
- const maxForExponent = maxSignificand * powExponent;
277
- if (Math.abs(d) <= maxForExponent) {
278
- return {
279
- exponent,
280
- significand: d / powExponent
281
- };
282
- }
283
- }
284
- return {
285
- exponent: Number.NaN,
286
- significand: Number.NaN
287
- };
201
+ * Decompose a 64-bit floating point number into a significand and exponent
202
+ * such that:
203
+ * - significand over 53 bits including sign (also referred as fraction)
204
+ * - exponent over 11 bits including sign
205
+ * - whenever there are multiple possibilities we take the one having the highest significand (in abs)
206
+ * - Number.MAX_VALUE = 2**1023 * (1 + (2**52-1)/2**52)
207
+ * = 2**1023 * (2 - Number.EPSILON)
208
+ * - Number.MIN_VALUE = 2**(-1022) * 2**(-52)
209
+ * - Number.EPSILON = 2**(-52)
210
+ *
211
+ * @param d - 64-bit floating point number to be decomposed into (significand, exponent)
212
+ *
213
+ * @internal
214
+ */
215
+ function decomposeDouble(d) {
216
+ const maxSignificand = 2 - Number.EPSILON;
217
+ for (let exponent = -1022; exponent !== 1024; ++exponent) {
218
+ const powExponent = 2 ** exponent;
219
+ const maxForExponent = maxSignificand * powExponent;
220
+ if (Math.abs(d) <= maxForExponent) return {
221
+ exponent,
222
+ significand: d / powExponent
223
+ };
224
+ }
225
+ return {
226
+ exponent: NaN,
227
+ significand: NaN
228
+ };
288
229
  }
289
230
  /** @internal */
290
231
  function positiveNumberToInt64(n) {
291
- return [~~(n / 0x100000000), n >>> 0];
232
+ return [~~(n / 4294967296), n >>> 0];
292
233
  }
293
234
  /** @internal */
294
235
  function indexInDoubleFromDecomp(exponent, significand) {
295
- // WARNING: significand >= 0
296
- // By construct of significand in decomposeDouble,
297
- // significand is always max-ed.
298
- // The double close to zero are the only one having a significand <1, they also have an exponent of -1022.
299
- // They are in range: [2**(-1022) * 2**(-52), 2**(-1022) * (2 - 2 ** 52)]
300
- // In other words there are 2**53 elements in that range if we include zero.
301
- // All other ranges (other exponents) have a length of 2**52 elements.
302
- if (exponent === -1022) {
303
- // We want the significand to be an integer value (like an index)
304
- const rescaledSignificand = significand * 2 ** 52; // significand * 2**52
305
- return positiveNumberToInt64(rescaledSignificand);
306
- }
307
- // Offset due to exp = -1022 + Offset of previous exp (excl. -1022) + Offset in current exp
308
- // 2**53 + (exponent - (-1022) -1) * 2**52 + (significand - 1) * 2**52
309
- // (exponent + 1023) * 2**52 + (significand - 1) * 2**52
310
- const rescaledSignificand = (significand - 1) * 2 ** 52; // (significand-1) * 2**52
311
- const exponentOnlyHigh = (exponent + 1023) * 2 ** 20; // (exponent + 1023) * 2**52 => [high: (exponent + 1023) * 2**20, low: 0]
312
- const index = positiveNumberToInt64(rescaledSignificand);
313
- index[0] += exponentOnlyHigh;
314
- return index;
236
+ if (exponent === -1022) return positiveNumberToInt64(significand * 2 ** 52);
237
+ const rescaledSignificand = (significand - 1) * 2 ** 52;
238
+ const exponentOnlyHigh = (exponent + 1023) * 2 ** 20;
239
+ const index = positiveNumberToInt64(rescaledSignificand);
240
+ index[0] += exponentOnlyHigh;
241
+ return index;
315
242
  }
316
243
  /**
317
- * Compute the index of d relative to other available 64-bit floating point numbers
318
- * Rq: Produces negative indexes for negative doubles
319
- *
320
- * @param d - 64-bit floating point number, anything except NaN
321
- *
322
- * @internal
323
- */
324
- export function doubleToIndex(d) {
325
- if (d === Number.POSITIVE_INFINITY) {
326
- return clone64(INDEX_POSITIVE_INFINITY);
327
- }
328
- if (d === Number.NEGATIVE_INFINITY) {
329
- return clone64(INDEX_NEGATIVE_INFINITY);
330
- }
331
- const decomp = decomposeDouble(d);
332
- const exponent = decomp.exponent;
333
- const significand = decomp.significand;
334
- if (d > 0 || d === 0 && 1 / d === Number.POSITIVE_INFINITY) {
335
- return {
336
- sign: 1,
337
- data: indexInDoubleFromDecomp(exponent, significand)
338
- };
339
- } else {
340
- const indexOpposite = indexInDoubleFromDecomp(exponent, -significand);
341
- if (indexOpposite[1] === 0xffffffff) {
342
- indexOpposite[0] += 1;
343
- indexOpposite[1] = 0;
344
- } else {
345
- indexOpposite[1] += 1;
346
- }
347
- return {
348
- sign: -1,
349
- data: indexOpposite
350
- }; // -indexInDoubleFromDecomp(exponent, -significand) - 1
351
- }
244
+ * Compute the index of d relative to other available 64-bit floating point numbers
245
+ * Rq: Produces negative indexes for negative doubles
246
+ *
247
+ * @param d - 64-bit floating point number, anything except NaN
248
+ *
249
+ * @internal
250
+ */
251
+ function doubleToIndex(d) {
252
+ if (d === Number.POSITIVE_INFINITY) return clone64(INDEX_POSITIVE_INFINITY);
253
+ if (d === Number.NEGATIVE_INFINITY) return clone64(INDEX_NEGATIVE_INFINITY);
254
+ const decomp = decomposeDouble(d);
255
+ const exponent = decomp.exponent;
256
+ const significand = decomp.significand;
257
+ if (d > 0 || d === 0 && 1 / d === Number.POSITIVE_INFINITY) return {
258
+ sign: 1,
259
+ data: indexInDoubleFromDecomp(exponent, significand)
260
+ };
261
+ else {
262
+ const indexOpposite = indexInDoubleFromDecomp(exponent, -significand);
263
+ if (indexOpposite[1] === 4294967295) {
264
+ indexOpposite[0] += 1;
265
+ indexOpposite[1] = 0;
266
+ } else indexOpposite[1] += 1;
267
+ return {
268
+ sign: -1,
269
+ data: indexOpposite
270
+ };
271
+ }
352
272
  }
353
273
  /**
354
- * Compute the 64-bit floating point number corresponding to the provided indexes
355
- *
356
- * @param n - index of the double
357
- *
358
- * @internal
359
- */
360
- export function indexToDouble(index) {
361
- if (index.sign === -1) {
362
- const indexOpposite = {
363
- sign: 1,
364
- data: [index.data[0], index.data[1]]
365
- };
366
- if (indexOpposite.data[1] === 0) {
367
- indexOpposite.data[0] -= 1;
368
- indexOpposite.data[1] = 0xffffffff;
369
- } else {
370
- indexOpposite.data[1] -= 1;
371
- }
372
- return -indexToDouble(indexOpposite); // -indexToDouble(-index - 1);
373
- }
374
- if (isEqual64(index, INDEX_POSITIVE_INFINITY)) {
375
- return Number.POSITIVE_INFINITY;
376
- }
377
- if (index.data[0] < 0x200000) {
378
- // if: index < 2 ** 53 <--> index[0] < 2 ** (53-32) = 0x20_0000
379
- // The first 2**53 elements correspond to values having
380
- // exponent = -1022 and significand = index * Number.EPSILON
381
- // double value = index * 2 ** -1022 * Number.EPSILON
382
- // = index * 2 ** -1022 * 2 ** -52
383
- // = index * 2 ** -1074
384
- return (index.data[0] * 0x100000000 + index.data[1]) * 2 ** -1074;
385
- }
386
- const postIndexHigh = index.data[0] - 0x200000; // postIndex = index - 2 ** 53
387
- // exponent = -1021 + Math.floor(postIndex / 2**52)
388
- // = -1021 + Math.floor(postIndexHigh / 2**(52-32))
389
- // = -1021 + Math.floor(postIndexHigh / 2**20)
390
- // = -1021 + (postIndexHigh >> 20)
391
- const exponent = -1021 + (postIndexHigh >> 20);
392
- // significand = 1 + (postIndex % 2**52) / 2**52
393
- // = 1 + ((postIndexHigh * 2**32 + postIndexLow) % 2**52) / 2**52
394
- // = 1 + ((postIndexHigh % 2**20) * 2**32 + postIndexLow) / 2**52
395
- // = 1 + ((postIndexHigh & 0xfffff) * 2**32 + postIndexLow) / 2**52
396
- // = 1 + ((postIndexHigh & 0xfffff) * 2**32 + postIndexLow) * Number.EPSILON
397
- const significand = 1 + ((postIndexHigh & 0xfffff) * 2 ** 32 + index.data[1]) * Number.EPSILON;
398
- return significand * 2 ** exponent;
274
+ * Compute the 64-bit floating point number corresponding to the provided indexes
275
+ *
276
+ * @param n - index of the double
277
+ *
278
+ * @internal
279
+ */
280
+ function indexToDouble(index) {
281
+ if (index.sign === -1) {
282
+ const indexOpposite = {
283
+ sign: 1,
284
+ data: [index.data[0], index.data[1]]
285
+ };
286
+ if (indexOpposite.data[1] === 0) {
287
+ indexOpposite.data[0] -= 1;
288
+ indexOpposite.data[1] = 4294967295;
289
+ } else indexOpposite.data[1] -= 1;
290
+ return -indexToDouble(indexOpposite);
291
+ }
292
+ if (isEqual64(index, INDEX_POSITIVE_INFINITY)) return Number.POSITIVE_INFINITY;
293
+ if (index.data[0] < 2097152) return (index.data[0] * 4294967296 + index.data[1]) * 2 ** -1074;
294
+ const postIndexHigh = index.data[0] - 2097152;
295
+ const exponent = -1021 + (postIndexHigh >> 20);
296
+ return (1 + ((postIndexHigh & 1048575) * 2 ** 32 + index.data[1]) * Number.EPSILON) * 2 ** exponent;
399
297
  }
400
298
  /**
401
- * Same as {@link doubleToIndex} except it throws in case of invalid double
402
- *
403
- * @internal
404
- */
405
- export function safeDoubleToIndex(d, label) {
406
- if (Number.isNaN(d)) {
407
- // Number.NaN does not have any associated index in the current implementation
408
- return tsplus_module_1.haltNow(new Error("fc.doubleNext constraints." + label + " must be a 32-bit float"), fileName_1 + ":403:22");
409
- }
410
- return tsplus_module_1.succeedNow(doubleToIndex(d), fileName_1 + ":405:23");
299
+ * Same as {@link doubleToIndex} except it throws in case of invalid double
300
+ *
301
+ * @internal
302
+ */
303
+ function safeDoubleToIndex(d, label) {
304
+ if (Number.isNaN(d)) return tsplus_module_1.haltNow(/* @__PURE__ */ new Error("fc.doubleNext constraints." + label + " must be a 32-bit float"), fileName_1 + ":403:22");
305
+ return tsplus_module_1.succeedNow(doubleToIndex(d), fileName_1 + ":405:23");
411
306
  }
412
- const EPSILON = /*#__PURE__*/Math.pow(2, -52);
413
- const MAX_VALUE = (2 - EPSILON) * /*#__PURE__*/Math.pow(2, 1023);
414
- const MIN_VALUE = /*#__PURE__*/Math.pow(2, -1022);
415
- export function nextUp(x) {
416
- if (x !== x) {
417
- return x;
418
- }
419
- if (x === -1 / 0) {
420
- return -MAX_VALUE;
421
- }
422
- if (x === +1 / 0) {
423
- return +1 / 0;
424
- }
425
- if (x === +MAX_VALUE) {
426
- return +1 / 0;
427
- }
428
- let y = x * (x < 0 ? 1 - EPSILON / 2 : 1 + EPSILON);
429
- if (y === x) {
430
- y = MIN_VALUE * EPSILON > 0 ? x + MIN_VALUE * EPSILON : x + MIN_VALUE;
431
- }
432
- if (y === +1 / 0) {
433
- y = +MAX_VALUE;
434
- }
435
- const b = x + (y - x) / 2;
436
- if (x < b && b < y) {
437
- y = b;
438
- }
439
- const c = (y + x) / 2;
440
- if (x < c && c < y) {
441
- y = c;
442
- }
443
- return y === 0 ? -0 : y;
307
+ const EPSILON = Math.pow(2, -52);
308
+ const MAX_VALUE = (2 - EPSILON) * Math.pow(2, 1023);
309
+ const MIN_VALUE = Math.pow(2, -1022);
310
+ function nextUp(x) {
311
+ if (x !== x) return x;
312
+ if (x === -Infinity) return -MAX_VALUE;
313
+ if (x === Infinity) return Infinity;
314
+ if (x === +MAX_VALUE) return Infinity;
315
+ let y = x * (x < 0 ? 1 - EPSILON / 2 : 1 + EPSILON);
316
+ if (y === x) y = MIN_VALUE * EPSILON > 0 ? x + MIN_VALUE * EPSILON : x + MIN_VALUE;
317
+ if (y === Infinity) y = +MAX_VALUE;
318
+ const b = x + (y - x) / 2;
319
+ if (x < b && b < y) y = b;
320
+ const c = (y + x) / 2;
321
+ if (x < c && c < y) y = c;
322
+ return y === 0 ? -0 : y;
444
323
  }
445
- export function nextAfter(x, y) {
446
- return y < x ? -nextUp(-x) : y > x ? nextUp(x) : x !== x ? x : y;
324
+ function nextAfter(x, y) {
325
+ return y < x ? -nextUp(-x) : y > x ? nextUp(x) : x !== x ? x : y;
447
326
  }
448
- export function computeBiasedRanges(min, max, biasedRanges) {
449
- if (biasedRanges != null) {
450
- return biasedRanges;
451
- }
452
- if (isEqual64(min, max)) {
453
- return [{
454
- min,
455
- max
456
- }];
457
- }
458
- const minStrictlySmallerThanZero = isStrictlyNegative64(min);
459
- const maxStrictlyGreaterThanZero = isStrictlyPositive64(max);
460
- if (minStrictlySmallerThanZero && maxStrictlyGreaterThanZero) {
461
- const logMin = logLike64(min);
462
- const logMax = logLike64(max);
463
- return [{
464
- min: logMin,
465
- max: logMax
466
- }, {
467
- min: substract64(max, logMax),
468
- max
469
- }, {
470
- min,
471
- max: substract64(min, logMin)
472
- }];
473
- } else {
474
- const logGap = logLike64(substract64(max, min));
475
- const closeToMin = {
476
- min,
477
- max: add64(min, logGap)
478
- };
479
- const closeToMax = {
480
- min: substract64(max, logGap),
481
- max
482
- };
483
- return minStrictlySmallerThanZero ? [closeToMax, closeToMin] : [closeToMin, closeToMax];
484
- }
327
+ function computeBiasedRanges(min, max, biasedRanges) {
328
+ if (biasedRanges != null) return biasedRanges;
329
+ if (isEqual64(min, max)) return [{
330
+ min,
331
+ max
332
+ }];
333
+ const minStrictlySmallerThanZero = isStrictlyNegative64(min);
334
+ const maxStrictlyGreaterThanZero = isStrictlyPositive64(max);
335
+ if (minStrictlySmallerThanZero && maxStrictlyGreaterThanZero) {
336
+ const logMin = logLike64(min);
337
+ const logMax = logLike64(max);
338
+ return [
339
+ {
340
+ min: logMin,
341
+ max: logMax
342
+ },
343
+ {
344
+ min: substract64(max, logMax),
345
+ max
346
+ },
347
+ {
348
+ min,
349
+ max: substract64(min, logMin)
350
+ }
351
+ ];
352
+ } else {
353
+ const logGap = logLike64(substract64(max, min));
354
+ const closeToMin = {
355
+ min,
356
+ max: add64(min, logGap)
357
+ };
358
+ const closeToMax = {
359
+ min: substract64(max, logGap),
360
+ max
361
+ };
362
+ return minStrictlySmallerThanZero ? [closeToMax, closeToMin] : [closeToMin, closeToMax];
363
+ }
485
364
  }
486
- export function computeArrayInt64GenerateRange(min, max, biasFactor, biasedRanges) {
487
- return tsplus_module_1.gen(function* (_) {
488
- if (biasFactor === undefined || (yield* _(tsplus_module_2.nextIntBetween(1, biasFactor, fileName_1 + ":497:68"), fileName_1 + ":497:46")) !== 1) {
489
- return {
490
- min,
491
- max
492
- };
493
- }
494
- const ranges = computeBiasedRanges(min, max, biasedRanges);
495
- if (ranges.length === 1) {
496
- return ranges[0];
497
- }
498
- const id = yield* _(tsplus_module_2.nextIntBetween(-2 * (ranges.length - 1), ranges.length - 2, fileName_1 + ":504:46"), fileName_1 + ":504:24");
499
- return id < 0 ? ranges[0] : ranges[id + 1];
500
- }, fileName_1 + ":496:16");
365
+ function computeArrayInt64GenerateRange(min, max, biasFactor, biasedRanges) {
366
+ return tsplus_module_1.gen(function* (_) {
367
+ if (biasFactor === void 0 || (yield* _(tsplus_module_2.nextIntBetween(1, biasFactor, fileName_1 + ":497:68"), fileName_1 + ":497:46")) !== 1) return {
368
+ min,
369
+ max
370
+ };
371
+ const ranges = computeBiasedRanges(min, max, biasedRanges);
372
+ if (ranges.length === 1) return ranges[0];
373
+ const id = yield* _(tsplus_module_2.nextIntBetween(-2 * (ranges.length - 1), ranges.length - 2, fileName_1 + ":504:46"), fileName_1 + ":504:24");
374
+ return id < 0 ? ranges[0] : ranges[id + 1];
375
+ }, fileName_1 + ":496:16");
501
376
  }
502
- export function clamp(n, min, max) {
503
- return n < min ? min : n > max ? max : n;
377
+ function clamp(n, min, max) {
378
+ return n < min ? min : n > max ? max : n;
504
379
  }
380
+ //#endregion
381
+ export { EPSILON_32, MAX_VALUE_32, MIN_VALUE_32, Unit64, Zero64, add64, clamp, clone64, computeArrayInt64GenerateRange, computeBiasedRanges, decomposeDouble, decomposeFloat, doubleToIndex, floatToIndex, halve64, indexInFloatFromDecomp, indexToDouble, indexToFloat, isEqual64, isStrictlyNegative64, isStrictlyPositive64, isStrictlySmaller64, isZero64, logLike64, negative64, nextAfter, nextUp, safeDoubleToIndex, safeFloatToIndex, substract64 };
382
+
505
383
  //# sourceMappingURL=math.mjs.map