@fncts/test 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (632) hide show
  1. package/TestSpec.d.ts +4 -0
  2. package/_cjs/api.cjs +91 -0
  3. package/_cjs/api.cjs.map +1 -0
  4. package/_cjs/control/AbstractRunnableSpec.cjs +30 -0
  5. package/_cjs/control/AbstractRunnableSpec.cjs.map +1 -0
  6. package/_cjs/control/Annotations/api.cjs +50 -0
  7. package/_cjs/control/Annotations/api.cjs.map +1 -0
  8. package/_cjs/control/Annotations/definition.cjs +27 -0
  9. package/_cjs/control/Annotations/definition.cjs.map +1 -0
  10. package/_cjs/control/Annotations/live.cjs +68 -0
  11. package/_cjs/control/Annotations/live.cjs.map +1 -0
  12. package/_cjs/control/Annotations.cjs +45 -0
  13. package/_cjs/control/Annotations.cjs.map +1 -0
  14. package/_cjs/control/Assertion/api.cjs +256 -0
  15. package/_cjs/control/Assertion/api.cjs.map +1 -0
  16. package/_cjs/control/Assertion/definition.cjs +32 -0
  17. package/_cjs/control/Assertion/definition.cjs.map +1 -0
  18. package/_cjs/control/Assertion.cjs +32 -0
  19. package/_cjs/control/Assertion.cjs.map +1 -0
  20. package/_cjs/control/AssertionIO/api.cjs +46 -0
  21. package/_cjs/control/AssertionIO/api.cjs.map +1 -0
  22. package/_cjs/control/AssertionIO/definition.cjs +37 -0
  23. package/_cjs/control/AssertionIO/definition.cjs.map +1 -0
  24. package/_cjs/control/AssertionIO.cjs +32 -0
  25. package/_cjs/control/AssertionIO.cjs.map +1 -0
  26. package/_cjs/control/DefaultRunnableSpec.cjs +30 -0
  27. package/_cjs/control/DefaultRunnableSpec.cjs.map +1 -0
  28. package/_cjs/control/DefaultTestReporter/definition.cjs +9 -0
  29. package/_cjs/control/DefaultTestReporter/definition.cjs.map +1 -0
  30. package/_cjs/control/DefaultTestReporter/render.cjs +288 -0
  31. package/_cjs/control/DefaultTestReporter/render.cjs.map +1 -0
  32. package/_cjs/control/DefaultTestReporter.cjs +32 -0
  33. package/_cjs/control/DefaultTestReporter.cjs.map +1 -0
  34. package/_cjs/control/FreeBooleanAlgebraIO/api.cjs +89 -0
  35. package/_cjs/control/FreeBooleanAlgebraIO/api.cjs.map +1 -0
  36. package/_cjs/control/FreeBooleanAlgebraIO/definition.cjs +9 -0
  37. package/_cjs/control/FreeBooleanAlgebraIO/definition.cjs.map +1 -0
  38. package/_cjs/control/FreeBooleanAlgebraIO.cjs +32 -0
  39. package/_cjs/control/FreeBooleanAlgebraIO.cjs.map +1 -0
  40. package/_cjs/control/Gen/api/array.cjs +50 -0
  41. package/_cjs/control/Gen/api/array.cjs.map +1 -0
  42. package/_cjs/control/Gen/api/char.cjs +129 -0
  43. package/_cjs/control/Gen/api/char.cjs.map +1 -0
  44. package/_cjs/control/Gen/api/conc.cjs +70 -0
  45. package/_cjs/control/Gen/api/conc.cjs.map +1 -0
  46. package/_cjs/control/Gen/api/double.cjs +82 -0
  47. package/_cjs/control/Gen/api/double.cjs.map +1 -0
  48. package/_cjs/control/Gen/api/float.cjs +55 -0
  49. package/_cjs/control/Gen/api/float.cjs.map +1 -0
  50. package/_cjs/control/Gen/api/string.cjs +102 -0
  51. package/_cjs/control/Gen/api/string.cjs.map +1 -0
  52. package/_cjs/control/Gen/api/struct.cjs +36 -0
  53. package/_cjs/control/Gen/api/struct.cjs.map +1 -0
  54. package/_cjs/control/Gen/api.cjs +369 -0
  55. package/_cjs/control/Gen/api.cjs.map +1 -0
  56. package/_cjs/control/Gen/constraints.cjs +6 -0
  57. package/_cjs/control/Gen/constraints.cjs.map +1 -0
  58. package/_cjs/control/Gen/definition.cjs +20 -0
  59. package/_cjs/control/Gen/definition.cjs.map +1 -0
  60. package/_cjs/control/Gen.cjs +136 -0
  61. package/_cjs/control/Gen.cjs.map +1 -0
  62. package/_cjs/control/Live/definition.cjs +67 -0
  63. package/_cjs/control/Live/definition.cjs.map +1 -0
  64. package/_cjs/control/Live.cjs +19 -0
  65. package/_cjs/control/Live.cjs.map +1 -0
  66. package/_cjs/control/RunnableSpec.cjs +70 -0
  67. package/_cjs/control/RunnableSpec.cjs.map +1 -0
  68. package/_cjs/control/Sample/api.cjs +244 -0
  69. package/_cjs/control/Sample/api.cjs.map +1 -0
  70. package/_cjs/control/Sample/definition.cjs +21 -0
  71. package/_cjs/control/Sample/definition.cjs.map +1 -0
  72. package/_cjs/control/Sample.cjs +32 -0
  73. package/_cjs/control/Sample.cjs.map +1 -0
  74. package/_cjs/control/Sized/api.cjs +32 -0
  75. package/_cjs/control/Sized/api.cjs.map +1 -0
  76. package/_cjs/control/Sized/definition.cjs +27 -0
  77. package/_cjs/control/Sized/definition.cjs.map +1 -0
  78. package/_cjs/control/Sized/live.cjs +42 -0
  79. package/_cjs/control/Sized/live.cjs.map +1 -0
  80. package/_cjs/control/Sized.cjs +45 -0
  81. package/_cjs/control/Sized.cjs.map +1 -0
  82. package/_cjs/control/Spec/api.cjs +525 -0
  83. package/_cjs/control/Spec/api.cjs.map +1 -0
  84. package/_cjs/control/Spec/definition.cjs +125 -0
  85. package/_cjs/control/Spec/definition.cjs.map +1 -0
  86. package/_cjs/control/Spec.cjs +32 -0
  87. package/_cjs/control/Spec.cjs.map +1 -0
  88. package/_cjs/control/SummaryBuilder.cjs +87 -0
  89. package/_cjs/control/SummaryBuilder.cjs.map +1 -0
  90. package/_cjs/control/Test.cjs +34 -0
  91. package/_cjs/control/Test.cjs.map +1 -0
  92. package/_cjs/control/TestAnnotationRenderer/api.cjs +101 -0
  93. package/_cjs/control/TestAnnotationRenderer/api.cjs.map +1 -0
  94. package/_cjs/control/TestAnnotationRenderer/definition.cjs +53 -0
  95. package/_cjs/control/TestAnnotationRenderer/definition.cjs.map +1 -0
  96. package/_cjs/control/TestAnnotationRenderer.cjs +32 -0
  97. package/_cjs/control/TestAnnotationRenderer.cjs.map +1 -0
  98. package/_cjs/control/TestAspect/api.cjs +148 -0
  99. package/_cjs/control/TestAspect/api.cjs.map +1 -0
  100. package/_cjs/control/TestAspect/definition.cjs +6 -0
  101. package/_cjs/control/TestAspect/definition.cjs.map +1 -0
  102. package/_cjs/control/TestAspect.cjs +32 -0
  103. package/_cjs/control/TestAspect.cjs.map +1 -0
  104. package/_cjs/control/TestClock/api.cjs +72 -0
  105. package/_cjs/control/TestClock/api.cjs.map +1 -0
  106. package/_cjs/control/TestClock/definition.cjs +225 -0
  107. package/_cjs/control/TestClock/definition.cjs.map +1 -0
  108. package/_cjs/control/TestClock.cjs +32 -0
  109. package/_cjs/control/TestClock.cjs.map +1 -0
  110. package/_cjs/control/TestConsole/api.cjs +64 -0
  111. package/_cjs/control/TestConsole/api.cjs.map +1 -0
  112. package/_cjs/control/TestConsole/definition.cjs +100 -0
  113. package/_cjs/control/TestConsole/definition.cjs.map +1 -0
  114. package/_cjs/control/TestConsole.cjs +32 -0
  115. package/_cjs/control/TestConsole.cjs.map +1 -0
  116. package/_cjs/control/TestEnvironment.cjs +39 -0
  117. package/_cjs/control/TestEnvironment.cjs.map +1 -0
  118. package/_cjs/control/TestExecutor.cjs +58 -0
  119. package/_cjs/control/TestExecutor.cjs.map +1 -0
  120. package/_cjs/control/TestLogger.cjs +58 -0
  121. package/_cjs/control/TestLogger.cjs.map +1 -0
  122. package/_cjs/control/TestRandom/api.cjs +125 -0
  123. package/_cjs/control/TestRandom/api.cjs.map +1 -0
  124. package/_cjs/control/TestRandom/definition.cjs +458 -0
  125. package/_cjs/control/TestRandom/definition.cjs.map +1 -0
  126. package/_cjs/control/TestRandom.cjs +32 -0
  127. package/_cjs/control/TestRandom.cjs.map +1 -0
  128. package/_cjs/control/TestRenderer/ConsoleRenderer.cjs +113 -0
  129. package/_cjs/control/TestRenderer/ConsoleRenderer.cjs.map +1 -0
  130. package/_cjs/control/TestRenderer/definition.cjs +6 -0
  131. package/_cjs/control/TestRenderer/definition.cjs.map +1 -0
  132. package/_cjs/control/TestRunner.cjs +45 -0
  133. package/_cjs/control/TestRunner.cjs.map +1 -0
  134. package/_cjs/data/AssertionData.cjs +55 -0
  135. package/_cjs/data/AssertionData.cjs.map +1 -0
  136. package/_cjs/data/AssertionResult.cjs +34 -0
  137. package/_cjs/data/AssertionResult.cjs.map +1 -0
  138. package/_cjs/data/AssertionValue/api.cjs +64 -0
  139. package/_cjs/data/AssertionValue/api.cjs.map +1 -0
  140. package/_cjs/data/AssertionValue/definition.cjs +35 -0
  141. package/_cjs/data/AssertionValue/definition.cjs.map +1 -0
  142. package/_cjs/data/AssertionValue.cjs +32 -0
  143. package/_cjs/data/AssertionValue.cjs.map +1 -0
  144. package/_cjs/data/ExecutedSpec/api.cjs +132 -0
  145. package/_cjs/data/ExecutedSpec/api.cjs.map +1 -0
  146. package/_cjs/data/ExecutedSpec/definition.cjs +58 -0
  147. package/_cjs/data/ExecutedSpec/definition.cjs.map +1 -0
  148. package/_cjs/data/ExecutedSpec.cjs +32 -0
  149. package/_cjs/data/ExecutedSpec.cjs.map +1 -0
  150. package/_cjs/data/ExecutionResult.cjs +142 -0
  151. package/_cjs/data/ExecutionResult.cjs.map +1 -0
  152. package/_cjs/data/FailureDetails.cjs +17 -0
  153. package/_cjs/data/FailureDetails.cjs.map +1 -0
  154. package/_cjs/data/FreeBooleanAlgebra/api.cjs +194 -0
  155. package/_cjs/data/FreeBooleanAlgebra/api.cjs.map +1 -0
  156. package/_cjs/data/FreeBooleanAlgebra/definition.cjs +59 -0
  157. package/_cjs/data/FreeBooleanAlgebra/definition.cjs.map +1 -0
  158. package/_cjs/data/FreeBooleanAlgebra.cjs +32 -0
  159. package/_cjs/data/FreeBooleanAlgebra.cjs.map +1 -0
  160. package/_cjs/data/GenFailureDetails.cjs +18 -0
  161. package/_cjs/data/GenFailureDetails.cjs.map +1 -0
  162. package/_cjs/data/LogLine/Fragment.cjs +94 -0
  163. package/_cjs/data/LogLine/Fragment.cjs.map +1 -0
  164. package/_cjs/data/LogLine/Line.cjs +142 -0
  165. package/_cjs/data/LogLine/Line.cjs.map +1 -0
  166. package/_cjs/data/LogLine/Message.cjs +145 -0
  167. package/_cjs/data/LogLine/Message.cjs.map +1 -0
  168. package/_cjs/data/LogLine/Style.cjs +124 -0
  169. package/_cjs/data/LogLine/Style.cjs.map +1 -0
  170. package/_cjs/data/LogLine/api.cjs +65 -0
  171. package/_cjs/data/LogLine/api.cjs.map +1 -0
  172. package/_cjs/data/LogLine.cjs +32 -0
  173. package/_cjs/data/LogLine.cjs.map +1 -0
  174. package/_cjs/data/Render/api.cjs +25 -0
  175. package/_cjs/data/Render/api.cjs.map +1 -0
  176. package/_cjs/data/Render/definition.cjs +52 -0
  177. package/_cjs/data/Render/definition.cjs.map +1 -0
  178. package/_cjs/data/Render.cjs +32 -0
  179. package/_cjs/data/Render.cjs.map +1 -0
  180. package/_cjs/data/RenderParam/api.cjs +40 -0
  181. package/_cjs/data/RenderParam/api.cjs.map +1 -0
  182. package/_cjs/data/RenderParam/definition.cjs +33 -0
  183. package/_cjs/data/RenderParam/definition.cjs.map +1 -0
  184. package/_cjs/data/RenderParam.cjs +32 -0
  185. package/_cjs/data/RenderParam.cjs.map +1 -0
  186. package/_cjs/data/Summary.cjs +20 -0
  187. package/_cjs/data/Summary.cjs.map +1 -0
  188. package/_cjs/data/TestAnnotation/api.cjs +76 -0
  189. package/_cjs/data/TestAnnotation/api.cjs.map +1 -0
  190. package/_cjs/data/TestAnnotation/definition.cjs +55 -0
  191. package/_cjs/data/TestAnnotation/definition.cjs.map +1 -0
  192. package/_cjs/data/TestAnnotation.cjs +32 -0
  193. package/_cjs/data/TestAnnotation.cjs.map +1 -0
  194. package/_cjs/data/TestAnnotationMap.cjs +51 -0
  195. package/_cjs/data/TestAnnotationMap.cjs.map +1 -0
  196. package/_cjs/data/TestArgs/definition.cjs +18 -0
  197. package/_cjs/data/TestArgs/definition.cjs.map +1 -0
  198. package/_cjs/data/TestArgs.cjs +19 -0
  199. package/_cjs/data/TestArgs.cjs.map +1 -0
  200. package/_cjs/data/TestConfig.cjs +76 -0
  201. package/_cjs/data/TestConfig.cjs.map +1 -0
  202. package/_cjs/data/TestFailure.cjs +75 -0
  203. package/_cjs/data/TestFailure.cjs.map +1 -0
  204. package/_cjs/data/TestSuccess.cjs +48 -0
  205. package/_cjs/data/TestSuccess.cjs.map +1 -0
  206. package/_cjs/data/TestTimeoutException.cjs +16 -0
  207. package/_cjs/data/TestTimeoutException.cjs.map +1 -0
  208. package/_cjs/demo.cjs +44 -0
  209. package/_cjs/demo.cjs.map +1 -0
  210. package/_cjs/util/math.cjs +673 -0
  211. package/_cjs/util/math.cjs.map +1 -0
  212. package/_mjs/api.mjs +57 -0
  213. package/_mjs/api.mjs.map +1 -0
  214. package/_mjs/control/AbstractRunnableSpec.mjs +16 -0
  215. package/_mjs/control/AbstractRunnableSpec.mjs.map +1 -0
  216. package/_mjs/control/Annotations/api.mjs +30 -0
  217. package/_mjs/control/Annotations/api.mjs.map +1 -0
  218. package/_mjs/control/Annotations/definition.mjs +13 -0
  219. package/_mjs/control/Annotations/definition.mjs.map +1 -0
  220. package/_mjs/control/Annotations/live.mjs +40 -0
  221. package/_mjs/control/Annotations/live.mjs.map +1 -0
  222. package/_mjs/control/Annotations.mjs +5 -0
  223. package/_mjs/control/Annotations.mjs.map +1 -0
  224. package/_mjs/control/Assertion/api.mjs +170 -0
  225. package/_mjs/control/Assertion/api.mjs.map +1 -0
  226. package/_mjs/control/Assertion/definition.mjs +17 -0
  227. package/_mjs/control/Assertion/definition.mjs.map +1 -0
  228. package/_mjs/control/Assertion.mjs +4 -0
  229. package/_mjs/control/Assertion.mjs.map +1 -0
  230. package/_mjs/control/AssertionIO/api.mjs +28 -0
  231. package/_mjs/control/AssertionIO/api.mjs.map +1 -0
  232. package/_mjs/control/AssertionIO/definition.mjs +23 -0
  233. package/_mjs/control/AssertionIO/definition.mjs.map +1 -0
  234. package/_mjs/control/AssertionIO.mjs +4 -0
  235. package/_mjs/control/AssertionIO.mjs.map +1 -0
  236. package/_mjs/control/DefaultRunnableSpec.mjs +15 -0
  237. package/_mjs/control/DefaultRunnableSpec.mjs.map +1 -0
  238. package/_mjs/control/DefaultTestReporter/definition.mjs +2 -0
  239. package/_mjs/control/DefaultTestReporter/definition.mjs.map +1 -0
  240. package/_mjs/control/DefaultTestReporter/render.mjs +245 -0
  241. package/_mjs/control/DefaultTestReporter/render.mjs.map +1 -0
  242. package/_mjs/control/DefaultTestReporter.mjs +4 -0
  243. package/_mjs/control/DefaultTestReporter.mjs.map +1 -0
  244. package/_mjs/control/FreeBooleanAlgebraIO/api.mjs +62 -0
  245. package/_mjs/control/FreeBooleanAlgebraIO/api.mjs.map +1 -0
  246. package/_mjs/control/FreeBooleanAlgebraIO/definition.mjs +2 -0
  247. package/_mjs/control/FreeBooleanAlgebraIO/definition.mjs.map +1 -0
  248. package/_mjs/control/FreeBooleanAlgebraIO.mjs +4 -0
  249. package/_mjs/control/FreeBooleanAlgebraIO.mjs.map +1 -0
  250. package/_mjs/control/Gen/api/array.mjs +31 -0
  251. package/_mjs/control/Gen/api/array.mjs.map +1 -0
  252. package/_mjs/control/Gen/api/char.mjs +95 -0
  253. package/_mjs/control/Gen/api/char.mjs.map +1 -0
  254. package/_mjs/control/Gen/api/conc.mjs +46 -0
  255. package/_mjs/control/Gen/api/conc.mjs.map +1 -0
  256. package/_mjs/control/Gen/api/double.mjs +60 -0
  257. package/_mjs/control/Gen/api/double.mjs.map +1 -0
  258. package/_mjs/control/Gen/api/float.mjs +41 -0
  259. package/_mjs/control/Gen/api/float.mjs.map +1 -0
  260. package/_mjs/control/Gen/api/string.mjs +72 -0
  261. package/_mjs/control/Gen/api/string.mjs.map +1 -0
  262. package/_mjs/control/Gen/api/struct.mjs +18 -0
  263. package/_mjs/control/Gen/api/struct.mjs.map +1 -0
  264. package/_mjs/control/Gen/api.mjs +288 -0
  265. package/_mjs/control/Gen/api.mjs.map +1 -0
  266. package/_mjs/control/Gen/constraints.mjs +2 -0
  267. package/_mjs/control/Gen/constraints.mjs.map +1 -0
  268. package/_mjs/control/Gen/definition.mjs +11 -0
  269. package/_mjs/control/Gen/definition.mjs.map +1 -0
  270. package/_mjs/control/Gen.mjs +14 -0
  271. package/_mjs/control/Gen.mjs.map +1 -0
  272. package/_mjs/control/Live/definition.mjs +42 -0
  273. package/_mjs/control/Live/definition.mjs.map +1 -0
  274. package/_mjs/control/Live.mjs +3 -0
  275. package/_mjs/control/Live.mjs.map +1 -0
  276. package/_mjs/control/RunnableSpec.mjs +44 -0
  277. package/_mjs/control/RunnableSpec.mjs.map +1 -0
  278. package/_mjs/control/Sample/api.mjs +195 -0
  279. package/_mjs/control/Sample/api.mjs.map +1 -0
  280. package/_mjs/control/Sample/definition.mjs +12 -0
  281. package/_mjs/control/Sample/definition.mjs.map +1 -0
  282. package/_mjs/control/Sample.mjs +4 -0
  283. package/_mjs/control/Sample.mjs.map +1 -0
  284. package/_mjs/control/Sized/api.mjs +16 -0
  285. package/_mjs/control/Sized/api.mjs.map +1 -0
  286. package/_mjs/control/Sized/definition.mjs +13 -0
  287. package/_mjs/control/Sized/definition.mjs.map +1 -0
  288. package/_mjs/control/Sized/live.mjs +25 -0
  289. package/_mjs/control/Sized/live.mjs.map +1 -0
  290. package/_mjs/control/Sized.mjs +5 -0
  291. package/_mjs/control/Sized.mjs.map +1 -0
  292. package/_mjs/control/Spec/api.mjs +449 -0
  293. package/_mjs/control/Spec/api.mjs.map +1 -0
  294. package/_mjs/control/Spec/definition.mjs +96 -0
  295. package/_mjs/control/Spec/definition.mjs.map +1 -0
  296. package/_mjs/control/Spec.mjs +4 -0
  297. package/_mjs/control/Spec.mjs.map +1 -0
  298. package/_mjs/control/SummaryBuilder.mjs +61 -0
  299. package/_mjs/control/SummaryBuilder.mjs.map +1 -0
  300. package/_mjs/control/Test.mjs +15 -0
  301. package/_mjs/control/Test.mjs.map +1 -0
  302. package/_mjs/control/TestAnnotationRenderer/api.mjs +74 -0
  303. package/_mjs/control/TestAnnotationRenderer/api.mjs.map +1 -0
  304. package/_mjs/control/TestAnnotationRenderer/definition.mjs +32 -0
  305. package/_mjs/control/TestAnnotationRenderer/definition.mjs.map +1 -0
  306. package/_mjs/control/TestAnnotationRenderer.mjs +4 -0
  307. package/_mjs/control/TestAnnotationRenderer.mjs.map +1 -0
  308. package/_mjs/control/TestAspect/api.mjs +93 -0
  309. package/_mjs/control/TestAspect/api.mjs.map +1 -0
  310. package/_mjs/control/TestAspect/definition.mjs +2 -0
  311. package/_mjs/control/TestAspect/definition.mjs.map +1 -0
  312. package/_mjs/control/TestAspect.mjs +4 -0
  313. package/_mjs/control/TestAspect.mjs.map +1 -0
  314. package/_mjs/control/TestClock/api.mjs +45 -0
  315. package/_mjs/control/TestClock/api.mjs.map +1 -0
  316. package/_mjs/control/TestClock/definition.mjs +173 -0
  317. package/_mjs/control/TestClock/definition.mjs.map +1 -0
  318. package/_mjs/control/TestClock.mjs +4 -0
  319. package/_mjs/control/TestClock.mjs.map +1 -0
  320. package/_mjs/control/TestConsole/api.mjs +41 -0
  321. package/_mjs/control/TestConsole/api.mjs.map +1 -0
  322. package/_mjs/control/TestConsole/definition.mjs +73 -0
  323. package/_mjs/control/TestConsole/definition.mjs.map +1 -0
  324. package/_mjs/control/TestConsole.mjs +4 -0
  325. package/_mjs/control/TestConsole.mjs.map +1 -0
  326. package/_mjs/control/TestEnvironment.mjs +17 -0
  327. package/_mjs/control/TestEnvironment.mjs.map +1 -0
  328. package/_mjs/control/TestExecutor.mjs +36 -0
  329. package/_mjs/control/TestExecutor.mjs.map +1 -0
  330. package/_mjs/control/TestLogger.mjs +36 -0
  331. package/_mjs/control/TestLogger.mjs.map +1 -0
  332. package/_mjs/control/TestRandom/api.mjs +87 -0
  333. package/_mjs/control/TestRandom/api.mjs.map +1 -0
  334. package/_mjs/control/TestRandom/definition.mjs +418 -0
  335. package/_mjs/control/TestRandom/definition.mjs.map +1 -0
  336. package/_mjs/control/TestRandom.mjs +4 -0
  337. package/_mjs/control/TestRandom.mjs.map +1 -0
  338. package/_mjs/control/TestRenderer/ConsoleRenderer.mjs +88 -0
  339. package/_mjs/control/TestRenderer/ConsoleRenderer.mjs.map +1 -0
  340. package/_mjs/control/TestRenderer/definition.mjs +2 -0
  341. package/_mjs/control/TestRenderer/definition.mjs.map +1 -0
  342. package/_mjs/control/TestRunner.mjs +23 -0
  343. package/_mjs/control/TestRunner.mjs.map +1 -0
  344. package/_mjs/data/AssertionData.mjs +34 -0
  345. package/_mjs/data/AssertionData.mjs.map +1 -0
  346. package/_mjs/data/AssertionResult.mjs +17 -0
  347. package/_mjs/data/AssertionResult.mjs.map +1 -0
  348. package/_mjs/data/AssertionValue/api.mjs +42 -0
  349. package/_mjs/data/AssertionValue/api.mjs.map +1 -0
  350. package/_mjs/data/AssertionValue/definition.mjs +19 -0
  351. package/_mjs/data/AssertionValue/definition.mjs.map +1 -0
  352. package/_mjs/data/AssertionValue.mjs +4 -0
  353. package/_mjs/data/AssertionValue.mjs.map +1 -0
  354. package/_mjs/data/ExecutedSpec/api.mjs +104 -0
  355. package/_mjs/data/ExecutedSpec/api.mjs.map +1 -0
  356. package/_mjs/data/ExecutedSpec/definition.mjs +40 -0
  357. package/_mjs/data/ExecutedSpec/definition.mjs.map +1 -0
  358. package/_mjs/data/ExecutedSpec.mjs +4 -0
  359. package/_mjs/data/ExecutedSpec.mjs.map +1 -0
  360. package/_mjs/data/ExecutionResult.mjs +110 -0
  361. package/_mjs/data/ExecutionResult.mjs.map +1 -0
  362. package/_mjs/data/FailureDetails.mjs +8 -0
  363. package/_mjs/data/FailureDetails.mjs.map +1 -0
  364. package/_mjs/data/FreeBooleanAlgebra/api.mjs +154 -0
  365. package/_mjs/data/FreeBooleanAlgebra/api.mjs.map +1 -0
  366. package/_mjs/data/FreeBooleanAlgebra/definition.mjs +40 -0
  367. package/_mjs/data/FreeBooleanAlgebra/definition.mjs.map +1 -0
  368. package/_mjs/data/FreeBooleanAlgebra.mjs +4 -0
  369. package/_mjs/data/FreeBooleanAlgebra.mjs.map +1 -0
  370. package/_mjs/data/GenFailureDetails.mjs +9 -0
  371. package/_mjs/data/GenFailureDetails.mjs.map +1 -0
  372. package/_mjs/data/LogLine/Fragment.mjs +65 -0
  373. package/_mjs/data/LogLine/Fragment.mjs.map +1 -0
  374. package/_mjs/data/LogLine/Line.mjs +104 -0
  375. package/_mjs/data/LogLine/Line.mjs.map +1 -0
  376. package/_mjs/data/LogLine/Message.mjs +107 -0
  377. package/_mjs/data/LogLine/Message.mjs.map +1 -0
  378. package/_mjs/data/LogLine/Style.mjs +101 -0
  379. package/_mjs/data/LogLine/Style.mjs.map +1 -0
  380. package/_mjs/data/LogLine/api.mjs +32 -0
  381. package/_mjs/data/LogLine/api.mjs.map +1 -0
  382. package/_mjs/data/LogLine.mjs +3 -0
  383. package/_mjs/data/LogLine.mjs.map +1 -0
  384. package/_mjs/data/Render/api.mjs +16 -0
  385. package/_mjs/data/Render/api.mjs.map +1 -0
  386. package/_mjs/data/Render/definition.mjs +33 -0
  387. package/_mjs/data/Render/definition.mjs.map +1 -0
  388. package/_mjs/data/Render.mjs +4 -0
  389. package/_mjs/data/Render.mjs.map +1 -0
  390. package/_mjs/data/RenderParam/api.mjs +28 -0
  391. package/_mjs/data/RenderParam/api.mjs.map +1 -0
  392. package/_mjs/data/RenderParam/definition.mjs +20 -0
  393. package/_mjs/data/RenderParam/definition.mjs.map +1 -0
  394. package/_mjs/data/RenderParam.mjs +4 -0
  395. package/_mjs/data/RenderParam.mjs.map +1 -0
  396. package/_mjs/data/Summary.mjs +11 -0
  397. package/_mjs/data/Summary.mjs.map +1 -0
  398. package/_mjs/data/TestAnnotation/api.mjs +47 -0
  399. package/_mjs/data/TestAnnotation/api.mjs.map +1 -0
  400. package/_mjs/data/TestAnnotation/definition.mjs +33 -0
  401. package/_mjs/data/TestAnnotation/definition.mjs.map +1 -0
  402. package/_mjs/data/TestAnnotation.mjs +4 -0
  403. package/_mjs/data/TestAnnotation.mjs.map +1 -0
  404. package/_mjs/data/TestAnnotationMap.mjs +33 -0
  405. package/_mjs/data/TestAnnotationMap.mjs.map +1 -0
  406. package/_mjs/data/TestArgs/definition.mjs +9 -0
  407. package/_mjs/data/TestArgs/definition.mjs.map +1 -0
  408. package/_mjs/data/TestArgs.mjs +3 -0
  409. package/_mjs/data/TestArgs.mjs.map +1 -0
  410. package/_mjs/data/TestConfig.mjs +52 -0
  411. package/_mjs/data/TestConfig.mjs.map +1 -0
  412. package/_mjs/data/TestFailure.mjs +49 -0
  413. package/_mjs/data/TestFailure.mjs.map +1 -0
  414. package/_mjs/data/TestSuccess.mjs +31 -0
  415. package/_mjs/data/TestSuccess.mjs.map +1 -0
  416. package/_mjs/data/TestTimeoutException.mjs +7 -0
  417. package/_mjs/data/TestTimeoutException.mjs.map +1 -0
  418. package/_mjs/demo.mjs +33 -0
  419. package/_mjs/demo.mjs.map +1 -0
  420. package/_mjs/util/math.mjs +604 -0
  421. package/_mjs/util/math.mjs.map +1 -0
  422. package/_src/api.ts +76 -0
  423. package/_src/control/AbstractRunnableSpec.ts +23 -0
  424. package/_src/control/Annotations/api.ts +33 -0
  425. package/_src/control/Annotations/definition.ts +20 -0
  426. package/_src/control/Annotations/live.ts +50 -0
  427. package/_src/control/Annotations.ts +5 -0
  428. package/_src/control/Assertion/api.ts +236 -0
  429. package/_src/control/Assertion/definition.ts +20 -0
  430. package/_src/control/Assertion.ts +4 -0
  431. package/_src/control/AssertionIO/api.ts +32 -0
  432. package/_src/control/AssertionIO/definition.ts +26 -0
  433. package/_src/control/AssertionIO.ts +4 -0
  434. package/_src/control/DefaultRunnableSpec.ts +12 -0
  435. package/_src/control/DefaultTestReporter/definition.ts +6 -0
  436. package/_src/control/DefaultTestReporter/render.ts +295 -0
  437. package/_src/control/DefaultTestReporter.ts +4 -0
  438. package/_src/control/FreeBooleanAlgebraIO/api.ts +67 -0
  439. package/_src/control/FreeBooleanAlgebraIO/definition.ts +13 -0
  440. package/_src/control/FreeBooleanAlgebraIO.ts +4 -0
  441. package/_src/control/Gen/api/array.ts +31 -0
  442. package/_src/control/Gen/api/char.ts +83 -0
  443. package/_src/control/Gen/api/conc.ts +50 -0
  444. package/_src/control/Gen/api/double.ts +64 -0
  445. package/_src/control/Gen/api/float.ts +36 -0
  446. package/_src/control/Gen/api/string.ts +71 -0
  447. package/_src/control/Gen/api/struct.ts +21 -0
  448. package/_src/control/Gen/api.ts +276 -0
  449. package/_src/control/Gen/constraints.ts +38 -0
  450. package/_src/control/Gen/definition.ts +9 -0
  451. package/_src/control/Gen.ts +15 -0
  452. package/_src/control/Live/definition.ts +47 -0
  453. package/_src/control/Live.ts +3 -0
  454. package/_src/control/RunnableSpec.ts +42 -0
  455. package/_src/control/Sample/api.ts +287 -0
  456. package/_src/control/Sample/definition.ts +7 -0
  457. package/_src/control/Sample.ts +4 -0
  458. package/_src/control/Sized/api.ts +14 -0
  459. package/_src/control/Sized/definition.ts +13 -0
  460. package/_src/control/Sized/live.ts +19 -0
  461. package/_src/control/Sized.ts +5 -0
  462. package/_src/control/Spec/api.ts +384 -0
  463. package/_src/control/Spec/definition.ts +103 -0
  464. package/_src/control/Spec.ts +4 -0
  465. package/_src/control/SummaryBuilder.ts +68 -0
  466. package/_src/control/Test.ts +31 -0
  467. package/_src/control/TestAnnotationRenderer/api.ts +75 -0
  468. package/_src/control/TestAnnotationRenderer/definition.ts +49 -0
  469. package/_src/control/TestAnnotationRenderer.ts +4 -0
  470. package/_src/control/TestAspect/api.ts +122 -0
  471. package/_src/control/TestAspect/definition.ts +3 -0
  472. package/_src/control/TestAspect.ts +4 -0
  473. package/_src/control/TestClock/api.ts +36 -0
  474. package/_src/control/TestClock/definition.ts +196 -0
  475. package/_src/control/TestClock.ts +4 -0
  476. package/_src/control/TestConsole/api.ts +36 -0
  477. package/_src/control/TestConsole/definition.ts +61 -0
  478. package/_src/control/TestConsole.ts +4 -0
  479. package/_src/control/TestEnvironment.ts +30 -0
  480. package/_src/control/TestExecutor.ts +54 -0
  481. package/_src/control/TestLogger.ts +37 -0
  482. package/_src/control/TestRandom/api.ts +76 -0
  483. package/_src/control/TestRandom/definition.ts +362 -0
  484. package/_src/control/TestRandom.ts +4 -0
  485. package/_src/control/TestRenderer/ConsoleRenderer.ts +94 -0
  486. package/_src/control/TestRenderer/definition.ts +7 -0
  487. package/_src/control/TestRunner.ts +34 -0
  488. package/_src/data/AssertionData.ts +33 -0
  489. package/_src/data/AssertionResult.ts +31 -0
  490. package/_src/data/AssertionValue/api.ts +48 -0
  491. package/_src/data/AssertionValue/definition.ts +20 -0
  492. package/_src/data/AssertionValue.ts +4 -0
  493. package/_src/data/ExecutedSpec/api.ts +96 -0
  494. package/_src/data/ExecutedSpec/definition.ts +37 -0
  495. package/_src/data/ExecutedSpec.ts +4 -0
  496. package/_src/data/ExecutionResult.ts +153 -0
  497. package/_src/data/FailureDetails.ts +13 -0
  498. package/_src/data/FreeBooleanAlgebra/api.ts +152 -0
  499. package/_src/data/FreeBooleanAlgebra/definition.ts +38 -0
  500. package/_src/data/FreeBooleanAlgebra.ts +4 -0
  501. package/_src/data/GenFailureDetails.ts +3 -0
  502. package/_src/data/LogLine/Fragment.ts +59 -0
  503. package/_src/data/LogLine/Line.ts +91 -0
  504. package/_src/data/LogLine/Message.ts +94 -0
  505. package/_src/data/LogLine/Style.ts +150 -0
  506. package/_src/data/LogLine/api.ts +40 -0
  507. package/_src/data/LogLine.ts +2 -0
  508. package/_src/data/Render/api.ts +18 -0
  509. package/_src/data/Render/definition.ts +36 -0
  510. package/_src/data/Render.ts +4 -0
  511. package/_src/data/RenderParam/api.ts +31 -0
  512. package/_src/data/RenderParam/definition.ts +28 -0
  513. package/_src/data/RenderParam.ts +4 -0
  514. package/_src/data/Summary.ts +4 -0
  515. package/_src/data/TestAnnotation/api.ts +49 -0
  516. package/_src/data/TestAnnotation/definition.ts +37 -0
  517. package/_src/data/TestAnnotation.ts +4 -0
  518. package/_src/data/TestAnnotationMap.ts +41 -0
  519. package/_src/data/TestArgs/definition.ts +7 -0
  520. package/_src/data/TestArgs.ts +3 -0
  521. package/_src/data/TestConfig.ts +47 -0
  522. package/_src/data/TestFailure.ts +56 -0
  523. package/_src/data/TestSuccess.ts +39 -0
  524. package/_src/data/TestTimeoutException.ts +5 -0
  525. package/_src/demo.ts +16 -0
  526. package/_src/util/math.ts +497 -0
  527. package/api.d.ts +21 -0
  528. package/control/AbstractRunnableSpec.d.ts +15 -0
  529. package/control/Annotations/api.d.ts +26 -0
  530. package/control/Annotations/definition.d.ts +20 -0
  531. package/control/Annotations/live.d.ts +18 -0
  532. package/control/Annotations.d.ts +3 -0
  533. package/control/Assertion/api.d.ts +81 -0
  534. package/control/Assertion/definition.d.ts +17 -0
  535. package/control/Assertion.d.ts +2 -0
  536. package/control/AssertionIO/api.d.ts +18 -0
  537. package/control/AssertionIO/definition.d.ts +18 -0
  538. package/control/AssertionIO.d.ts +2 -0
  539. package/control/DefaultRunnableSpec.d.ts +7 -0
  540. package/control/DefaultTestReporter/definition.d.ts +6 -0
  541. package/control/DefaultTestReporter/render.d.ts +23 -0
  542. package/control/DefaultTestReporter.d.ts +2 -0
  543. package/control/FreeBooleanAlgebraIO/api.d.ts +44 -0
  544. package/control/FreeBooleanAlgebraIO/definition.d.ts +12 -0
  545. package/control/FreeBooleanAlgebraIO.d.ts +2 -0
  546. package/control/Gen/api/array.d.ts +19 -0
  547. package/control/Gen/api/char.d.ts +47 -0
  548. package/control/Gen/api/conc.d.ts +26 -0
  549. package/control/Gen/api/double.d.ts +13 -0
  550. package/control/Gen/api/float.d.ts +7 -0
  551. package/control/Gen/api/string.d.ts +49 -0
  552. package/control/Gen/api/struct.d.ts +8 -0
  553. package/control/Gen/api.d.ts +169 -0
  554. package/control/Gen/constraints.d.ts +32 -0
  555. package/control/Gen/definition.d.ts +11 -0
  556. package/control/Gen.d.ts +10 -0
  557. package/control/Live/definition.d.ts +24 -0
  558. package/control/Live.d.ts +1 -0
  559. package/control/RunnableSpec.d.ts +12 -0
  560. package/control/Sample/api.d.ts +79 -0
  561. package/control/Sample/definition.d.ts +11 -0
  562. package/control/Sample.d.ts +2 -0
  563. package/control/Sized/api.d.ts +13 -0
  564. package/control/Sized/definition.d.ts +14 -0
  565. package/control/Sized/live.d.ts +9 -0
  566. package/control/Sized.d.ts +3 -0
  567. package/control/Spec/api.d.ts +159 -0
  568. package/control/Spec/definition.d.ts +96 -0
  569. package/control/Spec.d.ts +2 -0
  570. package/control/SummaryBuilder.d.ts +15 -0
  571. package/control/Test.d.ts +20 -0
  572. package/control/TestAnnotationRenderer/api.d.ts +42 -0
  573. package/control/TestAnnotationRenderer/definition.d.ts +31 -0
  574. package/control/TestAnnotationRenderer.d.ts +2 -0
  575. package/control/TestAspect/api.d.ts +23 -0
  576. package/control/TestAspect/definition.d.ts +2 -0
  577. package/control/TestAspect.d.ts +2 -0
  578. package/control/TestClock/api.d.ts +21 -0
  579. package/control/TestClock/definition.d.ts +66 -0
  580. package/control/TestClock.d.ts +2 -0
  581. package/control/TestConsole/api.d.ts +15 -0
  582. package/control/TestConsole/definition.d.ts +39 -0
  583. package/control/TestConsole.d.ts +2 -0
  584. package/control/TestEnvironment.d.ts +16 -0
  585. package/control/TestExecutor.d.ts +13 -0
  586. package/control/TestLogger.d.ts +25 -0
  587. package/control/TestRandom/api.d.ts +49 -0
  588. package/control/TestRandom/definition.d.ts +91 -0
  589. package/control/TestRandom.d.ts +2 -0
  590. package/control/TestRenderer/ConsoleRenderer.d.ts +15 -0
  591. package/control/TestRenderer/definition.d.ts +4 -0
  592. package/control/TestRunner.d.ts +18 -0
  593. package/data/AssertionData.d.ts +24 -0
  594. package/data/AssertionResult.d.ts +23 -0
  595. package/data/AssertionValue/api.d.ts +27 -0
  596. package/data/AssertionValue/definition.d.ts +19 -0
  597. package/data/AssertionValue.d.ts +2 -0
  598. package/data/ExecutedSpec/api.d.ts +47 -0
  599. package/data/ExecutedSpec/definition.d.ts +39 -0
  600. package/data/ExecutedSpec.d.ts +2 -0
  601. package/data/ExecutionResult.d.ts +59 -0
  602. package/data/FailureDetails.d.ts +15 -0
  603. package/data/FreeBooleanAlgebra/api.d.ts +81 -0
  604. package/data/FreeBooleanAlgebra/definition.d.ts +38 -0
  605. package/data/FreeBooleanAlgebra.d.ts +2 -0
  606. package/data/GenFailureDetails.d.ts +6 -0
  607. package/data/LogLine/Fragment.d.ts +46 -0
  608. package/data/LogLine/Line.d.ts +62 -0
  609. package/data/LogLine/Message.d.ts +61 -0
  610. package/data/LogLine/Style.d.ts +107 -0
  611. package/data/LogLine/api.d.ts +11 -0
  612. package/data/LogLine.d.ts +2 -0
  613. package/data/Render/api.d.ts +13 -0
  614. package/data/Render/definition.d.ts +31 -0
  615. package/data/Render.d.ts +2 -0
  616. package/data/RenderParam/api.d.ts +13 -0
  617. package/data/RenderParam/definition.d.ts +25 -0
  618. package/data/RenderParam.d.ts +2 -0
  619. package/data/Summary.d.ts +8 -0
  620. package/data/TestAnnotation/api.d.ts +41 -0
  621. package/data/TestAnnotation/definition.d.ts +20 -0
  622. package/data/TestAnnotation.d.ts +2 -0
  623. package/data/TestAnnotationMap.d.ts +12 -0
  624. package/data/TestArgs/definition.d.ts +7 -0
  625. package/data/TestArgs.d.ts +1 -0
  626. package/data/TestConfig.d.ts +42 -0
  627. package/data/TestFailure.d.ts +46 -0
  628. package/data/TestSuccess.d.ts +33 -0
  629. package/data/TestTimeoutException.d.ts +3 -0
  630. package/demo.d.ts +1 -0
  631. package/package.json +18 -0
  632. package/util/math.d.ts +130 -0
@@ -0,0 +1,47 @@
1
+ /**
2
+ * @tsplus type fncts.test.data.TestConfig
3
+ * @tsplus companion fncts.test.data.TestConfigOps
4
+ */
5
+ export abstract class TestConfig {
6
+ abstract readonly repeats: number;
7
+ abstract readonly retries: number;
8
+ abstract readonly samples: number;
9
+ abstract readonly shrinks: number;
10
+ }
11
+
12
+ /**
13
+ * @tsplus static fncts.test.data.TestConfigOps Tag
14
+ */
15
+ export const TestConfigTag = Tag<TestConfig>();
16
+
17
+ /**
18
+ * @tsplus static fncts.test.data.TestConfigOps Live
19
+ */
20
+ export function live(_: TestConfig): Layer<unknown, never, Has<TestConfig>> {
21
+ return Layer.succeed(
22
+ new (class extends TestConfig {
23
+ repeats = _.repeats;
24
+ retries = _.retries;
25
+ samples = _.samples;
26
+ shrinks = _.shrinks;
27
+ })(),
28
+ TestConfig.Tag,
29
+ );
30
+ }
31
+
32
+ /**
33
+ * @tsplus static fncts.test.data.TestConfigOps repeats
34
+ */
35
+ export const repeats = IO.serviceWith((_: TestConfig) => _.repeats, TestConfig.Tag);
36
+ /**
37
+ * @tsplus static fncts.test.data.TestConfigOps retries
38
+ */
39
+ export const retries = IO.serviceWith((_: TestConfig) => _.retries, TestConfig.Tag);
40
+ /**
41
+ * @tsplus static fncts.test.data.TestConfigOps samples
42
+ */
43
+ export const samples = IO.serviceWith((_: TestConfig) => _.samples, TestConfig.Tag);
44
+ /**
45
+ * @tsplus static fncts.test.data.TestConfigOps shrinks
46
+ */
47
+ export const shrinks = IO.serviceWith((_: TestConfig) => _.shrinks, TestConfig.Tag);
@@ -0,0 +1,56 @@
1
+ import type { TestResult } from "./FailureDetails.js";
2
+
3
+ export const enum TestFailureTag {
4
+ AssertionFailure = "AssertionFailure",
5
+ RuntimeFailure = "RuntimeFailure",
6
+ }
7
+
8
+ export class AssertionFailure {
9
+ readonly _tag = TestFailureTag.AssertionFailure;
10
+ constructor(readonly result: TestResult) {}
11
+ }
12
+
13
+ export class RuntimeFailure<E> {
14
+ readonly _tag = TestFailureTag.RuntimeFailure;
15
+ constructor(readonly cause: Cause<E>) {}
16
+ }
17
+
18
+ /**
19
+ * @tsplus type fncts.test.data.TestFailure
20
+ */
21
+ export type TestFailure<E> = AssertionFailure | RuntimeFailure<E>;
22
+
23
+ /**
24
+ * @tsplus type fncts.test.data.TestFailureOps
25
+ */
26
+ export interface TestFailureOps {}
27
+
28
+ export const TestFailure: TestFailureOps = {};
29
+
30
+ /**
31
+ * @tsplus static fncts.test.data.TestFailureOps assertion
32
+ */
33
+ export function assertion(result: TestResult): TestFailure<never> {
34
+ return new AssertionFailure(result);
35
+ }
36
+
37
+ /**
38
+ * @tsplus static fncts.test.data.TestFailureOps halt
39
+ */
40
+ export function halt(defect: unknown): TestFailure<never> {
41
+ return new RuntimeFailure(Cause.halt(defect));
42
+ }
43
+
44
+ /**
45
+ * @tsplus static fncts.test.data.TestFailureOps fail
46
+ */
47
+ export function fail<E>(e: E): TestFailure<E> {
48
+ return new RuntimeFailure(Cause.fail(e));
49
+ }
50
+
51
+ /**
52
+ * @tsplus static fncts.test.data.TestFailureOps failCause
53
+ */
54
+ export function failCause<E>(cause: Cause<E>): TestFailure<E> {
55
+ return new RuntimeFailure(cause);
56
+ }
@@ -0,0 +1,39 @@
1
+ import type { FreeBooleanAlgebra } from "./FreeBooleanAlgebra.js";
2
+
3
+ export const enum TestSuccessTag {
4
+ Succeeded = "Succeeded",
5
+ Ignored = "Ignored",
6
+ }
7
+
8
+ export class Succeeded {
9
+ readonly _tag = TestSuccessTag.Succeeded;
10
+ constructor(readonly result: FreeBooleanAlgebra<void>) {}
11
+ }
12
+
13
+ export class Ignored {
14
+ readonly _tag = TestSuccessTag.Ignored;
15
+ }
16
+
17
+ /**
18
+ * @tsplus type fncts.test.TestSuccess
19
+ */
20
+ export type TestSuccess = Succeeded | Ignored;
21
+
22
+ /**
23
+ * @tsplus type fncts.test.TestSuccessOps
24
+ */
25
+ export interface TestSuccessOps {}
26
+
27
+ export const TestSuccess: TestSuccessOps = {};
28
+
29
+ /**
30
+ * @tsplus static fncts.test.TestSuccessOps Succeeded
31
+ */
32
+ export function succeeded(result: FreeBooleanAlgebra<void>): TestSuccess {
33
+ return new Succeeded(result);
34
+ }
35
+
36
+ /**
37
+ * @tsplus static fncts.test.TestSuccessOps Ignored
38
+ */
39
+ export const ignored = new Ignored();
@@ -0,0 +1,5 @@
1
+ export class TestTimeoutException extends Error {
2
+ constructor(message: string) {
3
+ super(message);
4
+ }
5
+ }
package/_src/demo.ts ADDED
@@ -0,0 +1,16 @@
1
+ import { DefaultRunnableSpec } from "@fncts/test/control/DefaultRunnableSpec";
2
+
3
+ import { suite, test, testIO } from "./api.js";
4
+ import { strictEqualTo } from "./control/Assertion.js";
5
+
6
+ const ServiceATag = Tag<{ x: number }>();
7
+
8
+ class DemoSpec extends DefaultRunnableSpec {
9
+ spec = suite(
10
+ "TestSuite",
11
+ test("Demo success", (0).assert(strictEqualTo(0))),
12
+ test("Demo failure", { a: { b: { c: { d: 100 } } } }.assert(strictEqualTo({ a: { b: { c: { d: 0 } } } }))),
13
+ );
14
+ }
15
+
16
+ new DemoSpec().main();
@@ -0,0 +1,497 @@
1
+ /** @internal */
2
+ export const MIN_VALUE_32 = 2 ** -126 * 2 ** -23;
3
+ /** @internal */
4
+ export const MAX_VALUE_32 = 2 ** 127 * (1 + (2 ** 23 - 1) / 2 ** 23);
5
+ /** @internal */
6
+ export const EPSILON_32 = 2 ** -23;
7
+
8
+ /** @internal */
9
+ const INDEX_POSITIVE_INFINITY_32 = 2139095040; // floatToIndex(MAX_VALUE_32) + 1;
10
+ /** @internal */
11
+ const INDEX_NEGATIVE_INFINITY_32 = -2139095041; // floatToIndex(-MAX_VALUE_32) - 1
12
+
13
+ export function safeFloatToIndex(f: number, label: string): IO<unknown, never, number> {
14
+ const conversionTrick = "you can convert any double to a 32-bit float by using `new Float32Array([myDouble])[0]`";
15
+ const errorMessage = "fc.floatNext constraints." + label + " must be a 32-bit float - " + conversionTrick;
16
+ if (Number.isNaN(f) || (Number.isFinite(f) && (f < -MAX_VALUE_32 || f > MAX_VALUE_32))) {
17
+ return IO.haltNow(new Error(errorMessage));
18
+ }
19
+ const index = floatToIndex(f);
20
+ if (!Number.isInteger(index)) {
21
+ return IO.haltNow(new Error(errorMessage));
22
+ }
23
+ return IO.succeedNow(index);
24
+ }
25
+
26
+ export function decomposeFloat(f: number): { exponent: number; significand: number } {
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 { exponent, significand: f / powExponent };
35
+ }
36
+ }
37
+ return { exponent: Number.NaN, significand: Number.NaN };
38
+ }
39
+
40
+ export function floatToIndex(f: number): number {
41
+ if (f === Number.POSITIVE_INFINITY) {
42
+ return INDEX_POSITIVE_INFINITY_32;
43
+ }
44
+ if (f === Number.NEGATIVE_INFINITY) {
45
+ return INDEX_NEGATIVE_INFINITY_32;
46
+ }
47
+ const { exponent, significand } = decomposeFloat(f);
48
+
49
+ if (Number.isNaN(exponent) || Number.isNaN(significand) || !Number.isInteger(significand * 0x800000)) {
50
+ return Number.NaN;
51
+ }
52
+
53
+ if (f > 0 || (f === 0 && 1 / f === Number.POSITIVE_INFINITY)) {
54
+ return indexInFloatFromDecomp(exponent, significand);
55
+ } else {
56
+ return -indexInFloatFromDecomp(exponent, -significand) - 1;
57
+ }
58
+ }
59
+
60
+ /** @internal */
61
+ export function indexInFloatFromDecomp(exponent: number, significand: number) {
62
+ // WARNING: significand >= 0
63
+
64
+ // By construct of significand in decomposeFloat,
65
+ // significand is always max-ed.
66
+
67
+ // The float close to zero are the only one having a significand <1, they also have an exponent of -126.
68
+ // They are in range: [2**(-126) * 2**(-23), 2**(-126) * (2 - 2 ** 23)]
69
+ // In other words there are 2**24 elements in that range if we include zero.
70
+ // All other ranges (other exponents) have a length of 2**23 elements.
71
+ if (exponent === -126) {
72
+ return significand * 0x800000; // significand * 2**23
73
+ }
74
+ // Offset due to exp = -126 + Offset of previous exp (excl. -126) + Offset in current exp
75
+ // 2**24 + (exponent - (-126) -1) * 2**23 + (significand - 1) * 2**23
76
+ return (exponent + 127) * 0x800000 + (significand - 1) * 0x800000;
77
+ }
78
+
79
+ /**
80
+ * Compute the 32-bit floating point number corresponding to the provided indexes
81
+ *
82
+ * @param n - index of the float
83
+ *
84
+ * @internal
85
+ */
86
+ export function indexToFloat(index: number): number {
87
+ if (index < 0) {
88
+ return -indexToFloat(-index - 1);
89
+ }
90
+ if (index === INDEX_POSITIVE_INFINITY_32) {
91
+ return Number.POSITIVE_INFINITY;
92
+ }
93
+ if (index < 0x1000000) {
94
+ // The first 2**24 elements correspond to values having
95
+ // exponent = -126 and significand = index * 2**(-23)
96
+ return index * 2 ** -149;
97
+ }
98
+ const postIndex = index - 0x1000000;
99
+ // Math.floor(postIndex / 0x800000) = Math.floor(postIndex / 2**23) = (postIndex >> 23)
100
+ const exponent = -125 + (postIndex >> 23);
101
+ // (postIndex % 0x800000) / 0x800000 = (postIndex & 0x7fffff) / 0x800000
102
+ const significand = 1 + (postIndex & 0x7fffff) / 0x800000;
103
+ return significand * 2 ** exponent;
104
+ }
105
+
106
+ /** @internal */
107
+ export type ArrayInt64 = { sign: 1 | -1; data: [number, number] };
108
+
109
+ /** @internal */
110
+ export const Zero64: ArrayInt64 = { sign: 1, data: [0, 0] };
111
+
112
+ /** @internal */
113
+ export const Unit64: ArrayInt64 = { sign: 1, data: [0, 1] };
114
+
115
+ /** @internal */
116
+ export function isZero64(a: ArrayInt64): boolean {
117
+ return a.data[0] === 0 && a.data[1] === 0;
118
+ }
119
+
120
+ /** @internal */
121
+ export function isStrictlyNegative64(a: ArrayInt64): boolean {
122
+ return a.sign === -1 && !isZero64(a);
123
+ }
124
+
125
+ /** @internal */
126
+ export function isStrictlyPositive64(a: ArrayInt64): boolean {
127
+ return a.sign === 1 && !isZero64(a);
128
+ }
129
+
130
+ /** @internal */
131
+ export function isEqual64(a: ArrayInt64, b: ArrayInt64): boolean {
132
+ if (a.data[0] === b.data[0] && a.data[1] === b.data[1]) {
133
+ return a.sign === b.sign || (a.data[0] === 0 && a.data[1] === 0); // either the same or both zero
134
+ }
135
+ return false;
136
+ }
137
+
138
+ /** @internal */
139
+ function isStrictlySmaller64Internal(a: ArrayInt64["data"], b: ArrayInt64["data"]): boolean {
140
+ return a[0] < b[0] || (a[0] === b[0] && a[1] < b[1]);
141
+ }
142
+
143
+ /** @internal */
144
+ export function isStrictlySmaller64(a: ArrayInt64, b: ArrayInt64): boolean {
145
+ if (a.sign === b.sign) {
146
+ return a.sign === 1
147
+ ? isStrictlySmaller64Internal(a.data, b.data) // a.sign = +1, b.sign = +1
148
+ : isStrictlySmaller64Internal(b.data, a.data); // a.sign = -1, b.sign = -1
149
+ }
150
+ // a.sign = +1, b.sign = -1 is always false
151
+ return a.sign === -1 && (!isZero64(a) || !isZero64(b)); // a.sign = -1, b.sign = +1
152
+ }
153
+
154
+ /** @internal */
155
+ export function clone64(a: ArrayInt64): ArrayInt64 {
156
+ return { sign: a.sign, data: [a.data[0], a.data[1]] };
157
+ }
158
+
159
+ /** @internal */
160
+ function substract64DataInternal(a: ArrayInt64["data"], b: ArrayInt64["data"]): ArrayInt64["data"] {
161
+ let reminderLow = 0;
162
+ let low = a[1] - b[1];
163
+ if (low < 0) {
164
+ reminderLow = 1;
165
+ low = low >>> 0;
166
+ }
167
+ return [a[0] - b[0] - reminderLow, low];
168
+ }
169
+
170
+ /**
171
+ * Expects a >= b
172
+ * @internal
173
+ */
174
+ function substract64Internal(a: ArrayInt64, b: ArrayInt64): ArrayInt64 {
175
+ if (a.sign === 1 && b.sign === -1) {
176
+ // Operation is a simple sum of a + abs(b)
177
+ const low = a.data[1] + b.data[1];
178
+ const high = a.data[0] + b.data[0] + (low > 0xffffffff ? 1 : 0);
179
+ return { sign: 1, data: [high >>> 0, low >>> 0] };
180
+ }
181
+
182
+ // a.sign === -1 with b.sign === 1 is impossible given: a - b >= 0, except for a = 0 and b = 0
183
+ // Operation is a substraction
184
+ return {
185
+ sign: 1,
186
+ data: a.sign === 1 ? substract64DataInternal(a.data, b.data) : substract64DataInternal(b.data, a.data),
187
+ };
188
+ }
189
+
190
+ /**
191
+ * Substract two ArrayInt64
192
+ * @returns When result is zero always with sign=1
193
+ * @internal
194
+ */
195
+ export function substract64(arrayIntA: ArrayInt64, arrayIntB: ArrayInt64): ArrayInt64 {
196
+ if (isStrictlySmaller64(arrayIntA, arrayIntB)) {
197
+ const out = substract64Internal(arrayIntB, arrayIntA);
198
+ out.sign = -1;
199
+ return out;
200
+ }
201
+ return substract64Internal(arrayIntA, arrayIntB);
202
+ }
203
+
204
+ /**
205
+ * Negative version of an ArrayInt64
206
+ * @internal
207
+ */
208
+ export function negative64(arrayIntA: ArrayInt64): ArrayInt64 {
209
+ return {
210
+ sign: -arrayIntA.sign as -1 | 1,
211
+ data: [arrayIntA.data[0], arrayIntA.data[1]],
212
+ };
213
+ }
214
+
215
+ /**
216
+ * Add two ArrayInt64
217
+ * @returns When result is zero always with sign=1
218
+ * @internal
219
+ */
220
+ export function add64(arrayIntA: ArrayInt64, arrayIntB: ArrayInt64): ArrayInt64 {
221
+ if (isZero64(arrayIntB)) {
222
+ if (isZero64(arrayIntA)) {
223
+ return clone64(Zero64);
224
+ }
225
+ return clone64(arrayIntA);
226
+ }
227
+ return substract64(arrayIntA, negative64(arrayIntB));
228
+ }
229
+
230
+ /**
231
+ * Halve an ArrayInt64
232
+ * @internal
233
+ */
234
+ export function halve64(a: ArrayInt64): ArrayInt64 {
235
+ return {
236
+ sign: a.sign,
237
+ data: [Math.floor(a.data[0] / 2), (a.data[0] % 2 === 1 ? 0x80000000 : 0) + Math.floor(a.data[1] / 2)],
238
+ };
239
+ }
240
+
241
+ /**
242
+ * Apply log2 to an ArrayInt64 (preserve sign)
243
+ * @internal
244
+ */
245
+ export function logLike64(a: ArrayInt64): ArrayInt64 {
246
+ // Math.floor(Math.log(hi * 2**32 + low) / Math.log(2)) <= Math.floor(Math.log(2**64) / Math.log(2)) = 64
247
+ return {
248
+ sign: a.sign,
249
+ data: [0, Math.floor(Math.log(a.data[0] * 0x100000000 + a.data[1]) / Math.log(2))],
250
+ };
251
+ }
252
+
253
+ /** @internal */
254
+ const INDEX_POSITIVE_INFINITY: ArrayInt64 = { sign: 1, data: [2146435072, 0] }; // doubleToIndex(Number.MAX_VALUE) + 1;
255
+ /** @internal */
256
+ const INDEX_NEGATIVE_INFINITY: ArrayInt64 = { sign: -1, data: [2146435072, 1] }; // doubleToIndex(-Number.MAX_VALUE) - 1
257
+
258
+ /**
259
+ * Decompose a 64-bit floating point number into a significand and exponent
260
+ * such that:
261
+ * - significand over 53 bits including sign (also referred as fraction)
262
+ * - exponent over 11 bits including sign
263
+ * - whenever there are multiple possibilities we take the one having the highest significand (in abs)
264
+ * - Number.MAX_VALUE = 2**1023 * (1 + (2**52-1)/2**52)
265
+ * = 2**1023 * (2 - Number.EPSILON)
266
+ * - Number.MIN_VALUE = 2**(-1022) * 2**(-52)
267
+ * - Number.EPSILON = 2**(-52)
268
+ *
269
+ * @param d - 64-bit floating point number to be decomposed into (significand, exponent)
270
+ *
271
+ * @internal
272
+ */
273
+ export function decomposeDouble(d: number): { exponent: number; significand: number } {
274
+ // 1 => significand 0b1 - exponent 1 (will be preferred)
275
+ // => significand 0b0.1 - exponent 2
276
+ const maxSignificand = 2 - Number.EPSILON;
277
+ for (let exponent = -1022; exponent !== 1024; ++exponent) {
278
+ const powExponent = 2 ** exponent;
279
+ const maxForExponent = maxSignificand * powExponent;
280
+ if (Math.abs(d) <= maxForExponent) {
281
+ return { exponent, significand: d / powExponent };
282
+ }
283
+ }
284
+ return { exponent: Number.NaN, significand: Number.NaN };
285
+ }
286
+
287
+ /** @internal */
288
+ function positiveNumberToInt64(n: number): ArrayInt64["data"] {
289
+ return [~~(n / 0x100000000), n >>> 0];
290
+ }
291
+
292
+ /** @internal */
293
+ function indexInDoubleFromDecomp(exponent: number, significand: number): ArrayInt64["data"] {
294
+ // WARNING: significand >= 0
295
+
296
+ // By construct of significand in decomposeDouble,
297
+ // significand is always max-ed.
298
+
299
+ // The double close to zero are the only one having a significand <1, they also have an exponent of -1022.
300
+ // They are in range: [2**(-1022) * 2**(-52), 2**(-1022) * (2 - 2 ** 52)]
301
+ // In other words there are 2**53 elements in that range if we include zero.
302
+ // All other ranges (other exponents) have a length of 2**52 elements.
303
+ if (exponent === -1022) {
304
+ // We want the significand to be an integer value (like an index)
305
+ const rescaledSignificand = significand * 2 ** 52; // significand * 2**52
306
+ return positiveNumberToInt64(rescaledSignificand);
307
+ }
308
+ // Offset due to exp = -1022 + Offset of previous exp (excl. -1022) + Offset in current exp
309
+ // 2**53 + (exponent - (-1022) -1) * 2**52 + (significand - 1) * 2**52
310
+ // (exponent + 1023) * 2**52 + (significand - 1) * 2**52
311
+ const rescaledSignificand = (significand - 1) * 2 ** 52; // (significand-1) * 2**52
312
+ const exponentOnlyHigh = (exponent + 1023) * 2 ** 20; // (exponent + 1023) * 2**52 => [high: (exponent + 1023) * 2**20, low: 0]
313
+ const index = positiveNumberToInt64(rescaledSignificand);
314
+ index[0] += exponentOnlyHigh;
315
+ return index;
316
+ }
317
+
318
+ /**
319
+ * Compute the index of d relative to other available 64-bit floating point numbers
320
+ * Rq: Produces negative indexes for negative doubles
321
+ *
322
+ * @param d - 64-bit floating point number, anything except NaN
323
+ *
324
+ * @internal
325
+ */
326
+ export function doubleToIndex(d: number): ArrayInt64 {
327
+ if (d === Number.POSITIVE_INFINITY) {
328
+ return clone64(INDEX_POSITIVE_INFINITY);
329
+ }
330
+ if (d === Number.NEGATIVE_INFINITY) {
331
+ return clone64(INDEX_NEGATIVE_INFINITY);
332
+ }
333
+ const decomp = decomposeDouble(d);
334
+ const exponent = decomp.exponent;
335
+ const significand = decomp.significand;
336
+ if (d > 0 || (d === 0 && 1 / d === Number.POSITIVE_INFINITY)) {
337
+ return { sign: 1, data: indexInDoubleFromDecomp(exponent, significand) };
338
+ } else {
339
+ const indexOpposite = indexInDoubleFromDecomp(exponent, -significand);
340
+ if (indexOpposite[1] === 0xffffffff) {
341
+ indexOpposite[0] += 1;
342
+ indexOpposite[1] = 0;
343
+ } else {
344
+ indexOpposite[1] += 1;
345
+ }
346
+ return { sign: -1, data: indexOpposite }; // -indexInDoubleFromDecomp(exponent, -significand) - 1
347
+ }
348
+ }
349
+
350
+ /**
351
+ * Compute the 64-bit floating point number corresponding to the provided indexes
352
+ *
353
+ * @param n - index of the double
354
+ *
355
+ * @internal
356
+ */
357
+ export function indexToDouble(index: ArrayInt64): number {
358
+ if (index.sign === -1) {
359
+ const indexOpposite: ArrayInt64 = { sign: 1, data: [index.data[0], index.data[1]] };
360
+ if (indexOpposite.data[1] === 0) {
361
+ indexOpposite.data[0] -= 1;
362
+ indexOpposite.data[1] = 0xffffffff;
363
+ } else {
364
+ indexOpposite.data[1] -= 1;
365
+ }
366
+ return -indexToDouble(indexOpposite); // -indexToDouble(-index - 1);
367
+ }
368
+ if (isEqual64(index, INDEX_POSITIVE_INFINITY)) {
369
+ return Number.POSITIVE_INFINITY;
370
+ }
371
+ if (index.data[0] < 0x200000) {
372
+ // if: index < 2 ** 53 <--> index[0] < 2 ** (53-32) = 0x20_0000
373
+ // The first 2**53 elements correspond to values having
374
+ // exponent = -1022 and significand = index * Number.EPSILON
375
+ // double value = index * 2 ** -1022 * Number.EPSILON
376
+ // = index * 2 ** -1022 * 2 ** -52
377
+ // = index * 2 ** -1074
378
+ return (index.data[0] * 0x100000000 + index.data[1]) * 2 ** -1074;
379
+ }
380
+ const postIndexHigh = index.data[0] - 0x200000; // postIndex = index - 2 ** 53
381
+ // exponent = -1021 + Math.floor(postIndex / 2**52)
382
+ // = -1021 + Math.floor(postIndexHigh / 2**(52-32))
383
+ // = -1021 + Math.floor(postIndexHigh / 2**20)
384
+ // = -1021 + (postIndexHigh >> 20)
385
+ const exponent = -1021 + (postIndexHigh >> 20);
386
+ // significand = 1 + (postIndex % 2**52) / 2**52
387
+ // = 1 + ((postIndexHigh * 2**32 + postIndexLow) % 2**52) / 2**52
388
+ // = 1 + ((postIndexHigh % 2**20) * 2**32 + postIndexLow) / 2**52
389
+ // = 1 + ((postIndexHigh & 0xfffff) * 2**32 + postIndexLow) / 2**52
390
+ // = 1 + ((postIndexHigh & 0xfffff) * 2**32 + postIndexLow) * Number.EPSILON
391
+ const significand = 1 + ((postIndexHigh & 0xfffff) * 2 ** 32 + index.data[1]) * Number.EPSILON;
392
+ return significand * 2 ** exponent;
393
+ }
394
+
395
+ /**
396
+ * Same as {@link doubleToIndex} except it throws in case of invalid double
397
+ *
398
+ * @internal
399
+ */
400
+ export function safeDoubleToIndex(d: number, label: string): IO<unknown, never, ArrayInt64> {
401
+ if (Number.isNaN(d)) {
402
+ // Number.NaN does not have any associated index in the current implementation
403
+ return IO.haltNow(new Error("fc.doubleNext constraints." + label + " must be a 32-bit float"));
404
+ }
405
+ return IO.succeedNow(doubleToIndex(d));
406
+ }
407
+
408
+ const EPSILON = Math.pow(2, -52);
409
+ const MAX_VALUE = (2 - EPSILON) * Math.pow(2, 1023);
410
+ const MIN_VALUE = Math.pow(2, -1022);
411
+
412
+ export function nextUp(x: number) {
413
+ if (x !== x) {
414
+ return x;
415
+ }
416
+ if (x === -1 / 0) {
417
+ return -MAX_VALUE;
418
+ }
419
+ if (x === +1 / 0) {
420
+ return +1 / 0;
421
+ }
422
+ if (x === +MAX_VALUE) {
423
+ return +1 / 0;
424
+ }
425
+ let y = x * (x < 0 ? 1 - EPSILON / 2 : 1 + EPSILON);
426
+ if (y === x) {
427
+ y = MIN_VALUE * EPSILON > 0 ? x + MIN_VALUE * EPSILON : x + MIN_VALUE;
428
+ }
429
+ if (y === +1 / 0) {
430
+ y = +MAX_VALUE;
431
+ }
432
+ const b = x + (y - x) / 2;
433
+ if (x < b && b < y) {
434
+ y = b;
435
+ }
436
+ const c = (y + x) / 2;
437
+ if (x < c && c < y) {
438
+ y = c;
439
+ }
440
+ return y === 0 ? -0 : y;
441
+ }
442
+
443
+ export function nextAfter(x: number, y: number) {
444
+ return y < x ? -nextUp(-x) : y > x ? nextUp(x) : x !== x ? x : y;
445
+ }
446
+
447
+ export function computeBiasedRanges(
448
+ min: ArrayInt64,
449
+ max: ArrayInt64,
450
+ biasedRanges?: { min: ArrayInt64; max: ArrayInt64 }[],
451
+ ): { min: ArrayInt64; max: ArrayInt64 }[] {
452
+ if (biasedRanges != null) {
453
+ return biasedRanges;
454
+ }
455
+ if (isEqual64(min, max)) {
456
+ return [{ min, max }];
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, max: logMax },
465
+ { min: substract64(max, logMax), max },
466
+ { min, max: substract64(min, logMin) },
467
+ ];
468
+ } else {
469
+ const logGap = logLike64(substract64(max, min));
470
+ const closeToMin = { min, max: add64(min, logGap) };
471
+ const closeToMax = { min: substract64(max, logGap), max };
472
+ return minStrictlySmallerThanZero ? [closeToMax, closeToMin] : [closeToMin, closeToMax];
473
+ }
474
+ }
475
+
476
+ export function computeArrayInt64GenerateRange(
477
+ min: ArrayInt64,
478
+ max: ArrayInt64,
479
+ biasFactor: number | undefined,
480
+ biasedRanges: { min: ArrayInt64; max: ArrayInt64 }[] | undefined,
481
+ ): URIO<unknown, { min: ArrayInt64; max: ArrayInt64 }> {
482
+ return IO.gen(function* (_) {
483
+ if (biasFactor === undefined || (yield* _(Random.nextIntBetween(1, biasFactor))) !== 1) {
484
+ return { min, max };
485
+ }
486
+ const ranges = computeBiasedRanges(min, max, biasedRanges);
487
+ if (ranges.length === 1) {
488
+ return ranges[0]!;
489
+ }
490
+ const id = yield* _(Random.nextIntBetween(-2 * (ranges.length - 1), ranges.length - 2));
491
+ return id < 0 ? ranges[0]! : ranges[id + 1]!;
492
+ });
493
+ }
494
+
495
+ export function clamp(n: number, min: number, max: number): number {
496
+ return n < min ? min : n > max ? max : n;
497
+ }
package/api.d.ts ADDED
@@ -0,0 +1,21 @@
1
+ import { IO } from "@fncts/io/IO";
2
+ import { Lazy } from "@fncts/base/data/function/definition";
3
+ import type { Assertion, AssertResult } from "./control/Assertion.js";
4
+ import type { AssertionIO } from "./control/AssertionIO.js";
5
+ import type { TestResult } from "./data/FailureDetails.js";
6
+ import type { _E, _R } from "@fncts/base/types";
7
+ import { Spec } from "./control/Spec.js";
8
+ export declare function traverseResult<A>(value: A, assertResult: AssertResult<A>, assertion: AssertionIO<A>): TestResult;
9
+ /**
10
+ * @tsplus fluent global assert 1
11
+ * @tsplus location "@fncts/test/api"
12
+ */
13
+ export declare function assert_<A>(value: A, assertion: Assertion<A>): TestResult;
14
+ /**
15
+ * @tsplus fluent global assert 0
16
+ * @tsplus location "@fncts/test/api"
17
+ */
18
+ export declare function assertIO_<R, E, A>(io: IO<R, E, A>, assertion: AssertionIO<A>): IO<R, E, TestResult>;
19
+ export declare function suite<Specs extends ReadonlyArray<Spec<any, any>>>(label: string, ...specs: Specs): Spec<_R<Specs[number]>, _E<Specs[number]>>;
20
+ export declare function testIO<R, E>(label: string, assertion: Lazy<IO<R, E, TestResult>>): Spec<R, E>;
21
+ export declare function test(label: string, assertion: Lazy<TestResult>): Spec<unknown, never>;