@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,384 @@
1
+ import type { Annotated } from "../Annotations.js";
2
+ import type { SpecCase } from "./definition.js";
3
+ import type { ExecutionStrategy } from "@fncts/base/data/ExecutionStrategy";
4
+ import type { Spreadable } from "@fncts/base/types.js";
5
+ import type { TestArgs } from "@fncts/test/data/TestArgs.js";
6
+
7
+ import { identity, tuple } from "@fncts/base/data/function";
8
+ import { matchTag, matchTag_ } from "@fncts/base/util/pattern";
9
+ import { TestSuccess } from "@fncts/test/data/TestSuccess";
10
+
11
+ import { TestAnnotation } from "../../data/TestAnnotation.js";
12
+ import { TestAnnotationMap } from "../../data/TestAnnotationMap.js";
13
+ import { Annotations } from "../Annotations.js";
14
+ import { Spec } from "./definition.js";
15
+ import { ExecCase, LabeledCase, MultipleCase, PSpec, ScopedCase, TestCase } from "./definition.js";
16
+
17
+ /**
18
+ * @tsplus getter fncts.test.PSpec annotated
19
+ */
20
+ export function annotated<R, E, T>(spec: PSpec<R, E, T>): PSpec<R & Has<Annotations>, Annotated<E>, Annotated<T>> {
21
+ return spec.transform(
22
+ matchTag(
23
+ {
24
+ Scoped: ({ scoped }) => new ScopedCase(scoped.mapError((e) => tuple(e, TestAnnotationMap.empty))),
25
+ Test: ({ test, annotations }) => new TestCase(Annotations.withAnnotations(test), annotations),
26
+ },
27
+ identity,
28
+ ),
29
+ );
30
+ }
31
+
32
+ /**
33
+ * @tsplus fluent fncts.test.PSpec combine
34
+ */
35
+ export function combine_<R, E, T, R1, E1, T1>(
36
+ self: PSpec<R, E, T>,
37
+ that: PSpec<R1, E1, T1>,
38
+ ): PSpec<R & R1, E | E1, T | T1> {
39
+ if (self.caseValue.isMultiple() && that.caseValue.isMultiple()) {
40
+ return MultipleCase(self.caseValue.specs.concat(that.caseValue.specs));
41
+ }
42
+ if (self.caseValue.isMultiple()) {
43
+ return MultipleCase(self.caseValue.specs.append(that));
44
+ }
45
+ if (that.caseValue.isMultiple()) {
46
+ return MultipleCase(that.caseValue.specs.prepend(self));
47
+ }
48
+ return MultipleCase(Conc<PSpec<R & R1, E | E1, T | T1>>(self, that));
49
+ }
50
+
51
+ /**
52
+ * @tsplus fluent fncts.test.PSpec contramapEnvironment
53
+ */
54
+ export function contramapEnvironment_<R, E, T, R0>(
55
+ self: PSpec<R, E, T>,
56
+ f: (r0: Environment<R0>) => Environment<R>,
57
+ ): PSpec<R0, E, T> {
58
+ return self.transform(
59
+ matchTag(
60
+ {
61
+ Scoped: ({ scoped }) =>
62
+ new ScopedCase(
63
+ scoped.contramapEnvironment((r: Environment<R0 & Has<Scope>>) =>
64
+ Environment.empty.add(r.get(Scope.Tag), Scope.Tag).union(f(r)),
65
+ ),
66
+ ),
67
+ Test: ({ test, annotations }) => new TestCase(test.contramapEnvironment(f), annotations),
68
+ },
69
+ identity,
70
+ ),
71
+ );
72
+ }
73
+
74
+ /**
75
+ * @tsplus fluent fncts.test.PSpec countTests
76
+ */
77
+ export function countTests_<R, E, T>(spec: PSpec<R, E, T>, f: (t: T) => boolean): IO<R & Has<Scope>, E, number> {
78
+ return spec.fold(
79
+ matchTag({
80
+ Exec: ({ spec }) => spec,
81
+ Labeled: ({ spec }) => spec,
82
+ Scoped: ({ scoped }) => scoped.flatten,
83
+ Multiple: ({ specs }) => IO.sequenceIterable(specs).map((specs) => specs.foldLeft(0, (b, a) => b + a)),
84
+ Test: ({ test }) => test.map((t) => (f(t) ? 1 : 0)),
85
+ }),
86
+ );
87
+ }
88
+
89
+ /**
90
+ * @tsplus static fncts.test.PSpecOps empty
91
+ */
92
+ export const empty: PSpec<unknown, never, never> = multipleCase(Conc.empty());
93
+
94
+ /**
95
+ * @tsplus static fncts.test.PSpecOps exec
96
+ * @tsplus static fncts.test.PSpec.ExecCaseOps __call
97
+ */
98
+ export function exec<R, E, T>(spec: PSpec<R, E, T>, exec: ExecutionStrategy): PSpec<R, E, T> {
99
+ return new PSpec(new ExecCase(exec, spec));
100
+ }
101
+
102
+ /**
103
+ * @tsplus fluent fncts.test.PSpec execute
104
+ */
105
+ export function execute<R, E, T>(
106
+ self: PSpec<R, E, T>,
107
+ defExec: ExecutionStrategy,
108
+ ): IO<R & Has<Scope>, never, PSpec<unknown, E, T>> {
109
+ return IO.environmentWithIO((r: Environment<R & Has<Scope>>) =>
110
+ self.provideEnvironment(r).foreachExec(IO.failCauseNow, IO.succeedNow, defExec),
111
+ );
112
+ }
113
+
114
+ /**
115
+ * @tsplus fluent fncts.test.PSpec filterAnnotations
116
+ */
117
+ export function filterAnnotations_<R, E, T, V>(
118
+ spec: PSpec<R, E, T>,
119
+ key: TestAnnotation<V>,
120
+ f: (v: V) => boolean,
121
+ ): Maybe<PSpec<R, E, T>> {
122
+ return matchTag_(spec.caseValue, {
123
+ Exec: ({ spec, exec }) => spec.filterAnnotations(key, f).map((spec) => ExecCase(spec, exec)),
124
+ Labeled: ({ label, spec }) => spec.filterAnnotations(key, f).map((spec) => LabeledCase(spec, label)),
125
+ Scoped: ({ scoped }) =>
126
+ Just(ScopedCase(scoped.map((spec) => spec.filterAnnotations(key, f).getOrElse(Spec.empty)))),
127
+ Multiple: ({ specs }) => {
128
+ const filtered = specs.filterMap((spec) => spec.filterAnnotations(key, f));
129
+ return filtered.isEmpty ? Nothing() : Just(MultipleCase(filtered));
130
+ },
131
+ Test: ({ test, annotations }) => (f(annotations.get(key)) ? Just(TestCase(test, annotations)) : Nothing()),
132
+ });
133
+ }
134
+
135
+ /**
136
+ * @tsplus fluent fncts.test.PSpec filterLabels
137
+ */
138
+ export function filterLabels_<R, E, T>(spec: PSpec<R, E, T>, f: (label: string) => boolean): Maybe<PSpec<R, E, T>> {
139
+ return matchTag_(spec.caseValue, {
140
+ Exec: ({ spec, exec }) => spec.filterLabels(f).map((spec) => ExecCase(spec, exec)),
141
+ Labeled: ({ label, spec }) =>
142
+ f(label) ? Just(LabeledCase(spec, label)) : spec.filterLabels(f).map((spec) => LabeledCase(spec, label)),
143
+ Scoped: ({ scoped }) => Just(ScopedCase(scoped.map((spec) => spec.filterLabels(f).getOrElse(Spec.empty)))),
144
+ Multiple: ({ specs }) => {
145
+ const filtered = specs.filterMap((spec) => spec.filterLabels(f));
146
+ return filtered.isEmpty ? Nothing() : Just(MultipleCase(filtered));
147
+ },
148
+ Test: () => Nothing(),
149
+ });
150
+ }
151
+
152
+ /**
153
+ * @tsplus fluent fncts.test.PSpec filterTags
154
+ */
155
+ export function filterTags_<R, E, T>(spec: PSpec<R, E, T>, f: (tag: string) => boolean): Maybe<PSpec<R, E, T>> {
156
+ return spec.filterAnnotations(TestAnnotation.Tagged, (v) => v.exists(f));
157
+ }
158
+
159
+ /**
160
+ * @tsplus fluent fncts.test.PSpec filterByArgs
161
+ */
162
+ export function filterByArgs<R, E>(spec: Spec<R, E>, args: TestArgs): Spec<R, E> {
163
+ return spec
164
+ .filterTags(args.tagSearchTerms.elem(String.Eq))
165
+ .flatMap((spec) =>
166
+ spec.filterLabels((label) => args.testSearchTerms.findIndex((term) => term.includes(label)) === -1),
167
+ )
168
+ .getOrElse(() => spec);
169
+ }
170
+
171
+ /**
172
+ * @tsplus fluent fncts.test.PSpec fold
173
+ */
174
+ export function fold_<R, E, T, Z>(spec: PSpec<R, E, T>, f: (_: SpecCase<R, E, T, Z>) => Z): Z {
175
+ return matchTag_(spec.caseValue, {
176
+ Exec: ({ exec, spec }) => f(new ExecCase(exec, spec.fold(f))),
177
+ Labeled: ({ label, spec }) => f(new LabeledCase(label, spec.fold(f))),
178
+ Scoped: ({ scoped }) => f(new ScopedCase(scoped.map((spec) => spec.fold(f)))),
179
+ Multiple: ({ specs }) => f(new MultipleCase(specs.map((spec) => spec.fold(f)))),
180
+ Test: (t) => f(t),
181
+ });
182
+ }
183
+
184
+ /**
185
+ * @tsplus fluent fncts.test.PSpec foldScoped
186
+ */
187
+ export function foldScoped_<R, E, T, R1, E1, Z>(
188
+ spec: PSpec<R, E, T>,
189
+ f: (_: SpecCase<R, E, T, Z>) => IO<R1 & Has<Scope>, E1, Z>,
190
+ defExec: ExecutionStrategy,
191
+ ): IO<R & R1 & Has<Scope>, E1, Z> {
192
+ return matchTag_(spec.caseValue, {
193
+ Exec: ({ exec, spec }) => spec.foldScoped(f, exec).flatMap((z) => f(new ExecCase(exec, z))),
194
+ Labeled: ({ label, spec }) => spec.foldScoped(f, defExec).flatMap((z) => f(new LabeledCase(label, z))),
195
+ Scoped: ({ scoped }) =>
196
+ scoped.matchCauseIO(
197
+ (cause) => f(new ScopedCase(IO.haltNow(cause))),
198
+ (spec) => spec.foldScoped(f, defExec).flatMap((z) => f(new ScopedCase(IO.succeedNow(z)))),
199
+ ),
200
+ Multiple: ({ specs }) =>
201
+ IO.foreachExec(specs, defExec, (spec) => spec.foldScoped(f, defExec).scoped).flatMap((zs) =>
202
+ f(new MultipleCase(zs)),
203
+ ),
204
+ Test: f,
205
+ });
206
+ }
207
+
208
+ /**
209
+ * @tsplus fluent fncts.test.PSpec foreachExec
210
+ */
211
+ export function foreachExec_<R, E, T, R1, E1, A, R2, E2, B>(
212
+ spec: PSpec<R, E, T>,
213
+ failure: (c: Cause<E>) => IO<R1, E1, A>,
214
+ success: (t: T) => IO<R2, E2, B>,
215
+ defExec: ExecutionStrategy,
216
+ ): IO<R & R1 & R2 & Has<Scope>, never, PSpec<R & R1 & R2, E1 | E2, A | B>> {
217
+ return spec.foldScoped(
218
+ matchTag({
219
+ Exec: ({ exec, spec }) => IO.succeedNow(ExecCase(spec, exec)),
220
+ Labeled: ({ label, spec }) => IO.succeedNow(LabeledCase(spec, label)),
221
+ Scoped: ({ scoped }) =>
222
+ scoped.matchCause(
223
+ (cause) => TestCase(failure(cause), TestAnnotationMap.empty),
224
+ (t) => ScopedCase(IO.succeedNow(t)),
225
+ ),
226
+ Multiple: ({ specs }) => IO.succeedNow(MultipleCase(specs)),
227
+ Test: ({ test, annotations }) =>
228
+ test.matchCause(
229
+ (cause) => TestCase(failure(cause), annotations),
230
+ (t) => TestCase(success(t), annotations),
231
+ ),
232
+ }),
233
+ defExec,
234
+ );
235
+ }
236
+
237
+ /**
238
+ * @tsplus fluent fncts.test.PSpec labeled
239
+ * @tsplus static fncts.test.PSpecOps labeled
240
+ * @tsplus static fncts.test.PSpec.LabeledCaseOps __call
241
+ */
242
+ export function labeledCase<R, E, T>(spec: PSpec<R, E, T>, label: string): PSpec<R, E, T> {
243
+ return new PSpec(new LabeledCase(label, spec));
244
+ }
245
+
246
+ /**
247
+ * @tsplus fluent fncts.test.PSpec scoped
248
+ * @tsplus static fncts.test.PSpecOps scoped
249
+ * @tsplus static fncts.test.PSpec.ScopedCaseOps __call
250
+ */
251
+ export function scoped<R, E, T>(managed: IO<R & Has<Scope>, E, PSpec<R, E, T>>): PSpec<R, E, T> {
252
+ return new PSpec(new ScopedCase(managed));
253
+ }
254
+
255
+ /**
256
+ * @tsplus fluent fncts.test.SpecCase mapError
257
+ */
258
+ export function mapError<R, E, T, E1>(self: PSpec<R, E, T>, f: (e: E) => E1): PSpec<R, E1, T> {
259
+ return self.transform(
260
+ matchTag(
261
+ {
262
+ Scoped: ({ scoped }) => new ScopedCase(scoped.mapError(f)),
263
+ Test: ({ test, annotations }) => new TestCase(test.mapError(f), annotations),
264
+ },
265
+ identity,
266
+ ),
267
+ );
268
+ }
269
+
270
+ /**
271
+ * @tsplus fluent fncts.test.SpecCase map
272
+ */
273
+ export function mapSpecCase_<R, E, T, A, B>(fa: SpecCase<R, E, T, A>, f: (a: A) => B): SpecCase<R, E, T, B> {
274
+ return matchTag_(fa, {
275
+ Exec: ({ exec, spec }) => new ExecCase(exec, f(spec)),
276
+ Labeled: ({ label, spec }) => new LabeledCase(label, f(spec)),
277
+ Scoped: ({ scoped }) => new ScopedCase(scoped.map(f)),
278
+ Multiple: ({ specs }) => new MultipleCase(specs.map(f)),
279
+ Test: ({ test, annotations }) => new TestCase(test, annotations),
280
+ });
281
+ }
282
+
283
+ /**
284
+ * @tsplus fluent fncts.test.PSpec multiple
285
+ * @tsplus static fncts.test.PSpecOps multiple
286
+ * @tsplus static fncts.test.PSpec.MultipleCaseOps __call
287
+ */
288
+ export function multipleCase<R, E, T>(specs: Conc<PSpec<R, E, T>>): PSpec<R, E, T> {
289
+ return new PSpec(new MultipleCase(specs));
290
+ }
291
+
292
+ /**
293
+ * @tsplus fluent fncts.test.PSpec provideEnvironment
294
+ */
295
+ export function provideEnvironment_<R, E, T>(self: PSpec<R, E, T>, r: Environment<R>): PSpec<unknown, E, T> {
296
+ return self.contramapEnvironment(() => r);
297
+ }
298
+
299
+ /**
300
+ * @tsplus fluent fncts.test.PSpec provideLayer
301
+ */
302
+ export function provideLayer_<RIn, E, ROut extends Spreadable, R, E1, T>(
303
+ self: PSpec<ROut, E1, T>,
304
+ layer: Layer<RIn, E, ROut>,
305
+ ): PSpec<RIn, E | E1, T> {
306
+ return self.transform(
307
+ matchTag(
308
+ {
309
+ Scoped: ({ scoped }) => new ScopedCase(scoped.provideLayer(Layer.environment<Has<Scope>>().and(layer))),
310
+ Test: ({ test, annotations }) => new TestCase(test.provideLayer(layer), annotations),
311
+ },
312
+ identity,
313
+ ),
314
+ );
315
+ }
316
+
317
+ /**
318
+ * @tsplus fluent fncts.test.PSpec test
319
+ * @tsplus static fncts.test.PSpecOps test
320
+ * @tsplus static fncts.test.PSpec.TestCaseOps __call
321
+ */
322
+ export function testCase<R, E, T>(test: IO<R, E, T>, annotations: TestAnnotationMap): PSpec<R, E, T> {
323
+ return new PSpec(new TestCase(test, annotations));
324
+ }
325
+
326
+ /**
327
+ * @tsplus fluent fncts.test.PSpec transform
328
+ */
329
+ export function transform_<R, E, T, R1, E1, T1>(
330
+ spec: PSpec<R, E, T>,
331
+ f: (_: SpecCase<R, E, T, PSpec<R1, E1, T1>>) => SpecCase<R1, E1, T1, PSpec<R1, E1, T1>>,
332
+ ): PSpec<R1, E1, T1> {
333
+ return matchTag_(spec.caseValue, {
334
+ Exec: ({ exec, spec }) => new PSpec(f(new ExecCase(exec, spec.transform(f)))),
335
+ Labeled: ({ label, spec }) => new PSpec(f(new LabeledCase(label, spec.transform(f)))),
336
+ Scoped: ({ scoped }) => new PSpec(f(new ScopedCase(scoped.map((spec) => spec.transform(f))))),
337
+ Multiple: ({ specs }) => new PSpec(f(new MultipleCase(specs.map((spec) => spec.transform(f))))),
338
+ Test: (t) => new PSpec(f(t)),
339
+ });
340
+ }
341
+
342
+ /**
343
+ * @tsplus fluent fncts.test.PSpec annotate
344
+ */
345
+ export function annotate_<R, E, T, V>(self: PSpec<R, E, T>, key: TestAnnotation<V>, value: V): PSpec<R, E, T> {
346
+ return self.transform(
347
+ matchTag(
348
+ {
349
+ Test: ({ test, annotations }) => new TestCase(test, annotations.annotate(key, value)),
350
+ },
351
+ identity,
352
+ ),
353
+ );
354
+ }
355
+
356
+ /**
357
+ * @tsplus fluent fncts.test.PSpec whenIO
358
+ */
359
+ export function whenIO_<R, E, R1, E1>(
360
+ self: PSpec<R, E, TestSuccess>,
361
+ b: IO<R1, E1, boolean>,
362
+ ): PSpec<R & R1 & Has<Annotations>, E | E1, TestSuccess> {
363
+ return matchTag_(self.caseValue, {
364
+ Exec: (c) => exec(c.spec.whenIO(b), c.exec),
365
+ Labeled: ({ label, spec }) => Spec.labeled(spec.whenIO(b), label),
366
+ Scoped: (c) => Spec.scoped(b.flatMap((b) => (b ? c.scoped : IO.succeedNow(Spec.empty)))),
367
+ Multiple: ({ specs }) => Spec.multiple(specs.map((_) => _.whenIO(b))),
368
+ Test: (c) =>
369
+ Spec.test(
370
+ b.flatMap((b) => IO.if(b, c.test, Annotations.annotate(TestAnnotation.Ignored, 1)).as(TestSuccess.Ignored)),
371
+ c.annotations,
372
+ ),
373
+ });
374
+ }
375
+
376
+ /**
377
+ * @tsplus fluent fncts.test.PSpec when
378
+ */
379
+ export function when_<R, E>(
380
+ self: PSpec<R, E, TestSuccess>,
381
+ b: Lazy<boolean>,
382
+ ): PSpec<R & Has<Annotations>, E, TestSuccess> {
383
+ return self.whenIO(IO.succeed(b));
384
+ }
@@ -0,0 +1,103 @@
1
+ import type { TestAnnotationMap } from "../../data/TestAnnotationMap.js";
2
+ import type { TestFailure } from "../../data/TestFailure.js";
3
+ import type { TestSuccess } from "../../data/TestSuccess.js";
4
+ import type { _A, _E, _R } from "@fncts/base/types.js";
5
+
6
+ /**
7
+ * @tsplus type fncts.test.PSpec
8
+ * @tsplus companion fncts.test.PSpecOps
9
+ */
10
+ export class PSpec<R, E, T> {
11
+ readonly _R!: (_: R) => void;
12
+ readonly _E!: () => E;
13
+ readonly _A!: () => T;
14
+
15
+ constructor(readonly caseValue: SpecCase<R, E, T, PSpec<R, E, T>>) {}
16
+ }
17
+
18
+ /**
19
+ * @tsplus type fncts.test.PSpecOps
20
+ */
21
+ export interface SpecOps {}
22
+
23
+ export const Spec: SpecOps = {};
24
+
25
+ /**
26
+ * @tsplus type fncts.test.PSpec
27
+ */
28
+ export type Spec<R, E> = PSpec<R, TestFailure<E>, TestSuccess>;
29
+
30
+ export const enum SpecCaseTag {
31
+ Exec = "Exec",
32
+ Labeled = "Labeled",
33
+ Scoped = "Scoped",
34
+ Multiple = "Multiple",
35
+ Test = "Test",
36
+ }
37
+
38
+ /**
39
+ * @tsplus companion fncts.test.PSpec.ExecCaseOps
40
+ */
41
+ export class ExecCase<Spec> {
42
+ readonly _tag = SpecCaseTag.Exec;
43
+ constructor(readonly exec: ExecutionStrategy, readonly spec: Spec) {}
44
+ }
45
+
46
+ /**
47
+ * @tsplus companion fncts.test.PSpec.LabeledCaseOps
48
+ */
49
+ export class LabeledCase<Spec> {
50
+ readonly _tag = SpecCaseTag.Labeled;
51
+ constructor(readonly label: string, readonly spec: Spec) {}
52
+ }
53
+
54
+ /**
55
+ * @tsplus companion fncts.test.PSpec.ScopedCaseOps
56
+ */
57
+ export class ScopedCase<R, E, Spec> {
58
+ readonly _tag = SpecCaseTag.Scoped;
59
+ constructor(readonly scoped: IO<R & Has<Scope>, E, Spec>) {}
60
+ }
61
+
62
+ /**
63
+ * @tsplus companion fncts.test.PSpec.MultipleCaseOps
64
+ */
65
+ export class MultipleCase<Spec> {
66
+ readonly _tag = SpecCaseTag.Multiple;
67
+ constructor(readonly specs: Conc<Spec>) {}
68
+ }
69
+
70
+ /**
71
+ * @tsplus companion fncts.test.PSpec.TestCaseOps
72
+ */
73
+ export class TestCase<R, E, T> {
74
+ readonly _R!: (_: R) => void;
75
+ readonly _E!: () => E;
76
+ readonly _A!: () => T;
77
+ readonly _tag = SpecCaseTag.Test;
78
+ constructor(readonly test: IO<R, E, T>, readonly annotations: TestAnnotationMap) {}
79
+ }
80
+
81
+ /**
82
+ * @tsplus type fncts.test.SpecCase
83
+ */
84
+ export type SpecCase<R, E, T, A> =
85
+ | ExecCase<A>
86
+ | LabeledCase<A>
87
+ | ScopedCase<R, E, A>
88
+ | MultipleCase<A>
89
+ | TestCase<R, E, T>;
90
+
91
+ /**
92
+ * @tsplus fluent fncts.test.SpecCase isMultiple
93
+ */
94
+ export function isMultiple<R, E, T, A>(self: SpecCase<R, E, T, A>): self is MultipleCase<A> {
95
+ return self._tag === SpecCaseTag.Multiple;
96
+ }
97
+
98
+ /**
99
+ * @tsplus unify fncts.test.PSpec
100
+ */
101
+ export function unifyPSpec<X extends PSpec<any, any, any>>(_: X): PSpec<_R<X>, _E<X>, _A<X>> {
102
+ return _;
103
+ }
@@ -0,0 +1,4 @@
1
+ // codegen:start { preset: barrel, include: ./Spec/*.ts }
2
+ export * from "./Spec/api.js";
3
+ export * from "./Spec/definition.js";
4
+ // codegen:end
@@ -0,0 +1,68 @@
1
+ import type { TestFailure } from "@fncts/test/data/TestFailure";
2
+ import type { TestSuccess } from "@fncts/test/data/TestSuccess";
3
+
4
+ import { matchTag } from "@fncts/base/util/pattern";
5
+ import { render } from "@fncts/test/control/DefaultTestReporter/render";
6
+ import { silent } from "@fncts/test/control/TestAnnotationRenderer";
7
+ import { ConsoleRenderer } from "@fncts/test/control/TestRenderer/ConsoleRenderer";
8
+ import { ExecutedSpec } from "@fncts/test/data/ExecutedSpec";
9
+ import { Summary } from "@fncts/test/data/Summary";
10
+
11
+ /**
12
+ * @tsplus type fncts.test.SummaryBuilder
13
+ */
14
+ export interface SummaryBuilderOps {}
15
+
16
+ export const SummaryBuilder: SummaryBuilderOps = {};
17
+
18
+ /**
19
+ * @tsplus static fncts.test.SummaryBuilder buildSummary
20
+ */
21
+ export function buildSummary<E>(executedSpec: ExecutedSpec<E>): Summary {
22
+ const success = countTestResults(executedSpec, (_) =>
23
+ _.match(
24
+ () => false,
25
+ (_) => _._tag === "Succeeded",
26
+ ),
27
+ );
28
+ const fail = countTestResults(executedSpec, (_) => _.isLeft());
29
+ const ignore = countTestResults(executedSpec, (_) =>
30
+ _.match(
31
+ () => false,
32
+ (_) => _._tag === "Ignored",
33
+ ),
34
+ );
35
+ const failures = extractFailures(executedSpec);
36
+ const rendered = ConsoleRenderer.render(failures.flatMap(render), silent).join("\n");
37
+
38
+ return new Summary(success, fail, ignore, rendered);
39
+ }
40
+
41
+ function countTestResults<E>(
42
+ executedSpec: ExecutedSpec<E>,
43
+ predicate: (r: Either<TestFailure<E>, TestSuccess>) => boolean,
44
+ ): number {
45
+ return executedSpec.fold(
46
+ matchTag({
47
+ Labeled: ({ spec }) => spec,
48
+ Multiple: ({ specs }) => specs.foldLeft(0, (b, a) => b + a),
49
+ Test: ({ test }) => (predicate(test) ? 1 : 0),
50
+ }),
51
+ );
52
+ }
53
+
54
+ function extractFailures<E>(executedSpec: ExecutedSpec<E>): Vector<ExecutedSpec<E>> {
55
+ return executedSpec.fold(
56
+ matchTag({
57
+ Labeled: ({ label, spec }) => spec.map((spec) => ExecutedSpec.labeled(spec, label)),
58
+ Test: (c) => (c.test.isLeft() ? Vector.single(new ExecutedSpec(c)) : Vector.empty<ExecutedSpec<E>>()),
59
+ Multiple: ({ specs }) => {
60
+ const newSpecs = specs.flatMap(Conc.from);
61
+ if (newSpecs.isNonEmpty) {
62
+ return Vector.single(ExecutedSpec.multiple(newSpecs));
63
+ }
64
+ return Vector.empty<ExecutedSpec<E>>();
65
+ },
66
+ }),
67
+ );
68
+ }
@@ -0,0 +1,31 @@
1
+ import type { TestResult } from "../data/FailureDetails.js";
2
+
3
+ import { FreeBooleanAlgebra } from "../data/FreeBooleanAlgebra.js";
4
+ import { TestFailure } from "../data/TestFailure.js";
5
+ import { TestSuccess } from "../data/TestSuccess.js";
6
+
7
+ /**
8
+ * @tsplus type fncts.control.IO
9
+ */
10
+ export type Test<R, E> = IO<R, TestFailure<E>, TestSuccess>;
11
+
12
+ /**
13
+ * @tsplus type fncts.test.TestOps
14
+ */
15
+ export interface TestOps {}
16
+
17
+ export const Test: TestOps = {};
18
+
19
+ /**
20
+ * @tsplus static fncts.test.TestOps fromAssertion
21
+ */
22
+ export function fromAssertion<R, E>(assertion: Lazy<IO<R, E, TestResult>>): Test<R, E> {
23
+ return IO.defer(assertion).matchCauseIO(
24
+ (cause) => IO.failNow(TestFailure.failCause(cause)),
25
+ (testResult) =>
26
+ testResult.failures.match(
27
+ () => IO.succeedNow(TestSuccess.Succeeded(FreeBooleanAlgebra.success(undefined))),
28
+ (failure) => IO.failNow(TestFailure.assertion(failure)),
29
+ ),
30
+ );
31
+ }
@@ -0,0 +1,75 @@
1
+ import type { TestAnnotationRenderer } from "./definition.js";
2
+
3
+ import { TestAnnotation } from "../../data/TestAnnotation.js";
4
+ import { LeafRenderer } from "./definition.js";
5
+ import { CompositeRenderer, TestAnnotationRendererTag } from "./definition.js";
6
+
7
+ /**
8
+ * @tsplus fluent fncts.test.TestAnnotationRenderer combine
9
+ * @tsplus operator fncts.test.TestAnnotationRenderer +
10
+ */
11
+ export function combine_(self: TestAnnotationRenderer, that: TestAnnotationRenderer): TestAnnotationRenderer {
12
+ if (
13
+ self._tag === TestAnnotationRendererTag.CompositeRenderer &&
14
+ that._tag === TestAnnotationRendererTag.CompositeRenderer
15
+ ) {
16
+ return new CompositeRenderer(self.renderers.concat(that.renderers));
17
+ } else if (self._tag === TestAnnotationRendererTag.CompositeRenderer) {
18
+ return new CompositeRenderer(self.renderers.append(that));
19
+ } else if (that._tag === TestAnnotationRendererTag.CompositeRenderer) {
20
+ return new CompositeRenderer(that.renderers.prepend(self));
21
+ } else {
22
+ return new CompositeRenderer(Vector(self, that));
23
+ }
24
+ }
25
+
26
+ /**
27
+ * @tsplus static fncts.test.TestAnnotationRendererOps Ignored
28
+ */
29
+ export const ignored: TestAnnotationRenderer = new LeafRenderer((f) =>
30
+ f(TestAnnotation.Ignored, (children) => children.head.flatMap((n) => (n === 0 ? Nothing() : Just(`ignored: ${n}`)))),
31
+ );
32
+
33
+ /**
34
+ * @tsplus static fncts.test.TestAnnotationRendererOps Repeated
35
+ */
36
+ export const repeated: TestAnnotationRenderer = new LeafRenderer((f) =>
37
+ f(TestAnnotation.Repeated, (children) =>
38
+ children.head.flatMap((n) => (n === 0 ? Nothing() : Just(`repeated: ${n}`))),
39
+ ),
40
+ );
41
+
42
+ /**
43
+ * @tsplus static fncts.test.TestAnnotationRendererOps Retried
44
+ */
45
+ export const retried: TestAnnotationRenderer = new LeafRenderer((f) =>
46
+ f(TestAnnotation.Repeated, (children) => children.head.flatMap((n) => (n === 0 ? Nothing() : Just(`retried: ${n}`)))),
47
+ );
48
+
49
+ /**
50
+ * @tsplus static fncts.test.TestAnnotationRendererOps Tagged
51
+ */
52
+ export const tagged: TestAnnotationRenderer = new LeafRenderer((f) =>
53
+ f(TestAnnotation.Tagged, (children) =>
54
+ children.head.flatMap((child) =>
55
+ child.size === 0 ? Nothing() : Just(`tagged: ${child.map((s) => s.surround('"')).join(", ")}`),
56
+ ),
57
+ ),
58
+ );
59
+
60
+ /**
61
+ * @tsplus static fncts.test.TestAnnotationRendererOps Timed
62
+ */
63
+ export const timed: TestAnnotationRenderer = new LeafRenderer((f) =>
64
+ f(TestAnnotation.Timing, (children) => children.head.flatMap((n) => (n === 0 ? Nothing() : Just(`${n}ms`)))),
65
+ );
66
+
67
+ /**
68
+ * @tsplus static fncts.test.TestAnnotationRendererOps Silent
69
+ */
70
+ export const silent: TestAnnotationRenderer = new CompositeRenderer(Vector.empty());
71
+
72
+ /**
73
+ * @tsplus static fncts.test.TestAnnotationRendererOps Default
74
+ */
75
+ export const Default: TestAnnotationRenderer = new CompositeRenderer(Vector(ignored, repeated, retried, tagged, timed));