@fncts/test 0.0.21 → 0.0.23

Sign up to get free protection for your applications and to get access to all the features.
Files changed (433) 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 +7 -11
  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 +4 -16
  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 +3 -9
  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 +12 -24
  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 +5 -6
  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 +3 -6
  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 +3 -3
  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 +10 -12
  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/AssertionIO/definition.ts +2 -4
  357. package/_src/control/DefaultTestReporter/render.ts +1 -1
  358. package/_src/control/Gen/api.ts +429 -40
  359. package/_src/control/Gen.ts +0 -9
  360. package/_src/control/RunnableSpec.ts +1 -1
  361. package/_src/control/Sample/api.ts +1 -1
  362. package/_src/control/Spec/api.ts +1 -1
  363. package/_src/control/TestAspect/api.ts +2 -2
  364. package/_src/control/TestClock/definition.ts +9 -8
  365. package/_src/control/TestConsole/definition.ts +1 -1
  366. package/_src/control/TestRunner.ts +0 -3
  367. package/_src/data/AssertionData.ts +1 -1
  368. package/_src/data/AssertionValue/api.ts +1 -1
  369. package/_src/data/AssertionValue/definition.ts +1 -1
  370. package/_src/data/ExecutedSpec/api.ts +3 -3
  371. package/_src/data/RenderParam/api.ts +1 -1
  372. package/_src/data/TestAnnotation/api.ts +1 -1
  373. package/_src/data/TestAnnotation/definition.ts +7 -4
  374. package/_src/data/TestAnnotationMap.ts +2 -2
  375. package/api.d.ts +2 -2
  376. package/control/AbstractRunnableSpec.d.ts +0 -1
  377. package/control/Annotations/live.d.ts +1 -1
  378. package/control/Assertion/api.d.ts +2 -2
  379. package/control/AssertionIO/definition.d.ts +1 -1
  380. package/control/Gen/api.d.ts +207 -24
  381. package/control/Gen.d.ts +0 -7
  382. package/control/TestClock/definition.d.ts +2 -2
  383. package/control/TestConsole/definition.d.ts +3 -3
  384. package/control/TestRandom/definition.d.ts +1 -1
  385. package/control/TestRunner.d.ts +1 -3
  386. package/data/AssertionData.d.ts +1 -1
  387. package/data/AssertionValue/definition.d.ts +1 -1
  388. package/data/ExecutedSpec/api.d.ts +2 -2
  389. package/data/TestAnnotation/api.d.ts +1 -1
  390. package/data/TestAnnotation/definition.d.ts +8 -4
  391. package/package.json +4 -4
  392. package/_cjs/control/Gen/api/array.cjs +0 -56
  393. package/_cjs/control/Gen/api/array.cjs.map +0 -1
  394. package/_cjs/control/Gen/api/char.cjs +0 -129
  395. package/_cjs/control/Gen/api/char.cjs.map +0 -1
  396. package/_cjs/control/Gen/api/conc.cjs +0 -82
  397. package/_cjs/control/Gen/api/conc.cjs.map +0 -1
  398. package/_cjs/control/Gen/api/double.cjs +0 -82
  399. package/_cjs/control/Gen/api/double.cjs.map +0 -1
  400. package/_cjs/control/Gen/api/float.cjs +0 -55
  401. package/_cjs/control/Gen/api/float.cjs.map +0 -1
  402. package/_cjs/control/Gen/api/string.cjs +0 -106
  403. package/_cjs/control/Gen/api/string.cjs.map +0 -1
  404. package/_cjs/control/Gen/api/struct.cjs +0 -36
  405. package/_cjs/control/Gen/api/struct.cjs.map +0 -1
  406. package/_mjs/control/Gen/api/array.mjs +0 -37
  407. package/_mjs/control/Gen/api/array.mjs.map +0 -1
  408. package/_mjs/control/Gen/api/char.mjs +0 -95
  409. package/_mjs/control/Gen/api/char.mjs.map +0 -1
  410. package/_mjs/control/Gen/api/conc.mjs +0 -57
  411. package/_mjs/control/Gen/api/conc.mjs.map +0 -1
  412. package/_mjs/control/Gen/api/double.mjs +0 -60
  413. package/_mjs/control/Gen/api/double.mjs.map +0 -1
  414. package/_mjs/control/Gen/api/float.mjs +0 -41
  415. package/_mjs/control/Gen/api/float.mjs.map +0 -1
  416. package/_mjs/control/Gen/api/string.mjs +0 -76
  417. package/_mjs/control/Gen/api/string.mjs.map +0 -1
  418. package/_mjs/control/Gen/api/struct.mjs +0 -18
  419. package/_mjs/control/Gen/api/struct.mjs.map +0 -1
  420. package/_src/control/Gen/api/array.ts +0 -34
  421. package/_src/control/Gen/api/char.ts +0 -83
  422. package/_src/control/Gen/api/conc.ts +0 -53
  423. package/_src/control/Gen/api/double.ts +0 -64
  424. package/_src/control/Gen/api/float.ts +0 -36
  425. package/_src/control/Gen/api/string.ts +0 -75
  426. package/_src/control/Gen/api/struct.ts +0 -31
  427. package/control/Gen/api/array.d.ts +0 -18
  428. package/control/Gen/api/char.d.ts +0 -47
  429. package/control/Gen/api/conc.d.ts +0 -25
  430. package/control/Gen/api/double.d.ts +0 -13
  431. package/control/Gen/api/float.d.ts +0 -7
  432. package/control/Gen/api/string.d.ts +0 -48
  433. 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> {