@fncts/test 0.0.21 → 0.0.22

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 (426) hide show
  1. package/_cjs/api.cjs +2 -47
  2. package/_cjs/api.cjs.map +1 -1
  3. package/_cjs/control/AbstractRunnableSpec.cjs +0 -11
  4. package/_cjs/control/AbstractRunnableSpec.cjs.map +1 -1
  5. package/_cjs/control/Annotations/api.cjs +0 -12
  6. package/_cjs/control/Annotations/api.cjs.map +1 -1
  7. package/_cjs/control/Annotations/definition.cjs +0 -6
  8. package/_cjs/control/Annotations/definition.cjs.map +1 -1
  9. package/_cjs/control/Annotations/live.cjs +9 -30
  10. package/_cjs/control/Annotations/live.cjs.map +1 -1
  11. package/_cjs/control/Annotations.cjs +0 -6
  12. package/_cjs/control/Annotations.cjs.map +1 -1
  13. package/_cjs/control/Assertion/api.cjs +8 -70
  14. package/_cjs/control/Assertion/api.cjs.map +1 -1
  15. package/_cjs/control/Assertion/definition.cjs +0 -8
  16. package/_cjs/control/Assertion/definition.cjs.map +1 -1
  17. package/_cjs/control/Assertion.cjs +0 -4
  18. package/_cjs/control/Assertion.cjs.map +1 -1
  19. package/_cjs/control/AssertionIO/api.cjs +0 -12
  20. package/_cjs/control/AssertionIO/api.cjs.map +1 -1
  21. package/_cjs/control/AssertionIO/definition.cjs +0 -8
  22. package/_cjs/control/AssertionIO/definition.cjs.map +1 -1
  23. package/_cjs/control/AssertionIO.cjs +0 -4
  24. package/_cjs/control/AssertionIO.cjs.map +1 -1
  25. package/_cjs/control/DefaultRunnableSpec.cjs +0 -12
  26. package/_cjs/control/DefaultRunnableSpec.cjs.map +1 -1
  27. package/_cjs/control/DefaultTestReporter/definition.cjs.map +1 -1
  28. package/_cjs/control/DefaultTestReporter/render.cjs +5 -74
  29. package/_cjs/control/DefaultTestReporter/render.cjs.map +1 -1
  30. package/_cjs/control/DefaultTestReporter.cjs +0 -4
  31. package/_cjs/control/DefaultTestReporter.cjs.map +1 -1
  32. package/_cjs/control/FreeBooleanAlgebraIO/api.cjs +0 -20
  33. package/_cjs/control/FreeBooleanAlgebraIO/api.cjs.map +1 -1
  34. package/_cjs/control/FreeBooleanAlgebraIO/definition.cjs.map +1 -1
  35. package/_cjs/control/FreeBooleanAlgebraIO.cjs +0 -4
  36. package/_cjs/control/FreeBooleanAlgebraIO.cjs.map +1 -1
  37. package/_cjs/control/Gen/api.cjs +496 -176
  38. package/_cjs/control/Gen/api.cjs.map +1 -1
  39. package/_cjs/control/Gen/definition.cjs +0 -3
  40. package/_cjs/control/Gen/definition.cjs.map +1 -1
  41. package/_cjs/control/Gen.cjs +0 -97
  42. package/_cjs/control/Gen.cjs.map +1 -1
  43. package/_cjs/control/Live/definition.cjs +0 -18
  44. package/_cjs/control/Live/definition.cjs.map +1 -1
  45. package/_cjs/control/Live.cjs +0 -2
  46. package/_cjs/control/Live.cjs.map +1 -1
  47. package/_cjs/control/RunnableSpec.cjs +1 -21
  48. package/_cjs/control/RunnableSpec.cjs.map +1 -1
  49. package/_cjs/control/Sample/api.cjs +1 -56
  50. package/_cjs/control/Sample/api.cjs.map +1 -1
  51. package/_cjs/control/Sample/definition.cjs +0 -3
  52. package/_cjs/control/Sample/definition.cjs.map +1 -1
  53. package/_cjs/control/Sample.cjs +0 -4
  54. package/_cjs/control/Sample.cjs.map +1 -1
  55. package/_cjs/control/Sized/api.cjs +0 -8
  56. package/_cjs/control/Sized/api.cjs.map +1 -1
  57. package/_cjs/control/Sized/definition.cjs +0 -6
  58. package/_cjs/control/Sized/definition.cjs.map +1 -1
  59. package/_cjs/control/Sized/live.cjs +0 -12
  60. package/_cjs/control/Sized/live.cjs.map +1 -1
  61. package/_cjs/control/Sized.cjs +0 -6
  62. package/_cjs/control/Sized.cjs.map +1 -1
  63. package/_cjs/control/Spec/api.cjs +1 -82
  64. package/_cjs/control/Spec/api.cjs.map +1 -1
  65. package/_cjs/control/Spec/definition.cjs +6 -45
  66. package/_cjs/control/Spec/definition.cjs.map +1 -1
  67. package/_cjs/control/Spec.cjs +0 -4
  68. package/_cjs/control/Spec.cjs.map +1 -1
  69. package/_cjs/control/SummaryBuilder.cjs +0 -21
  70. package/_cjs/control/SummaryBuilder.cjs.map +1 -1
  71. package/_cjs/control/Test.cjs +0 -10
  72. package/_cjs/control/Test.cjs.map +1 -1
  73. package/_cjs/control/TestAnnotationRenderer/api.cjs +4 -31
  74. package/_cjs/control/TestAnnotationRenderer/api.cjs.map +1 -1
  75. package/_cjs/control/TestAnnotationRenderer/definition.cjs +2 -18
  76. package/_cjs/control/TestAnnotationRenderer/definition.cjs.map +1 -1
  77. package/_cjs/control/TestAnnotationRenderer.cjs +0 -4
  78. package/_cjs/control/TestAnnotationRenderer.cjs.map +1 -1
  79. package/_cjs/control/TestAspect/api.cjs +3 -44
  80. package/_cjs/control/TestAspect/api.cjs.map +1 -1
  81. package/_cjs/control/TestAspect.cjs +0 -4
  82. package/_cjs/control/TestAspect.cjs.map +1 -1
  83. package/_cjs/control/TestClock/api.cjs +10 -29
  84. package/_cjs/control/TestClock/api.cjs.map +1 -1
  85. package/_cjs/control/TestClock/definition.cjs +57 -107
  86. package/_cjs/control/TestClock/definition.cjs.map +1 -1
  87. package/_cjs/control/TestClock.cjs +0 -4
  88. package/_cjs/control/TestClock.cjs.map +1 -1
  89. package/_cjs/control/TestConsole/api.cjs +0 -18
  90. package/_cjs/control/TestConsole/api.cjs.map +1 -1
  91. package/_cjs/control/TestConsole/definition.cjs +24 -45
  92. package/_cjs/control/TestConsole/definition.cjs.map +1 -1
  93. package/_cjs/control/TestConsole.cjs +0 -4
  94. package/_cjs/control/TestConsole.cjs.map +1 -1
  95. package/_cjs/control/TestEnvironment.cjs +0 -12
  96. package/_cjs/control/TestEnvironment.cjs.map +1 -1
  97. package/_cjs/control/TestExecutor.cjs +0 -14
  98. package/_cjs/control/TestExecutor.cjs.map +1 -1
  99. package/_cjs/control/TestLogger.cjs +0 -15
  100. package/_cjs/control/TestLogger.cjs.map +1 -1
  101. package/_cjs/control/TestRandom/api.cjs +0 -30
  102. package/_cjs/control/TestRandom/api.cjs.map +1 -1
  103. package/_cjs/control/TestRandom/definition.cjs +56 -134
  104. package/_cjs/control/TestRandom/definition.cjs.map +1 -1
  105. package/_cjs/control/TestRandom.cjs +0 -4
  106. package/_cjs/control/TestRandom.cjs.map +1 -1
  107. package/_cjs/control/TestRenderer/ConsoleRenderer.cjs +0 -25
  108. package/_cjs/control/TestRenderer/ConsoleRenderer.cjs.map +1 -1
  109. package/_cjs/control/TestRunner.cjs +2 -19
  110. package/_cjs/control/TestRunner.cjs.map +1 -1
  111. package/_cjs/data/AssertionData.cjs +0 -14
  112. package/_cjs/data/AssertionData.cjs.map +1 -1
  113. package/_cjs/data/AssertionResult.cjs +0 -8
  114. package/_cjs/data/AssertionResult.cjs.map +1 -1
  115. package/_cjs/data/AssertionValue/api.cjs +1 -16
  116. package/_cjs/data/AssertionValue/api.cjs.map +1 -1
  117. package/_cjs/data/AssertionValue/definition.cjs +0 -8
  118. package/_cjs/data/AssertionValue/definition.cjs.map +1 -1
  119. package/_cjs/data/AssertionValue.cjs +0 -4
  120. package/_cjs/data/AssertionValue.cjs.map +1 -1
  121. package/_cjs/data/ExecutedSpec/api.cjs +4 -26
  122. package/_cjs/data/ExecutedSpec/api.cjs.map +1 -1
  123. package/_cjs/data/ExecutedSpec/definition.cjs +3 -21
  124. package/_cjs/data/ExecutedSpec/definition.cjs.map +1 -1
  125. package/_cjs/data/ExecutedSpec.cjs +0 -4
  126. package/_cjs/data/ExecutedSpec.cjs.map +1 -1
  127. package/_cjs/data/ExecutionResult.cjs +0 -29
  128. package/_cjs/data/ExecutionResult.cjs.map +1 -1
  129. package/_cjs/data/FailureDetails.cjs +0 -3
  130. package/_cjs/data/FailureDetails.cjs.map +1 -1
  131. package/_cjs/data/FreeBooleanAlgebra/api.cjs +4 -53
  132. package/_cjs/data/FreeBooleanAlgebra/api.cjs.map +1 -1
  133. package/_cjs/data/FreeBooleanAlgebra/definition.cjs +4 -24
  134. package/_cjs/data/FreeBooleanAlgebra/definition.cjs.map +1 -1
  135. package/_cjs/data/FreeBooleanAlgebra.cjs +0 -4
  136. package/_cjs/data/FreeBooleanAlgebra.cjs.map +1 -1
  137. package/_cjs/data/GenFailureDetails.cjs +0 -3
  138. package/_cjs/data/GenFailureDetails.cjs.map +1 -1
  139. package/_cjs/data/LogLine/Fragment.cjs +0 -22
  140. package/_cjs/data/LogLine/Fragment.cjs.map +1 -1
  141. package/_cjs/data/LogLine/Line.cjs +0 -32
  142. package/_cjs/data/LogLine/Line.cjs.map +1 -1
  143. package/_cjs/data/LogLine/Message.cjs +0 -34
  144. package/_cjs/data/LogLine/Message.cjs.map +1 -1
  145. package/_cjs/data/LogLine/Style.cjs +10 -44
  146. package/_cjs/data/LogLine/Style.cjs.map +1 -1
  147. package/_cjs/data/LogLine/api.cjs +0 -15
  148. package/_cjs/data/LogLine/api.cjs.map +1 -1
  149. package/_cjs/data/LogLine.cjs +0 -4
  150. package/_cjs/data/LogLine.cjs.map +1 -1
  151. package/_cjs/data/Render/api.cjs +0 -4
  152. package/_cjs/data/Render/api.cjs.map +1 -1
  153. package/_cjs/data/Render/definition.cjs +2 -16
  154. package/_cjs/data/Render/definition.cjs.map +1 -1
  155. package/_cjs/data/Render.cjs +0 -4
  156. package/_cjs/data/Render.cjs.map +1 -1
  157. package/_cjs/data/RenderParam/api.cjs +3 -15
  158. package/_cjs/data/RenderParam/api.cjs.map +1 -1
  159. package/_cjs/data/RenderParam/definition.cjs +2 -12
  160. package/_cjs/data/RenderParam/definition.cjs.map +1 -1
  161. package/_cjs/data/RenderParam.cjs +0 -4
  162. package/_cjs/data/RenderParam.cjs.map +1 -1
  163. package/_cjs/data/Summary.cjs +0 -3
  164. package/_cjs/data/Summary.cjs.map +1 -1
  165. package/_cjs/data/TestAnnotation/api.cjs +1 -16
  166. package/_cjs/data/TestAnnotation/api.cjs.map +1 -1
  167. package/_cjs/data/TestAnnotation/definition.cjs +4 -19
  168. package/_cjs/data/TestAnnotation/definition.cjs.map +1 -1
  169. package/_cjs/data/TestAnnotation.cjs +0 -4
  170. package/_cjs/data/TestAnnotation.cjs.map +1 -1
  171. package/_cjs/data/TestAnnotationMap.cjs +2 -17
  172. package/_cjs/data/TestAnnotationMap.cjs.map +1 -1
  173. package/_cjs/data/TestArgs/definition.cjs +0 -3
  174. package/_cjs/data/TestArgs/definition.cjs.map +1 -1
  175. package/_cjs/data/TestArgs.cjs +0 -2
  176. package/_cjs/data/TestArgs.cjs.map +1 -1
  177. package/_cjs/data/TestConfig.cjs +0 -17
  178. package/_cjs/data/TestConfig.cjs.map +1 -1
  179. package/_cjs/data/TestFailure.cjs +2 -23
  180. package/_cjs/data/TestFailure.cjs.map +1 -1
  181. package/_cjs/data/TestSuccess.cjs +2 -16
  182. package/_cjs/data/TestSuccess.cjs.map +1 -1
  183. package/_cjs/data/TestTimeoutException.cjs +0 -3
  184. package/_cjs/data/TestTimeoutException.cjs.map +1 -1
  185. package/_cjs/demo.cjs +0 -10
  186. package/_cjs/demo.cjs.map +1 -1
  187. package/_cjs/util/math.cjs +14 -142
  188. package/_cjs/util/math.cjs.map +1 -1
  189. package/_mjs/api.mjs +2 -13
  190. package/_mjs/api.mjs.map +1 -1
  191. package/_mjs/control/AbstractRunnableSpec.mjs +0 -6
  192. package/_mjs/control/AbstractRunnableSpec.mjs.map +1 -1
  193. package/_mjs/control/Annotations/api.mjs +0 -4
  194. package/_mjs/control/Annotations/api.mjs.map +1 -1
  195. package/_mjs/control/Annotations/definition.mjs +0 -2
  196. package/_mjs/control/Annotations/definition.mjs.map +1 -1
  197. package/_mjs/control/Annotations/live.mjs +9 -13
  198. package/_mjs/control/Annotations/live.mjs.map +1 -1
  199. package/_mjs/control/Annotations.mjs.map +1 -1
  200. package/_mjs/control/Assertion/api.mjs +6 -21
  201. package/_mjs/control/Assertion/api.mjs.map +1 -1
  202. package/_mjs/control/Assertion/definition.mjs +0 -2
  203. package/_mjs/control/Assertion/definition.mjs.map +1 -1
  204. package/_mjs/control/Assertion.mjs.map +1 -1
  205. package/_mjs/control/AssertionIO/api.mjs +0 -3
  206. package/_mjs/control/AssertionIO/api.mjs.map +1 -1
  207. package/_mjs/control/AssertionIO/definition.mjs +0 -3
  208. package/_mjs/control/AssertionIO/definition.mjs.map +1 -1
  209. package/_mjs/control/AssertionIO.mjs.map +1 -1
  210. package/_mjs/control/DefaultRunnableSpec.mjs +0 -1
  211. package/_mjs/control/DefaultRunnableSpec.mjs.map +1 -1
  212. package/_mjs/control/DefaultTestReporter/definition.mjs.map +1 -1
  213. package/_mjs/control/DefaultTestReporter/render.mjs +5 -38
  214. package/_mjs/control/DefaultTestReporter/render.mjs.map +1 -1
  215. package/_mjs/control/DefaultTestReporter.mjs.map +1 -1
  216. package/_mjs/control/FreeBooleanAlgebraIO/api.mjs +0 -8
  217. package/_mjs/control/FreeBooleanAlgebraIO/api.mjs.map +1 -1
  218. package/_mjs/control/FreeBooleanAlgebraIO/definition.mjs.map +1 -1
  219. package/_mjs/control/FreeBooleanAlgebraIO.mjs.map +1 -1
  220. package/_mjs/control/Gen/api.mjs +430 -120
  221. package/_mjs/control/Gen/api.mjs.map +1 -1
  222. package/_mjs/control/Gen/definition.mjs +0 -1
  223. package/_mjs/control/Gen/definition.mjs.map +1 -1
  224. package/_mjs/control/Gen.mjs +1 -10
  225. package/_mjs/control/Gen.mjs.map +1 -1
  226. package/_mjs/control/Live/definition.mjs +0 -5
  227. package/_mjs/control/Live/definition.mjs.map +1 -1
  228. package/_mjs/control/Live.mjs.map +1 -1
  229. package/_mjs/control/RunnableSpec.mjs +1 -4
  230. package/_mjs/control/RunnableSpec.mjs.map +1 -1
  231. package/_mjs/control/Sample/api.mjs +1 -31
  232. package/_mjs/control/Sample/api.mjs.map +1 -1
  233. package/_mjs/control/Sample/definition.mjs +0 -1
  234. package/_mjs/control/Sample/definition.mjs.map +1 -1
  235. package/_mjs/control/Sample.mjs.map +1 -1
  236. package/_mjs/control/Sized/api.mjs +0 -2
  237. package/_mjs/control/Sized/api.mjs.map +1 -1
  238. package/_mjs/control/Sized/definition.mjs +0 -2
  239. package/_mjs/control/Sized/definition.mjs.map +1 -1
  240. package/_mjs/control/Sized/live.mjs +0 -3
  241. package/_mjs/control/Sized/live.mjs.map +1 -1
  242. package/_mjs/control/Sized.mjs.map +1 -1
  243. package/_mjs/control/Spec/api.mjs +1 -45
  244. package/_mjs/control/Spec/api.mjs.map +1 -1
  245. package/_mjs/control/Spec/definition.mjs +6 -31
  246. package/_mjs/control/Spec/definition.mjs.map +1 -1
  247. package/_mjs/control/Spec.mjs.map +1 -1
  248. package/_mjs/control/SummaryBuilder.mjs +0 -5
  249. package/_mjs/control/SummaryBuilder.mjs.map +1 -1
  250. package/_mjs/control/Test.mjs +0 -1
  251. package/_mjs/control/Test.mjs.map +1 -1
  252. package/_mjs/control/TestAnnotationRenderer/api.mjs +4 -20
  253. package/_mjs/control/TestAnnotationRenderer/api.mjs.map +1 -1
  254. package/_mjs/control/TestAnnotationRenderer/definition.mjs +2 -8
  255. package/_mjs/control/TestAnnotationRenderer/definition.mjs.map +1 -1
  256. package/_mjs/control/TestAnnotationRenderer.mjs.map +1 -1
  257. package/_mjs/control/TestAspect/api.mjs +3 -7
  258. package/_mjs/control/TestAspect/api.mjs.map +1 -1
  259. package/_mjs/control/TestAspect.mjs.map +1 -1
  260. package/_mjs/control/TestClock/api.mjs +10 -13
  261. package/_mjs/control/TestClock/api.mjs.map +1 -1
  262. package/_mjs/control/TestClock/definition.mjs +57 -72
  263. package/_mjs/control/TestClock/definition.mjs.map +1 -1
  264. package/_mjs/control/TestClock.mjs.map +1 -1
  265. package/_mjs/control/TestConsole/api.mjs +0 -3
  266. package/_mjs/control/TestConsole/api.mjs.map +1 -1
  267. package/_mjs/control/TestConsole/definition.mjs +24 -31
  268. package/_mjs/control/TestConsole/definition.mjs.map +1 -1
  269. package/_mjs/control/TestConsole.mjs.map +1 -1
  270. package/_mjs/control/TestEnvironment.mjs.map +1 -1
  271. package/_mjs/control/TestExecutor.mjs.map +1 -1
  272. package/_mjs/control/TestLogger.mjs +0 -5
  273. package/_mjs/control/TestLogger.mjs.map +1 -1
  274. package/_mjs/control/TestRandom/api.mjs +0 -10
  275. package/_mjs/control/TestRandom/api.mjs.map +1 -1
  276. package/_mjs/control/TestRandom/definition.mjs +56 -113
  277. package/_mjs/control/TestRandom/definition.mjs.map +1 -1
  278. package/_mjs/control/TestRandom.mjs.map +1 -1
  279. package/_mjs/control/TestRenderer/ConsoleRenderer.mjs +0 -10
  280. package/_mjs/control/TestRenderer/ConsoleRenderer.mjs.map +1 -1
  281. package/_mjs/control/TestRunner.mjs +2 -6
  282. package/_mjs/control/TestRunner.mjs.map +1 -1
  283. package/_mjs/data/AssertionData.mjs +0 -5
  284. package/_mjs/data/AssertionData.mjs.map +1 -1
  285. package/_mjs/data/AssertionResult.mjs +0 -2
  286. package/_mjs/data/AssertionResult.mjs.map +1 -1
  287. package/_mjs/data/AssertionValue/api.mjs +1 -6
  288. package/_mjs/data/AssertionValue/api.mjs.map +1 -1
  289. package/_mjs/data/AssertionValue/definition.mjs +0 -2
  290. package/_mjs/data/AssertionValue/definition.mjs.map +1 -1
  291. package/_mjs/data/AssertionValue.mjs.map +1 -1
  292. package/_mjs/data/ExecutedSpec/api.mjs +3 -13
  293. package/_mjs/data/ExecutedSpec/api.mjs.map +1 -1
  294. package/_mjs/data/ExecutedSpec/definition.mjs +5 -13
  295. package/_mjs/data/ExecutedSpec/definition.mjs.map +1 -1
  296. package/_mjs/data/ExecutedSpec.mjs.map +1 -1
  297. package/_mjs/data/ExecutionResult.mjs +0 -16
  298. package/_mjs/data/ExecutionResult.mjs.map +1 -1
  299. package/_mjs/data/FailureDetails.mjs +0 -1
  300. package/_mjs/data/FailureDetails.mjs.map +1 -1
  301. package/_mjs/data/FreeBooleanAlgebra/api.mjs +4 -37
  302. package/_mjs/data/FreeBooleanAlgebra/api.mjs.map +1 -1
  303. package/_mjs/data/FreeBooleanAlgebra/definition.mjs +8 -16
  304. package/_mjs/data/FreeBooleanAlgebra/definition.mjs.map +1 -1
  305. package/_mjs/data/FreeBooleanAlgebra.mjs.map +1 -1
  306. package/_mjs/data/GenFailureDetails.mjs +0 -1
  307. package/_mjs/data/GenFailureDetails.mjs.map +1 -1
  308. package/_mjs/data/LogLine/Fragment.mjs +0 -9
  309. package/_mjs/data/LogLine/Fragment.mjs.map +1 -1
  310. package/_mjs/data/LogLine/Line.mjs +0 -15
  311. package/_mjs/data/LogLine/Line.mjs.map +1 -1
  312. package/_mjs/data/LogLine/Message.mjs +0 -18
  313. package/_mjs/data/LogLine/Message.mjs.map +1 -1
  314. package/_mjs/data/LogLine/Style.mjs +10 -39
  315. package/_mjs/data/LogLine/Style.mjs.map +1 -1
  316. package/_mjs/data/LogLine/api.mjs.map +1 -1
  317. package/_mjs/data/LogLine.mjs.map +1 -1
  318. package/_mjs/data/Render/api.mjs +0 -2
  319. package/_mjs/data/Render/api.mjs.map +1 -1
  320. package/_mjs/data/Render/definition.mjs +2 -8
  321. package/_mjs/data/Render/definition.mjs.map +1 -1
  322. package/_mjs/data/Render.mjs.map +1 -1
  323. package/_mjs/data/RenderParam/api.mjs +3 -10
  324. package/_mjs/data/RenderParam/api.mjs.map +1 -1
  325. package/_mjs/data/RenderParam/definition.mjs +4 -8
  326. package/_mjs/data/RenderParam/definition.mjs.map +1 -1
  327. package/_mjs/data/RenderParam.mjs.map +1 -1
  328. package/_mjs/data/Summary.mjs +0 -1
  329. package/_mjs/data/Summary.mjs.map +1 -1
  330. package/_mjs/data/TestAnnotation/api.mjs +1 -7
  331. package/_mjs/data/TestAnnotation/api.mjs.map +1 -1
  332. package/_mjs/data/TestAnnotation/definition.mjs +4 -8
  333. package/_mjs/data/TestAnnotation/definition.mjs.map +1 -1
  334. package/_mjs/data/TestAnnotation.mjs.map +1 -1
  335. package/_mjs/data/TestAnnotationMap.mjs +2 -8
  336. package/_mjs/data/TestAnnotationMap.mjs.map +1 -1
  337. package/_mjs/data/TestArgs/definition.mjs +0 -1
  338. package/_mjs/data/TestArgs/definition.mjs.map +1 -1
  339. package/_mjs/data/TestArgs.mjs.map +1 -1
  340. package/_mjs/data/TestConfig.mjs +0 -8
  341. package/_mjs/data/TestConfig.mjs.map +1 -1
  342. package/_mjs/data/TestFailure.mjs +4 -12
  343. package/_mjs/data/TestFailure.mjs.map +1 -1
  344. package/_mjs/data/TestSuccess.mjs +4 -10
  345. package/_mjs/data/TestSuccess.mjs.map +1 -1
  346. package/_mjs/data/TestTimeoutException.mjs +0 -1
  347. package/_mjs/data/TestTimeoutException.mjs.map +1 -1
  348. package/_mjs/demo.mjs +0 -3
  349. package/_mjs/demo.mjs.map +1 -1
  350. package/_mjs/util/math.mjs +14 -111
  351. package/_mjs/util/math.mjs.map +1 -1
  352. package/_src/api.ts +2 -2
  353. package/_src/control/AbstractRunnableSpec.ts +0 -3
  354. package/_src/control/Annotations/live.ts +4 -6
  355. package/_src/control/Assertion/api.ts +5 -5
  356. package/_src/control/DefaultTestReporter/render.ts +1 -1
  357. package/_src/control/Gen/api.ts +429 -40
  358. package/_src/control/Gen.ts +0 -9
  359. package/_src/control/RunnableSpec.ts +1 -1
  360. package/_src/control/Sample/api.ts +1 -1
  361. package/_src/control/Spec/api.ts +1 -1
  362. package/_src/control/TestAspect/api.ts +2 -2
  363. package/_src/control/TestClock/definition.ts +9 -8
  364. package/_src/control/TestConsole/definition.ts +1 -1
  365. package/_src/control/TestRunner.ts +0 -3
  366. package/_src/data/AssertionValue/api.ts +1 -1
  367. package/_src/data/ExecutedSpec/api.ts +3 -3
  368. package/_src/data/RenderParam/api.ts +1 -1
  369. package/_src/data/TestAnnotation/api.ts +1 -1
  370. package/_src/data/TestAnnotationMap.ts +2 -2
  371. package/api.d.ts +2 -2
  372. package/control/AbstractRunnableSpec.d.ts +0 -1
  373. package/control/Annotations/live.d.ts +1 -1
  374. package/control/Assertion/api.d.ts +2 -2
  375. package/control/Gen/api.d.ts +207 -24
  376. package/control/Gen.d.ts +0 -7
  377. package/control/TestClock/definition.d.ts +2 -2
  378. package/control/TestConsole/definition.d.ts +3 -3
  379. package/control/TestRandom/definition.d.ts +1 -1
  380. package/control/TestRunner.d.ts +1 -3
  381. package/data/ExecutedSpec/api.d.ts +2 -2
  382. package/data/TestAnnotation/api.d.ts +1 -1
  383. package/data/TestAnnotation/definition.d.ts +2 -2
  384. package/package.json +4 -4
  385. package/_cjs/control/Gen/api/array.cjs +0 -56
  386. package/_cjs/control/Gen/api/array.cjs.map +0 -1
  387. package/_cjs/control/Gen/api/char.cjs +0 -129
  388. package/_cjs/control/Gen/api/char.cjs.map +0 -1
  389. package/_cjs/control/Gen/api/conc.cjs +0 -82
  390. package/_cjs/control/Gen/api/conc.cjs.map +0 -1
  391. package/_cjs/control/Gen/api/double.cjs +0 -82
  392. package/_cjs/control/Gen/api/double.cjs.map +0 -1
  393. package/_cjs/control/Gen/api/float.cjs +0 -55
  394. package/_cjs/control/Gen/api/float.cjs.map +0 -1
  395. package/_cjs/control/Gen/api/string.cjs +0 -106
  396. package/_cjs/control/Gen/api/string.cjs.map +0 -1
  397. package/_cjs/control/Gen/api/struct.cjs +0 -36
  398. package/_cjs/control/Gen/api/struct.cjs.map +0 -1
  399. package/_mjs/control/Gen/api/array.mjs +0 -37
  400. package/_mjs/control/Gen/api/array.mjs.map +0 -1
  401. package/_mjs/control/Gen/api/char.mjs +0 -95
  402. package/_mjs/control/Gen/api/char.mjs.map +0 -1
  403. package/_mjs/control/Gen/api/conc.mjs +0 -57
  404. package/_mjs/control/Gen/api/conc.mjs.map +0 -1
  405. package/_mjs/control/Gen/api/double.mjs +0 -60
  406. package/_mjs/control/Gen/api/double.mjs.map +0 -1
  407. package/_mjs/control/Gen/api/float.mjs +0 -41
  408. package/_mjs/control/Gen/api/float.mjs.map +0 -1
  409. package/_mjs/control/Gen/api/string.mjs +0 -76
  410. package/_mjs/control/Gen/api/string.mjs.map +0 -1
  411. package/_mjs/control/Gen/api/struct.mjs +0 -18
  412. package/_mjs/control/Gen/api/struct.mjs.map +0 -1
  413. package/_src/control/Gen/api/array.ts +0 -34
  414. package/_src/control/Gen/api/char.ts +0 -83
  415. package/_src/control/Gen/api/conc.ts +0 -53
  416. package/_src/control/Gen/api/double.ts +0 -64
  417. package/_src/control/Gen/api/float.ts +0 -36
  418. package/_src/control/Gen/api/string.ts +0 -75
  419. package/_src/control/Gen/api/struct.ts +0 -31
  420. package/control/Gen/api/array.d.ts +0 -18
  421. package/control/Gen/api/char.d.ts +0 -47
  422. package/control/Gen/api/conc.d.ts +0 -25
  423. package/control/Gen/api/double.d.ts +0 -13
  424. package/control/Gen/api/float.d.ts +0 -7
  425. package/control/Gen/api/string.d.ts +0 -48
  426. package/control/Gen/api/struct.d.ts +0 -8
@@ -1,64 +1,211 @@
1
- import type { NumberConstraints } from "./constraints.js";
1
+ import type { EqConstraint, FloatConstraints, LengthConstraints, NumberConstraints } from "./constraints.js";
2
2
  import type { _A, _R } from "@fncts/base/types.js";
3
+ import type { ArrayInt64 } from "@fncts/base/util/rand";
3
4
 
4
5
  import { SortedMap } from "@fncts/base/collection/immutable/SortedMap";
5
6
  import { IllegalArgumentError, NoSuchElementError } from "@fncts/base/data/exceptions";
6
7
  import { tuple } from "@fncts/base/data/function";
7
8
  import { identity } from "@fncts/base/data/function";
8
9
 
9
- import { clamp } from "../../util/math.js";
10
+ import {
11
+ add64,
12
+ clamp,
13
+ computeArrayInt64GenerateRange,
14
+ indexToDouble,
15
+ indexToFloat,
16
+ isStrictlyPositive64,
17
+ isStrictlySmaller64,
18
+ MAX_VALUE_32,
19
+ safeDoubleToIndex,
20
+ safeFloatToIndex,
21
+ substract64,
22
+ Unit64,
23
+ } from "../../util/math.js";
10
24
  import { Sample } from "../Sample.js";
11
25
  import { Sized } from "../Sized.js";
12
26
  import { Gen } from "./definition.js";
13
27
 
28
+ const gapSize = 0xdfff + 1 - 0xd800;
29
+
30
+ /**
31
+ * @tsplus static fncts.test.GenOps size
32
+ */
33
+ export const size: Gen<Sized, number> = Gen.fromIO(Sized.size);
34
+
35
+ /**
36
+ * @tsplus static fncts.test.GenOps uniform
37
+ */
38
+ export const uniform: Gen<never, number> = Gen.fromIOSample(Random.nextDouble.map(Sample.shrinkFractional(0.0)));
39
+
40
+ /**
41
+ * @tsplus static fncts.test.GenOps alphaNumericChar
42
+ */
43
+ export const alphaNumericChar: Gen<never, string> = Gen.weighted(
44
+ [Gen.char({ min: 48, max: 57 }), 10],
45
+ [Gen.char({ min: 65, max: 90 }), 26],
46
+ [Gen.char({ min: 97, max: 122 }), 26],
47
+ );
48
+
49
+ /**
50
+ * @tsplus static fncts.test.GenOps alphaNumericStringWith
51
+ */
52
+ export function alphaNumericStringWith(constraints: LengthConstraints = {}): Gen<Sized, string> {
53
+ return alphaNumericChar.string(constraints);
54
+ }
55
+
56
+ /**
57
+ * @tsplus static fncts.test.GenOps alphaNumericString
58
+ */
59
+ export const alphaNumericString: Gen<Sized, string> = alphaNumericChar.string();
60
+
61
+ /**
62
+ * @tsplus getter fncts.test.Gen array
63
+ */
64
+ export function array<R, A>(self: Gen<R, A>): Gen<R | Sized, ReadonlyArray<A>> {
65
+ return self.arrayWith();
66
+ }
67
+
68
+ /**
69
+ * @tsplus pipeable fncts.test.Gen arrayWith
70
+ */
71
+ export function arrayWith(constraints: LengthConstraints = {}) {
72
+ return <R, A>(g: Gen<R, A>): Gen<R | Sized, ReadonlyArray<A>> => {
73
+ const minLength = constraints.minLength || 0;
74
+ return constraints.maxLength
75
+ ? Gen.intWith({ min: minLength, max: constraints.maxLength }).flatMap((n) => g.arrayN(n))
76
+ : Gen.small((n) => g.arrayN(n), minLength);
77
+ };
78
+ }
79
+
80
+ /**
81
+ * @tsplus pipeable fncts.test.Gen arrayN
82
+ */
83
+ export function arrayN(n: number) {
84
+ return <R, A>(self: Gen<R, A>): Gen<R, ReadonlyArray<A>> => {
85
+ return self.concN(n).map((conc) => conc.toArray);
86
+ };
87
+ }
88
+
89
+ /**
90
+ * @tsplus static fncts.test.GenOps arrayInt64
91
+ */
92
+ export function arrayInt64(min: ArrayInt64, max: ArrayInt64): Gen<never, ArrayInt64> {
93
+ return new Gen(
94
+ Stream.fromIO(computeArrayInt64GenerateRange(min, max, undefined, undefined))
95
+ .flatMap(({ min, max }) => Stream.repeatIO(Random.nextArrayIntBetween(min, max)))
96
+ .map((uncheckedValue) => {
97
+ if (uncheckedValue.data.length === 1) {
98
+ uncheckedValue.data.unshift(0);
99
+ }
100
+ return Just(Sample.shrinkArrayInt64(min)(uncheckedValue as ArrayInt64));
101
+ }),
102
+ );
103
+ }
104
+
105
+ /**
106
+ * @tsplus static fncts.test.GenOps asciiChar
107
+ */
108
+ export const asciiChar: Gen<never, string> = _char(0x00, 0x7f, indexToPrintableIndex);
109
+
110
+ /**
111
+ * @tsplus static fncts.test.GenOps asciiStringWith
112
+ */
113
+ export function asciiStringWith(constraints?: LengthConstraints): Gen<Sized, string> {
114
+ return asciiChar.string(constraints);
115
+ }
116
+
117
+ /**
118
+ * @tsplus static fncts.test.GenOps asciiString
119
+ */
120
+ export const asciiString: Gen<Sized, string> = asciiStringWith();
121
+
122
+ /**
123
+ * @tsplus static fncts.test.GenOps base64Char
124
+ */
125
+ export const base64Char: Gen<never, string> = _char(0, 63, base64ToCharCode);
126
+
14
127
  /**
15
- * @tsplus static fncts.test.GenOps anyBigInt
128
+ * @tsplus static fncts.test.GenOps base64String
16
129
  */
17
- export const anyBigInt: Gen<never, bigint> = fromIOSample(
130
+ export const base64String: Gen<Sized, string> = Gen.base64StringWith();
131
+
132
+ /**
133
+ * @tsplus static fncts.test.GenOps base64StringWith
134
+ */
135
+ export function base64StringWith(constraints: LengthConstraints = {}): Gen<Sized, string> {
136
+ return base64Char.string(constraints);
137
+ }
138
+
139
+ /**
140
+ * @tsplus static fncts.test.GenOps bigInt
141
+ */
142
+ export const bigInt: Gen<never, bigint> = Gen.fromIOSample(
18
143
  Random.nextBigIntBetween(BigInt(-1) << BigInt(255), (BigInt(1) << BigInt(255)) - BigInt(1)).map(
19
144
  Sample.shrinkBigInt(BigInt(0)),
20
145
  ),
21
146
  );
22
147
 
23
148
  /**
24
- * @tsplus static fncts.test.GenOps anyDouble
149
+ * @tsplus static fncts.test.GenOps boolean
25
150
  */
26
- export const anyDouble: Gen<never, number> = Gen.fromIOSample(Random.nextDouble.map(Sample.shrinkFractional(0)));
151
+ export const boolean: Gen<never, boolean> = Gen.defer(Gen.oneOf(Gen.constant(true), Gen.constant(false)));
27
152
 
28
153
  /**
29
- * @tsplus static fncts.test.GenOps anyInt
154
+ * @tsplus static fncts.test.GenOps bounded
30
155
  */
31
- export const anyInt: Gen<never, number> = Gen.fromIOSample(Random.nextInt.map(Sample.shrinkIntegral(0)));
156
+ export function bounded<R, A>(min: number, max: number, f: (n: number) => Gen<R, A>): Gen<R, A> {
157
+ return Gen.intWith({ min, max }).flatMap(f);
158
+ }
32
159
 
33
160
  /**
34
- * @tsplus static fncts.test.GenOps bounded
161
+ * @tsplus static fncts.test.GenOps char
35
162
  */
36
- export function bounded<R, A>(min: number, max: number, f: (n: number) => Gen<R, A>): Gen<R, A> {
37
- return Gen.int({ min, max }).flatMap(f);
163
+ export function char(constraints: Required<NumberConstraints>): Gen<never, string> {
164
+ return _char(constraints.min, constraints.max, identity);
38
165
  }
39
166
 
40
167
  /**
41
- * @tsplus static fncts.test.GenOps constant
168
+ * @tsplus static fncts.test.GenOps char16
42
169
  */
43
- export function constant<A>(a: A): Gen<never, A> {
44
- return new Gen(Stream.succeedNow(Just(Sample.noShrink(a))));
170
+ export const char16: Gen<never, string> = _char(0x0000, 0xffff, indexToPrintableIndex);
171
+
172
+ /**
173
+ * @tsplus pipeable fncts.test.Gen conc
174
+ */
175
+ export function concWith(constraints: LengthConstraints = {}) {
176
+ return <R, A>(self: Gen<R, A>): Gen<R | Sized, Conc<A>> => {
177
+ const minLength = constraints.minLength ?? 0;
178
+ return constraints.maxLength
179
+ ? Gen.intWith({ min: minLength, max: constraints.maxLength }).flatMap((n) => self.concN(n))
180
+ : Gen.small((n) => self.concN(n), minLength);
181
+ };
45
182
  }
46
183
 
47
184
  /**
48
- * @tsplus pipeable fncts.test.Gen flatMap
185
+ * @tsplus getter fncts.test.Gen conc
49
186
  */
50
- export function flatMap<A, R1, B>(f: (a: A) => Gen<R1, B>) {
51
- return <R>(ma: Gen<R, A>): Gen<R | R1, B> => {
52
- return new Gen(
53
- Sample.flatMapStream(ma.sample, (sample) => {
54
- const values = f(sample.value).sample;
55
- const shrinks = new Gen(sample.shrink).flatMap((a) => f(a)).sample;
56
- return values.map((maybeSample) => maybeSample.map((sample) => sample.flatMap((b) => new Sample(b, shrinks))));
57
- }),
187
+ export function conc<R, A>(self: Gen<R, A>): Gen<R | Sized, Conc<A>> {
188
+ return self.conc();
189
+ }
190
+
191
+ /**
192
+ * @tsplus pipeable fncts.test.Gen concN
193
+ */
194
+ export function concN(n: number) {
195
+ return <R, A>(g: Gen<R, A>): Gen<R, Conc<A>> => {
196
+ return Conc.replicate(n, g).foldLeft(Gen.constant(Conc.empty()) as Gen<R, Conc<A>>, (gen, a) =>
197
+ gen.zipWith(a, (as, a) => as.append(a)),
58
198
  );
59
199
  };
60
200
  }
61
201
 
202
+ /**
203
+ * @tsplus static fncts.test.GenOps constant
204
+ */
205
+ export function constant<A>(a: A): Gen<never, A> {
206
+ return new Gen(Stream.succeedNow(Just(Sample.noShrink(a))));
207
+ }
208
+
62
209
  /**
63
210
  * @tsplus static fncts.test.GenOps defer
64
211
  */
@@ -66,11 +213,52 @@ export function defer<R, A>(gen: Lazy<Gen<R, A>>): Gen<R, A> {
66
213
  return Gen.fromIO(IO.succeed(gen)).flatten;
67
214
  }
68
215
 
216
+ /**
217
+ * @tsplus static fncts.test.GenOps double
218
+ */
219
+ export const double: Gen<never, number> = Gen.fromIOSample(Random.nextDouble.map(Sample.shrinkFractional(0)));
220
+
221
+ /**
222
+ * @tsplus static fncts.test.GenOps doubleWith
223
+ */
224
+ export function doubleWith(constraints: NumberConstraints & FloatConstraints = {}): Gen<never, number> {
225
+ const {
226
+ noDefaultInfinity = false,
227
+ noNaN = false,
228
+ min = noDefaultInfinity ? -Number.MAX_VALUE : Number.NEGATIVE_INFINITY,
229
+ max = noDefaultInfinity ? Number.MAX_VALUE : Number.POSITIVE_INFINITY,
230
+ } = constraints;
231
+ return Gen.unwrap(
232
+ IO.gen(function* (_) {
233
+ const minIndex = yield* _(safeDoubleToIndex(min, "min"));
234
+ const maxIndex = yield* _(safeDoubleToIndex(max, "max"));
235
+ if (isStrictlySmaller64(maxIndex, minIndex)) {
236
+ return yield* _(IO.haltNow(new IllegalArgumentError("min must be less than or equal to max", "Gen.double")));
237
+ }
238
+ if (noNaN) {
239
+ return arrayInt64(minIndex, maxIndex).map(indexToDouble);
240
+ }
241
+ const positiveMaxIdx = isStrictlyPositive64(maxIndex);
242
+ const minIndexWithNaN = positiveMaxIdx ? minIndex : substract64(minIndex, Unit64);
243
+ const maxIndexWithNaN = positiveMaxIdx ? add64(maxIndex, Unit64) : maxIndex;
244
+ return arrayInt64(minIndexWithNaN, maxIndexWithNaN).map((index) => {
245
+ if (isStrictlySmaller64(maxIndex, index) || isStrictlySmaller64(index, minIndex)) return Number.NaN;
246
+ else return indexToDouble(index);
247
+ });
248
+ }),
249
+ );
250
+ }
251
+
69
252
  /**
70
253
  * @tsplus static fncts.test.GenOps empty
71
254
  */
72
255
  export const empty: Gen<never, never> = new Gen(Stream.empty);
73
256
 
257
+ /**
258
+ * @tsplus static fncts.test.GenOps exponential
259
+ */
260
+ export const exponential: Gen<never, number> = Gen.uniform.map((n) => -Math.log(1 - n));
261
+
74
262
  /**
75
263
  * @tsplus pipeable fncts.test.Gen filter
76
264
  */
@@ -91,6 +279,21 @@ export function filterNot<A>(p: Predicate<A>) {
91
279
  };
92
280
  }
93
281
 
282
+ /**
283
+ * @tsplus pipeable fncts.test.Gen flatMap
284
+ */
285
+ export function flatMap<A, R1, B>(f: (a: A) => Gen<R1, B>) {
286
+ return <R>(ma: Gen<R, A>): Gen<R | R1, B> => {
287
+ return new Gen(
288
+ Sample.flatMapStream(ma.sample, (sample) => {
289
+ const values = f(sample.value).sample;
290
+ const shrinks = new Gen(sample.shrink).flatMap((a) => f(a)).sample;
291
+ return values.map((maybeSample) => maybeSample.map((sample) => sample.flatMap((b) => new Sample(b, shrinks))));
292
+ }),
293
+ );
294
+ };
295
+ }
296
+
94
297
  /**
95
298
  * @tsplus getter fncts.test.Gen flatten
96
299
  */
@@ -112,16 +315,77 @@ export function fromIOSample<R, A>(effect: IO<R, never, Sample<R, A>>): Gen<R, A
112
315
  return new Gen(Stream.fromIO(effect.map(Maybe.just)));
113
316
  }
114
317
 
318
+ /**
319
+ * @tsplus static fncts.test.GenOps floatWith
320
+ */
321
+ export function floatWith(constraints: NumberConstraints & FloatConstraints = {}): Gen<never, number> {
322
+ const {
323
+ noDefaultInfinity = false,
324
+ min = noDefaultInfinity ? -MAX_VALUE_32 : Number.NEGATIVE_INFINITY,
325
+ max = noDefaultInfinity ? MAX_VALUE_32 : Number.POSITIVE_INFINITY,
326
+ noNaN = false,
327
+ } = constraints;
328
+ return Gen.unwrap(
329
+ IO.gen(function* (_) {
330
+ const minIndex = yield* _(safeFloatToIndex(min, "min"));
331
+ const maxIndex = yield* _(safeFloatToIndex(max, "max"));
332
+ if (minIndex > maxIndex) {
333
+ return yield* _(
334
+ IO.haltNow(new Error("Gen.float constraints.min must be less than or equal to constraints.max")),
335
+ );
336
+ }
337
+ if (noNaN) {
338
+ return Gen.intWith({ min: minIndex, max: maxIndex }).map(indexToFloat);
339
+ }
340
+ const minIndexWithNaN = maxIndex > 0 ? minIndex : minIndex - 1;
341
+ const maxIndexWithNaN = maxIndex > 0 ? maxIndex + 1 : maxIndex;
342
+ return Gen.intWith({ min: minIndexWithNaN, max: maxIndexWithNaN }).map((index) => {
343
+ if (index > maxIndex || index < minIndex) return Number.NaN;
344
+ else return indexToFloat(index);
345
+ });
346
+ }),
347
+ );
348
+ }
349
+
350
+ /**
351
+ * @tsplus static fncts.test.GenOps fullUnicodeChar
352
+ */
353
+ export const fullUnicodeChar: Gen<never, string> = _char(0x0000, 0x10ffff - gapSize, unicodeToCharCode);
354
+
355
+ /**
356
+ * @tsplus static fncts.test.GenOps fullUnicodeString
357
+ */
358
+ export function fullUnicodeString(constraints: LengthConstraints = {}): Gen<Sized, string> {
359
+ return fullUnicodeChar.string(constraints);
360
+ }
361
+
362
+ /**
363
+ * @tsplus static fncts.test.GenOps hexChar
364
+ */
365
+ export const hexChar: Gen<never, string> = _char(0, 15, hexToCharCode);
366
+
367
+ /**
368
+ * @tsplus static fncts.test.GenOps hexString
369
+ */
370
+ export function hexString(constraints: LengthConstraints = {}): Gen<Sized, string> {
371
+ return hexChar.string(constraints);
372
+ }
373
+
115
374
  /**
116
375
  * @tsplus static fncts.test.GenOps int
117
376
  */
118
- export function int(constraints: NumberConstraints = {}): Gen<never, number> {
377
+ export const int: Gen<never, number> = Gen.fromIOSample(Random.nextInt.map(Sample.shrinkIntegral(0)));
378
+
379
+ /**
380
+ * @tsplus static fncts.test.GenOps intWith
381
+ */
382
+ export function intWith(constraints: NumberConstraints = {}): Gen<never, number> {
119
383
  return Gen.fromIOSample(
120
384
  IO.defer(() => {
121
385
  const min = constraints.min ?? -0x80000000;
122
386
  const max = constraints.max ?? 0x7fffffff;
123
387
  if (min > max || min < Number.MIN_SAFE_INTEGER || max > Number.MAX_SAFE_INTEGER) {
124
- return IO.haltNow(new IllegalArgumentError("invalid bounds", "Gen.int"));
388
+ return IO.haltNow(new IllegalArgumentError("invalid bounds", "Gen.intWith"));
125
389
  } else {
126
390
  return Random.nextIntBetween(min, max).map(Sample.shrinkIntegral(min));
127
391
  }
@@ -154,16 +418,6 @@ export function mapIO<A, R1, B>(f: (a: A) => IO<R1, never, B>) {
154
418
  };
155
419
  }
156
420
 
157
- /**
158
- * @tsplus static fncts.test.GenOps exponential
159
- */
160
- export const exponential: Gen<never, number> = Gen.uniform.map((n) => -Math.log(1 - n));
161
-
162
- /**
163
- * @tsplus static fncts.test.GenOps size
164
- */
165
- export const size: Gen<Sized, number> = Gen.fromIO(Sized.size);
166
-
167
421
  /**
168
422
  * @tsplus static fncts.test.GenOps medium
169
423
  */
@@ -198,7 +452,7 @@ export function memo<R, A>(builder: (maxDepth: number) => Gen<R, A>): (maxDepth?
198
452
  * @tsplus static fncts.test.GenOps nat
199
453
  */
200
454
  export function nat(max = 0x7fffffff): Gen<unknown, number> {
201
- return Gen.int({ min: 0, max: clamp(max, 0, max) });
455
+ return Gen.intWith({ min: 0, max: clamp(max, 0, max) });
202
456
  }
203
457
 
204
458
  /**
@@ -206,9 +460,28 @@ export function nat(max = 0x7fffffff): Gen<unknown, number> {
206
460
  */
207
461
  export function oneOf<A extends ReadonlyArray<Gen<any, any>>>(...gens: A): Gen<_R<A[number]>, _A<A[number]>> {
208
462
  if (gens.isEmpty()) return Gen.empty;
209
- else return Gen.int({ min: 0, max: gens.length - 1 }).flatMap((i) => gens[i]!);
463
+ else return Gen.intWith({ min: 0, max: gens.length - 1 }).flatMap((i) => gens[i]!);
464
+ }
465
+
466
+ export function partial<P extends Record<string, Gen<any, any>>>(
467
+ properties: P,
468
+ ): Gen<
469
+ _R<P[keyof P]>,
470
+ Partial<{
471
+ readonly [K in keyof P]: _A<P[K]>;
472
+ }>
473
+ > {
474
+ const entries = Object.entries(properties);
475
+ return entries.foldLeft(Gen.constant({}) as Gen<any, any>, (b, [k, gen]) =>
476
+ Gen.unwrap(Random.nextBoolean.ifIO(IO.succeed(b.zipWith(gen, (r, a) => ({ ...r, [k]: a }))), IO.succeed(b))),
477
+ );
210
478
  }
211
479
 
480
+ /**
481
+ * @tsplus static fncts.test.GenOps printableChar
482
+ */
483
+ export const printableChar: Gen<never, string> = Gen.char({ min: 0x20, max: 0x7e });
484
+
212
485
  /**
213
486
  * @tsplus pipeable fncts.test.Gen reshrink
214
487
  */
@@ -239,6 +512,48 @@ export function small<R, A>(f: (size: number) => Gen<R, A>, min = 0): Gen<R | Si
239
512
  .flatMap(f);
240
513
  }
241
514
 
515
+ /**
516
+ * @tsplus static fncts.test.GenOps string16
517
+ */
518
+ export function string16(constraints: LengthConstraints = {}): Gen<Sized, string> {
519
+ return char16.string(constraints);
520
+ }
521
+
522
+ /**
523
+ * @tsplus pipeable fncts.test.Gen string
524
+ */
525
+ export function string(constraints: LengthConstraints = {}) {
526
+ return <R>(char: Gen<R, string>): Gen<R | Sized, string> => {
527
+ const min = constraints.minLength || 0;
528
+ return constraints.maxLength
529
+ ? Gen.bounded(min, constraints.maxLength, (n) => char.stringN(n))
530
+ : Gen.small((n) => char.stringN(n), min);
531
+ };
532
+ }
533
+
534
+ /**
535
+ * @tsplus pipeable fncts.test.Gen stringN
536
+ */
537
+ export function stringN(n: number) {
538
+ return <R>(char: Gen<R, string>): Gen<R, string> => {
539
+ return char.arrayN(n).map((arr) => arr.join(""));
540
+ };
541
+ }
542
+
543
+ export function struct<P extends Record<string, Gen<any, any>>>(
544
+ properties: P,
545
+ ): Gen<
546
+ _R<P[keyof P]>,
547
+ {
548
+ readonly [K in keyof P]: _A<P[K]>;
549
+ }
550
+ > {
551
+ const entries = Object.entries(properties);
552
+ return entries.foldLeft(Gen.constant({}) as Gen<any, any>, (b, [k, gen]) =>
553
+ b.zipWith(gen, (out, a) => ({ ...out, [k]: a })),
554
+ );
555
+ }
556
+
242
557
  /**
243
558
  * @tsplus static fncts.test.GenOps unfoldGen
244
559
  */
@@ -255,9 +570,49 @@ export function unfoldGenN<S, R, A>(n: number, s: S, f: (s: S) => Gen<R, readonl
255
570
  }
256
571
 
257
572
  /**
258
- * @tsplus static fncts.test.GenOps uniform
573
+ * @tsplus static fncts.test.GenOps unicodeChar
259
574
  */
260
- export const uniform: Gen<never, number> = Gen.fromIOSample(Random.nextDouble.map(Sample.shrinkFractional(0.0)));
575
+ export const unicodeChar: Gen<never, string> = _char(0x0000, 0xffff - gapSize, unicodeToCharCode);
576
+
577
+ /**
578
+ * @tsplus static fncts.test.GenOps unicodeString
579
+ */
580
+ export function unicodeString(constraints: LengthConstraints = {}): Gen<Sized, string> {
581
+ return unicodeChar.string(constraints);
582
+ }
583
+
584
+ /**
585
+ * @tsplus pipeable fncts.test.Gen uniqueArray
586
+ */
587
+ export function uniqueArray<A>(constraints: LengthConstraints & EqConstraint<A> = {}) {
588
+ return <R>(gen: Gen<R, A>): Gen<Sized | R, ReadonlyArray<A>> => {
589
+ return gen.uniqueConc(constraints).map((conc) => conc.toArray);
590
+ };
591
+ }
592
+
593
+ /**
594
+ * @tsplus pipeable fncts.test.Gen uniqueConc
595
+ */
596
+ export function uniqueConc<A>(constraints: LengthConstraints & EqConstraint<A> = {}) {
597
+ return <R>(self: Gen<R, A>): Gen<Sized | R, Conc<A>> => {
598
+ const minLength = constraints.minLength ?? 0;
599
+ const eq = constraints.eq ?? Eq({ equals: (y) => (x) => Equatable.strictEquals(x, y) });
600
+ return constraints.maxLength
601
+ ? Gen.bounded(minLength, constraints.maxLength, (n) => self.uniqueConcN(n, eq))
602
+ : Gen.small((n) => self.uniqueConcN(n, eq), minLength);
603
+ };
604
+ }
605
+
606
+ /**
607
+ * @tsplus pipeable fncts.test.Gen uniqueConcN
608
+ */
609
+ export function uniqueConcN<A>(n: number, /** @tsplus auto */ E: Eq<A>) {
610
+ return <R>(self: Gen<R, A>): Gen<R, Conc<A>> => {
611
+ return Conc.replicate(n, self).foldLeft(Gen.constant(Conc.empty()) as Gen<R, Conc<A>>, (gen, a) =>
612
+ gen.zipWith(a, (as, a) => (as.elem(a, E) ? as : as.append(a))),
613
+ );
614
+ };
615
+ }
261
616
 
262
617
  /**
263
618
  * @tsplus static fncts.test.GenOps unwrap
@@ -272,7 +627,7 @@ export function unwrap<R, R1, A>(effect: URIO<R, Gen<R1, A>>): Gen<R | R1, A> {
272
627
  export function weighted<R, A>(...gens: ReadonlyArray<readonly [Gen<R, A>, number]>): Gen<R, A> {
273
628
  const sum = gens.map(([, weight]) => weight).foldLeft(0, (b, a) => b + a);
274
629
  const [map] = gens.foldLeft(tuple(SortedMap.make<number, Gen<R, A>>(Number.Ord), 0), ([map, acc], [gen, d]) => {
275
- if ((acc + d) / sum > acc / sum) return tuple(map.insert((acc + d) / sum, gen), acc + d);
630
+ if ((acc + d) / sum > acc / sum) return tuple(map.set((acc + d) / sum, gen), acc + d);
276
631
  else return tuple(map, acc);
277
632
  });
278
633
  return Gen.uniform.flatMap((n) =>
@@ -290,3 +645,37 @@ export function zipWith<A, R1, B, C>(that: Gen<R1, B>, f: (a: A, b: B) => C) {
290
645
  return self.flatMap((a) => that.map((b) => f(a, b)));
291
646
  };
292
647
  }
648
+
649
+ /**
650
+ * @tsplus pipeable fncts.test.Gen zip
651
+ */
652
+ export function zip<R1, B>(that: Gen<R1, B>) {
653
+ return <R, A>(self: Gen<R, A>): Gen<R | R1, readonly [A, B]> => {
654
+ return self.zipWith(that, tuple);
655
+ };
656
+ }
657
+
658
+ function _char(min: number, max: number, mapToCode: (v: number) => number): Gen<never, string> {
659
+ return Gen.intWith({ min, max }).map((n) => String.fromCharCode(mapToCode(n)));
660
+ }
661
+
662
+ function indexToPrintableIndex(v: number): number {
663
+ return v < 95 ? v + 0x20 : v <= 0x7e ? v - 95 : v;
664
+ }
665
+
666
+ function base64ToCharCode(v: number): number {
667
+ if (v < 26) return v + 65; // A-Z
668
+ if (v < 52) return v + 97 - 26; // a-z
669
+ if (v < 62) return v + 48 - 52; // 0-9
670
+ return v === 62 ? 43 : 47; // +/
671
+ }
672
+
673
+ function hexToCharCode(v: number): number {
674
+ return v < 10
675
+ ? v + 48 // 0-9
676
+ : v + 97 - 10; // a-f
677
+ }
678
+
679
+ function unicodeToCharCode(v: number): number {
680
+ return v < 0xd800 ? indexToPrintableIndex(v) : v + gapSize;
681
+ }
@@ -3,12 +3,3 @@ export * from "./Gen/api.js";
3
3
  export * from "./Gen/constraints.js";
4
4
  export * from "./Gen/definition.js";
5
5
  // codegen:end
6
- // codegen:start { preset: barrel, include: ./Gen/api/*.ts }
7
- export * from "./Gen/api/array.js";
8
- export * from "./Gen/api/char.js";
9
- export * from "./Gen/api/conc.js";
10
- export * from "./Gen/api/double.js";
11
- export * from "./Gen/api/float.js";
12
- export * from "./Gen/api/string.js";
13
- export * from "./Gen/api/struct.js";
14
- // codegen:end
@@ -13,7 +13,7 @@ export abstract class RunnableSpec<R, E> extends AbstractRunnableSpec<R, E> {
13
13
  const self = this;
14
14
  return Do((_) => {
15
15
  const results = _(self.runSpec(spec));
16
- const hasFailures = results.exists(
16
+ const hasFailures = results.some(
17
17
  matchTag(
18
18
  {
19
19
  Test: ({ test }) => test.isLeft(),
@@ -256,7 +256,7 @@ export function flatMapStream<R, A, R1, B>(
256
256
  )
257
257
  .foldLeft(
258
258
  Channel.unit as Channel<R1, unknown, unknown, unknown, never, Conc<Either<boolean, B>>, unknown>,
259
- (a, b) => a.apSecond(b),
259
+ (a, b) => a.zipRight(b),
260
260
  ),
261
261
  constVoid,
262
262
  constVoid,
@@ -153,7 +153,7 @@ export function filterLabels(f: (label: string) => boolean) {
153
153
  */
154
154
  export function filterTags(f: (tag: string) => boolean) {
155
155
  return <R, E, T>(spec: PSpec<R, E, T>): Maybe<PSpec<R, E, T>> => {
156
- return spec.filterAnnotations(TestAnnotation.Tagged, (v) => v.exists(f));
156
+ return spec.filterAnnotations(TestAnnotation.Tagged, (v) => v.some(f));
157
157
  };
158
158
  }
159
159
 
@@ -35,7 +35,7 @@ export function after<R, E, A>(effect: IO<R, E, A>): TestAspect<R, E> {
35
35
  return perTest<R, E>((test) =>
36
36
  test.result
37
37
  .zipWith(effect.catchAllCause((cause) => IO.fail(new RuntimeFailure(cause))).result, (ex0, ex1) =>
38
- ex0.apFirst(ex1),
38
+ ex0.zipLeft(ex1),
39
39
  )
40
40
  .flatMap(IO.fromExitNow),
41
41
  );
@@ -60,7 +60,7 @@ export function aroundAll<R, E, A, R1>(
60
60
  }
61
61
 
62
62
  export function before<R0>(effect: IO<R0, never, any>): TestAspect<R0, never> {
63
- return perTest<R0, never>((test) => effect.apSecond(test));
63
+ return perTest<R0, never>((test) => effect.zipRight(test));
64
64
  }
65
65
 
66
66
  export function beforeAll<R0, E0>(effect: IO<R0, E0, any>): TestAspect<R0, E0> {