@fncts/test 0.0.19 → 0.0.21

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