@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
package/_src/api.ts ADDED
@@ -0,0 +1,76 @@
1
+ import type { Assertion, AssertResult } from "./control/Assertion.js";
2
+ import type { AssertionIO } from "./control/AssertionIO.js";
3
+ import type { TestResult } from "./data/FailureDetails.js";
4
+ import type { _E, _R } from "@fncts/base/types";
5
+
6
+ import { Spec } from "./control/Spec.js";
7
+ import { Test } from "./control/Test.js";
8
+ import { FailureDetailsResult } from "./data/AssertionResult.js";
9
+ import { AssertionValue } from "./data/AssertionValue.js";
10
+ import { FailureDetails } from "./data/FailureDetails.js";
11
+ import { FreeBooleanAlgebra } from "./data/FreeBooleanAlgebra.js";
12
+ import { TestAnnotationMap } from "./data/TestAnnotationMap.js";
13
+
14
+ function traverseResultLoop<A>(whole: AssertionValue<A>, failureDetails: FailureDetails): TestResult {
15
+ if (whole.isSameAssertionAs(failureDetails.assertion.head)) {
16
+ return FreeBooleanAlgebra.success(new FailureDetailsResult(failureDetails));
17
+ } else {
18
+ const fragment = whole.result;
19
+ const r0 = fragment.value;
20
+ const result = r0.isSuccess ? r0 : r0.invert;
21
+ return result.flatMap((fragment) =>
22
+ traverseResultLoop(fragment, new FailureDetails(Cons(whole, failureDetails.assertion), failureDetails.gen)),
23
+ );
24
+ }
25
+ }
26
+
27
+ export function traverseResult<A>(value: A, assertResult: AssertResult<A>, assertion: AssertionIO<A>): TestResult {
28
+ return assertResult.flatMap((fragment) =>
29
+ traverseResultLoop(
30
+ fragment,
31
+ new FailureDetails(
32
+ Cons(
33
+ new AssertionValue(
34
+ LazyValue(() => assertion),
35
+ value,
36
+ LazyValue(() => assertResult),
37
+ ),
38
+ ),
39
+ Nothing(),
40
+ ),
41
+ ),
42
+ );
43
+ }
44
+
45
+ /**
46
+ * @tsplus fluent global assert 1
47
+ */
48
+ export function assert_<A>(value: A, assertion: Assertion<A>): TestResult {
49
+ return traverseResult(value, assertion.run(value), assertion);
50
+ }
51
+
52
+ /**
53
+ * @tsplus fluent global assert 0
54
+ */
55
+ export function assertIO_<R, E, A>(io: IO<R, E, A>, assertion: AssertionIO<A>): IO<R, E, TestResult> {
56
+ return IO.gen(function* (_) {
57
+ const value = yield* _(io);
58
+ const assertResult = yield* _(assertion.runIO(value));
59
+ return traverseResult(value, assertResult, assertion);
60
+ });
61
+ }
62
+
63
+ export function suite<Specs extends ReadonlyArray<Spec<any, any>>>(
64
+ label: string,
65
+ ...specs: Specs
66
+ ): Spec<_R<Specs[number]>, _E<Specs[number]>> {
67
+ return Spec.multiple(Conc.from(specs)).labeled(label);
68
+ }
69
+
70
+ export function testIO<R, E>(label: string, assertion: Lazy<IO<R, E, TestResult>>): Spec<R, E> {
71
+ return Spec.test(Test.fromAssertion(assertion), TestAnnotationMap.empty).labeled(label);
72
+ }
73
+
74
+ export function test(label: string, assertion: Lazy<TestResult>): Spec<unknown, never> {
75
+ return testIO(label, IO.succeed(assertion));
76
+ }
@@ -0,0 +1,23 @@
1
+ import type { Spec } from "@fncts/test/control/Spec";
2
+ import type { TestAspect } from "@fncts/test/control/TestAspect";
3
+ import type { TestLogger } from "@fncts/test/control/TestLogger";
4
+ import type { TestRunner } from "@fncts/test/control/TestRunner";
5
+ import type { ExecutedSpec } from "@fncts/test/data/ExecutedSpec";
6
+
7
+ export abstract class AbstractRunnableSpec<R, E> {
8
+ abstract aspects: ReadonlyArray<TestAspect<R, any>>;
9
+ abstract runner: TestRunner<R, E>;
10
+ abstract spec: Spec<R, E>;
11
+
12
+ get _run(): URIO<Has<TestLogger>, ExecutedSpec<E>> {
13
+ return this.runSpec(this.spec);
14
+ }
15
+
16
+ runSpec(spec: Spec<R, E>): URIO<Has<TestLogger>, ExecutedSpec<E>> {
17
+ return this.runner.run(this.aspects.foldLeft(spec, (b, a) => a(b)));
18
+ }
19
+
20
+ get platform() {
21
+ return this.runner.runtimeConfig;
22
+ }
23
+ }
@@ -0,0 +1,33 @@
1
+ import type { TestAnnotation } from "../../data/TestAnnotation.js";
2
+ import type { Annotated } from "./definition.js";
3
+
4
+ import { Annotations } from "./definition.js";
5
+
6
+ /**
7
+ * @tsplus static fncts.test.AnnotationsOps annotate
8
+ */
9
+ export function annotate<V>(key: TestAnnotation<V>, value: V): URIO<Has<Annotations>, void> {
10
+ return IO.serviceWithIO((annotations) => annotations.annotate(key, value), Annotations.Tag);
11
+ }
12
+
13
+ /**
14
+ * @tsplus static fncts.test.AnnotationsOps get
15
+ */
16
+ export function get<V>(key: TestAnnotation<V>): URIO<Has<Annotations>, V> {
17
+ return IO.serviceWithIO((annotations) => annotations.get(key), Annotations.Tag);
18
+ }
19
+
20
+ /**
21
+ * @tsplus static fncts.test.AnnotationsOps withAnnotations
22
+ */
23
+ export function withAnnotation<R, E, A>(io: IO<R, E, A>): IO<R & Has<Annotations>, Annotated<E>, Annotated<A>> {
24
+ return IO.serviceWithIO((annotations) => annotations.withAnnotation(io), Annotations.Tag);
25
+ }
26
+
27
+ /**
28
+ * @tsplus static fncts.test.AnnotationsOps supervisedFibers
29
+ */
30
+ export const supervisedFibers: URIO<Has<Annotations>, HashSet<Fiber.Runtime<any, any>>> = IO.serviceWithIO(
31
+ (annotations) => annotations.supervisedFibers,
32
+ Annotations.Tag,
33
+ );
@@ -0,0 +1,20 @@
1
+ import type { TestAnnotation } from "../../data/TestAnnotation.js";
2
+ import type { TestAnnotationMap } from "../../data/TestAnnotationMap.js";
3
+
4
+ export type Annotated<A> = readonly [A, TestAnnotationMap];
5
+
6
+ /**
7
+ * @tsplus type fncts.test.Annotations
8
+ * @tsplus companion fncts.test.AnnotationsOps
9
+ */
10
+ export abstract class Annotations {
11
+ abstract annotate<V>(key: TestAnnotation<V>, value: V): UIO<void>;
12
+ abstract get<V>(key: TestAnnotation<V>): UIO<V>;
13
+ abstract withAnnotation<R, E, A>(io: IO<R, E, A>): IO<R, Annotated<E>, Annotated<A>>;
14
+ abstract readonly supervisedFibers: UIO<HashSet<Fiber.Runtime<any, any>>>;
15
+ }
16
+
17
+ /**
18
+ * @tsplus static fncts.test.AnnotationsOps Tag
19
+ */
20
+ export const AnnotationsTag = Tag<Annotations>();
@@ -0,0 +1,50 @@
1
+ import { TestAnnotation } from "../../data/TestAnnotation.js";
2
+ import { TestAnnotationMap } from "../../data/TestAnnotationMap.js";
3
+ import { Annotations } from "./definition.js";
4
+
5
+ export class LiveAnnotations extends Annotations {
6
+ constructor(private fiberRef: FiberRef<TestAnnotationMap>) {
7
+ super();
8
+ }
9
+
10
+ annotate<V>(key: TestAnnotation<V>, value: V): UIO<void> {
11
+ return this.fiberRef.update((map) => map.annotate(key, value));
12
+ }
13
+
14
+ get<V>(key: TestAnnotation<V>) {
15
+ return this.fiberRef.get.map((map) => map.get(key));
16
+ }
17
+
18
+ withAnnotation<R, E, A>(io: IO<R, E, A>) {
19
+ return this.fiberRef.locally(TestAnnotationMap.empty)(
20
+ io.matchIO(
21
+ (e) => this.fiberRef.get.map((m) => [e, m] as const).swap,
22
+ (a) => this.fiberRef.get.map((m) => [a, m] as const),
23
+ ),
24
+ );
25
+ }
26
+
27
+ supervisedFibers = IO.descriptorWith((descriptor) =>
28
+ this.fiberRef.get
29
+ .map((m) => m.get(TestAnnotation.Fibers))
30
+ .flatMap((r) =>
31
+ r.match(
32
+ () => IO.succeed(HashSet.makeDefault<Fiber.Runtime<any, any>>()),
33
+ (refs) =>
34
+ IO.foreach(refs, (ref) => ref.get)
35
+ .map((fibers) =>
36
+ fibers.foldLeft(HashSet.makeDefault<Fiber.Runtime<any, any>>(), (s1, s2) => s1.union(s2)),
37
+ )
38
+ .map((s) => s.filter((f) => Equatable.strictEquals(f.id, descriptor.id))),
39
+ ),
40
+ ),
41
+ );
42
+ }
43
+
44
+ /**
45
+ * @tsplus static fncts.test.AnnotationsOps Live
46
+ */
47
+ export const live = Layer.scoped(
48
+ FiberRef.make(TestAnnotationMap.empty).map((fiberRef) => new LiveAnnotations(fiberRef)),
49
+ Annotations.Tag,
50
+ );
@@ -0,0 +1,5 @@
1
+ // codegen:start { preset: barrel, include: ./Annotations/*.ts }
2
+ export * from "./Annotations/api.js";
3
+ export * from "./Annotations/definition.js";
4
+ export * from "./Annotations/live.js";
5
+ // codegen:end
@@ -0,0 +1,236 @@
1
+ import type { Eq } from "@fncts/base/typeclass";
2
+
3
+ import { identity } from "@fncts/base/data/function";
4
+
5
+ import { AssertionData } from "../../data/AssertionData.js";
6
+ import { AssertionValue } from "../../data/AssertionValue.js";
7
+ import { FreeBooleanAlgebra } from "../../data/FreeBooleanAlgebra.js";
8
+ import { Render } from "../../data/Render.js";
9
+ import { RenderParam } from "../../data/RenderParam.js";
10
+ import { Assertion } from "./definition.js";
11
+
12
+ /**
13
+ * @tsplus fluent fncts.test.Assertion and
14
+ * @tsplus operator fncts.test.Assertion &&
15
+ */
16
+ export function and_<A>(self: Assertion<A>, that: Assertion<A>): Assertion<A> {
17
+ return new Assertion(
18
+ Render.infix(RenderParam(self), "&&", RenderParam(that)),
19
+ (actual) => self.run(actual) && that.run(actual),
20
+ );
21
+ }
22
+
23
+ /**
24
+ * @tsplus static fncts.test.AssertionOps anything
25
+ */
26
+ export const anything: Assertion<any> = Assertion.make("anything", [], () => true);
27
+
28
+ /**
29
+ * @tsplus static fncts.test.AssertionOps approximatelyEquals
30
+ */
31
+ export function approximatelyEquals(reference: number, tolerance: number): Assertion<number> {
32
+ return Assertion.make("approximatelyEquals", [RenderParam(reference), RenderParam(tolerance)], (actual) => {
33
+ const max = reference + tolerance;
34
+ const min = reference - tolerance;
35
+ return actual >= min && actual <= max;
36
+ });
37
+ }
38
+
39
+ /**
40
+ * @tsplus static fncts.test.AssertionOps make
41
+ */
42
+ export function assertion<A>(
43
+ name: string,
44
+ params: ReadonlyArray<RenderParam>,
45
+ run: (actual: A) => boolean,
46
+ ): Assertion<A> {
47
+ const assertion: LazyValue<Assertion<A>> = LazyValue(() => {
48
+ return Assertion.direct(name, params, (actual) => {
49
+ const result: LazyValue<FreeBooleanAlgebra<AssertionValue<A>>> = LazyValue(() => {
50
+ if (run(actual)) {
51
+ return FreeBooleanAlgebra.success(new AssertionValue(assertion, actual, result));
52
+ } else {
53
+ return FreeBooleanAlgebra.failure(new AssertionValue(assertion, actual, result));
54
+ }
55
+ });
56
+ return result.value;
57
+ });
58
+ });
59
+ return assertion.value;
60
+ }
61
+
62
+ /**
63
+ * @tsplus static fncts.test.AssertionOps direct
64
+ */
65
+ export function assertionDirect<A>(
66
+ name: string,
67
+ params: ReadonlyArray<RenderParam>,
68
+ run: (actual: A) => FreeBooleanAlgebra<AssertionValue<A>>,
69
+ ): Assertion<A> {
70
+ return new Assertion(Render.fn(name, Conc.single(Conc.from(params))), run);
71
+ }
72
+
73
+ /**
74
+ * @tsplus static fncts.test.AssertionOps rec
75
+ */
76
+ export function assertionRec<A, B>(
77
+ name: string,
78
+ params: ReadonlyArray<RenderParam>,
79
+ assertion: Assertion<B>,
80
+ get: (a: A) => Maybe<B>,
81
+ orElse: (data: AssertionData<A>) => FreeBooleanAlgebra<AssertionValue<A>> = (_) => _.asFailure,
82
+ ): Assertion<A> {
83
+ const resultAssertion: LazyValue<Assertion<A>> = LazyValue(() =>
84
+ Assertion.direct(name, params, (a) =>
85
+ get(a).match(
86
+ () => orElse(new AssertionData(a, resultAssertion.value)),
87
+ (b) => {
88
+ const innerResult = assertion.run(b);
89
+ const result: LazyValue<FreeBooleanAlgebra<AssertionValue<any>>> = LazyValue(() => {
90
+ if (innerResult.isSuccess) {
91
+ return FreeBooleanAlgebra.success(new AssertionValue(resultAssertion, a, result));
92
+ } else {
93
+ return FreeBooleanAlgebra.failure(new AssertionValue(LazyValue(assertion), b, LazyValue(innerResult)));
94
+ }
95
+ });
96
+ return result.value;
97
+ },
98
+ ),
99
+ ),
100
+ );
101
+ return resultAssertion.value;
102
+ }
103
+
104
+ export function contains<A>(element: A): Assertion<Iterable<A>> {
105
+ return Assertion.make("contains", [RenderParam(element)], (ia) =>
106
+ ia.find((a) => Equatable.deepEquals(a, element)).isJust(),
107
+ );
108
+ }
109
+
110
+ export function containsCause<E>(cause: Cause<E>): Assertion<Cause<E>> {
111
+ return Assertion.make("containsCause", [RenderParam(cause)], (c) => c.contains(cause));
112
+ }
113
+
114
+ export function containsString(element: string): Assertion<string> {
115
+ return Assertion.make("containsString", [RenderParam(element)], (str) => str.includes(element));
116
+ }
117
+
118
+ export function exists<A>(assertion: Assertion<A>): Assertion<Iterable<A>> {
119
+ return Assertion.rec("exists", [RenderParam(assertion)], assertion, (ia) => ia.find((a) => assertion.test(a)));
120
+ }
121
+
122
+ export function fails<E>(assertion: Assertion<E>): Assertion<Exit<E, any>> {
123
+ return Assertion.rec("fails", [RenderParam(assertion)], assertion, (exit) =>
124
+ exit.match(
125
+ (cause) => cause.failures.head,
126
+ () => Nothing(),
127
+ ),
128
+ );
129
+ }
130
+
131
+ export function forall<A>(assertion: Assertion<A>): Assertion<Iterable<A>> {
132
+ return Assertion.rec(
133
+ "forall",
134
+ [RenderParam(assertion)],
135
+ assertion,
136
+ (ia) => ia.find((a) => !assertion.test(a)),
137
+ (data) => data.asSuccess,
138
+ );
139
+ }
140
+
141
+ export function halts(assertion: Assertion<any>): Assertion<Exit<any, any>> {
142
+ return Assertion.rec("halts", [RenderParam(assertion)], assertion, (exit) =>
143
+ exit.match(
144
+ (c) => c.haltMaybe,
145
+ () => Nothing(),
146
+ ),
147
+ );
148
+ }
149
+
150
+ export function strictEqualTo<A>(expected: A): Assertion<A> {
151
+ return Assertion.make("strictEqualTo", [RenderParam(expected)], (actual) => Equatable.strictEquals(actual, expected));
152
+ }
153
+
154
+ export function deepEqualTo<A>(expected: A): Assertion<A> {
155
+ return Assertion.make("deepEqualTo", [RenderParam(expected)], (actual) => Equatable.deepEquals(actual, expected));
156
+ }
157
+
158
+ export function equals<A>(expected: A, E: Eq<A>): Assertion<A> {
159
+ return Assertion.make("equals", [RenderParam(expected)], (actual) => E.equals_(actual, expected));
160
+ }
161
+
162
+ export const isFalse: Assertion<boolean> = Assertion.make("isFale", [], (b) => !b);
163
+
164
+ export const isInterrupted: Assertion<Exit<any, any>> = Assertion.make("isInterrupted", [], (exit) =>
165
+ exit.match(
166
+ (cause) => cause.interrupted,
167
+ () => false,
168
+ ),
169
+ );
170
+
171
+ export function isLeft<A>(assertion: Assertion<A>): Assertion<Either<A, any>> {
172
+ return Assertion.rec("isLeft", [RenderParam(assertion)], assertion, (actual) =>
173
+ actual.match(
174
+ (a) => Just(a),
175
+ () => Nothing(),
176
+ ),
177
+ );
178
+ }
179
+
180
+ export function isJust<A>(assertion: Assertion<A>): Assertion<Maybe<A>> {
181
+ return Assertion.rec("isJust", [RenderParam(assertion)], assertion, identity);
182
+ }
183
+
184
+ export const isNothing: Assertion<Maybe<any>> = Assertion.make("isNothing", [], (actual) => actual.isNothing());
185
+
186
+ export function isRight<A>(assertion: Assertion<A>): Assertion<Either<any, A>> {
187
+ return Assertion.rec("isRight", [RenderParam(assertion)], assertion, (actual) =>
188
+ actual.match(
189
+ () => Nothing(),
190
+ (a) => Just(a),
191
+ ),
192
+ );
193
+ }
194
+
195
+ export const isTrue: Assertion<boolean> = Assertion.make("isTrue", [], identity);
196
+
197
+ /**
198
+ * @tsplus fluent fncts.test.Assertion label
199
+ */
200
+ export function label_<A>(self: Assertion<A>, label: string): Assertion<A> {
201
+ return new Assertion(Render.infix(RenderParam(self), ":", RenderParam(label)), self.run);
202
+ }
203
+
204
+ /**
205
+ * @tsplus getter fncts.test.Assertion invert
206
+ */
207
+ export function not<A>(assertion: Assertion<A>): Assertion<A> {
208
+ return Assertion.direct("not", [RenderParam(assertion)], (actual) => assertion.run(actual).invert);
209
+ }
210
+
211
+ /**
212
+ * @tsplus fluent fncts.test.Assertion or
213
+ * @tsplus operator fncts.test.Assertion ||
214
+ */
215
+ export function or_<A>(self: Assertion<A>, that: Assertion<A>): Assertion<A> {
216
+ return new Assertion(
217
+ Render.infix(RenderParam(self), "||", RenderParam(that)),
218
+ (actual) => self.run(actual) || that.run(actual),
219
+ );
220
+ }
221
+
222
+ export function succeeds<A>(assertion: Assertion<A>): Assertion<Exit<any, A>> {
223
+ return Assertion.rec("succeeds", [RenderParam(assertion)], assertion, (exit) =>
224
+ exit.match(
225
+ () => Nothing(),
226
+ (a) => Just(a),
227
+ ),
228
+ );
229
+ }
230
+
231
+ /**
232
+ * @tsplus fluent fncts.test.Assertion test
233
+ */
234
+ export function test_<A>(self: Assertion<A>, actual: A): boolean {
235
+ return self.run(actual).isSuccess;
236
+ }
@@ -0,0 +1,20 @@
1
+ import type { AssertionValue } from "../../data/AssertionValue.js";
2
+ import type { FreeBooleanAlgebra } from "../../data/FreeBooleanAlgebra.js";
3
+ import type { Render } from "../../data/Render.js";
4
+
5
+ import { AssertionIO } from "../AssertionIO.js";
6
+
7
+ /**
8
+ * @tsplus type fncts.test.FreeBooleanAlgebra
9
+ */
10
+ export type AssertResult<A> = FreeBooleanAlgebra<AssertionValue<A>>;
11
+
12
+ /**
13
+ * @tsplus type fncts.test.Assertion
14
+ * @tsplus companion fncts.test.AssertionOps
15
+ */
16
+ export class Assertion<A> extends AssertionIO<A> {
17
+ constructor(readonly render: Render, readonly run: (actual: A) => AssertResult<A>) {
18
+ super(render, (actual) => IO.succeedNow(run(actual)));
19
+ }
20
+ }
@@ -0,0 +1,4 @@
1
+ // codegen:start { preset: barrel, include: ./Assertion/*.ts }
2
+ export * from "./Assertion/api.js";
3
+ export * from "./Assertion/definition.js";
4
+ // codegen:end
@@ -0,0 +1,32 @@
1
+ import { Render } from "../../data/Render.js";
2
+ import { RenderParam } from "../../data/RenderParam.js";
3
+ import { AssertionIO } from "./definition.js";
4
+
5
+ /**
6
+ * @tsplus fluent fncts.test.AssertionIO and
7
+ * @tsplus operator fncts.test.AssertionIO &&
8
+ */
9
+ export function and_<A>(self: AssertionIO<A>, that: AssertionIO<A>): AssertionIO<A> {
10
+ return new AssertionIO(
11
+ Render.infix(RenderParam(self), "&&", RenderParam(that)),
12
+ (actual) => self.runIO(actual) && that.runIO(actual),
13
+ );
14
+ }
15
+
16
+ /**
17
+ * @tsplus fluent fncts.test.AssertionIO or
18
+ * @tsplus operator fncts.test.AssertionIO ||
19
+ */
20
+ export function or_<A>(self: AssertionIO<A>, that: AssertionIO<A>): AssertionIO<A> {
21
+ return new AssertionIO(
22
+ Render.infix(RenderParam(self), "||", RenderParam(that)),
23
+ (actual) => self.runIO(actual) || that.runIO(actual),
24
+ );
25
+ }
26
+
27
+ /**
28
+ * @tsplus fluent fncts.test.AssertionIO label
29
+ */
30
+ export function label_<A>(self: AssertionIO<A>, label: string): AssertionIO<A> {
31
+ return new AssertionIO(Render.infix(RenderParam(self), ":", RenderParam(label)), self.runIO);
32
+ }
@@ -0,0 +1,26 @@
1
+ import type { AssertionValue } from "../../data/AssertionValue.js";
2
+ import type { Render } from "../../data/Render.js";
3
+ import type { FreeBooleanAlgebraIO } from "../FreeBooleanAlgebraIO.js";
4
+
5
+ import { hasTypeId } from "@fncts/base/util/predicates";
6
+
7
+ export type AssertResultIO<A> = FreeBooleanAlgebraIO<unknown, never, AssertionValue<A>>;
8
+
9
+ export const AssertionIOTypeId = Symbol.for("fncts.test.AssertionIO");
10
+ export type AssertionIOTypeId = typeof AssertionIOTypeId;
11
+
12
+ /**
13
+ * @tsplus type fncts.test.AssertionIO
14
+ * @tsplus companion fncts.test.AssertionIOOps
15
+ */
16
+ export class AssertionIO<A> {
17
+ readonly _typeId: AssertionIOTypeId = AssertionIOTypeId;
18
+ constructor(readonly render: Render, readonly runIO: (actual: A) => AssertResultIO<A>) {}
19
+ get rendered() {
20
+ return this.render.rendered;
21
+ }
22
+ }
23
+
24
+ export function isAssertionIO(u: unknown): u is AssertionIO<unknown> {
25
+ return hasTypeId(u, AssertionIOTypeId);
26
+ }
@@ -0,0 +1,4 @@
1
+ // codegen:start { preset: barrel, include: ./AssertionIO/*.ts }
2
+ export * from "./AssertionIO/api.js";
3
+ export * from "./AssertionIO/definition.js";
4
+ // codegen:end
@@ -0,0 +1,12 @@
1
+ import { RunnableSpec } from "@fncts/test/control/RunnableSpec";
2
+ import { timeoutWarning } from "@fncts/test/control/TestAspect";
3
+ import { TestEnvironment } from "@fncts/test/control/TestEnvironment";
4
+ import { defaultTestExecutor } from "@fncts/test/control/TestExecutor";
5
+ import { TestRunner } from "@fncts/test/control/TestRunner";
6
+
7
+ const defaultTestRunner = new TestRunner(defaultTestExecutor(TestEnvironment));
8
+
9
+ export abstract class DefaultRunnableSpec extends RunnableSpec<TestEnvironment, any> {
10
+ aspects = [timeoutWarning(60000)];
11
+ runner = defaultTestRunner;
12
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @tsplus type fncts.test.DefaultTestReporter
3
+ */
4
+ export interface DefaultTestReporter {}
5
+
6
+ export const DefaultTestReporter: DefaultTestReporter = {};