@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
@@ -67,7 +67,6 @@ export class ExecutionResult {
67
67
  readonly annotations: List<TestAnnotationMap>,
68
68
  readonly lines: List<Line>,
69
69
  ) {}
70
-
71
70
  withAnnotations(annotations: List<TestAnnotationMap>): ExecutionResult {
72
71
  return new ExecutionResult(this.resultType, this.label, this.status, this.offset, annotations, this.lines);
73
72
  }
@@ -84,61 +83,65 @@ export function rendered(
84
83
  }
85
84
 
86
85
  /**
87
- * @tsplus operator fncts.test.ExecutionResult &&
86
+ * @tsplus pipeable-operator fncts.test.ExecutionResult &&
88
87
  */
89
- export function and_(self: ExecutionResult, that: ExecutionResult): ExecutionResult {
90
- if (self.status._tag === "Ignored") {
91
- return that;
92
- }
93
- if (that.status._tag === "Ignored") {
94
- return self;
95
- }
96
- if (self.status._tag === "Failed" && that.status._tag === "Failed") {
97
- return new ExecutionResult(
98
- self.resultType,
99
- self.label,
100
- self.status,
101
- self.offset,
102
- self.annotations,
103
- self.lines.concat(that.lines.tail.getOrElse(Nil())),
104
- );
105
- }
106
- if (self.status._tag === "Passed") {
107
- return that;
108
- }
109
- if (that.status._tag === "Passed") {
110
- return self;
111
- }
112
- throw new Error("BUG");
88
+ export function and(that: ExecutionResult) {
89
+ return (self: ExecutionResult): ExecutionResult => {
90
+ if (self.status._tag === "Ignored") {
91
+ return that;
92
+ }
93
+ if (that.status._tag === "Ignored") {
94
+ return self;
95
+ }
96
+ if (self.status._tag === "Failed" && that.status._tag === "Failed") {
97
+ return new ExecutionResult(
98
+ self.resultType,
99
+ self.label,
100
+ self.status,
101
+ self.offset,
102
+ self.annotations,
103
+ self.lines.concat(that.lines.tail.getOrElse(Nil())),
104
+ );
105
+ }
106
+ if (self.status._tag === "Passed") {
107
+ return that;
108
+ }
109
+ if (that.status._tag === "Passed") {
110
+ return self;
111
+ }
112
+ throw new Error("BUG");
113
+ };
113
114
  }
114
115
 
115
116
  /**
116
- * @tsplus operator fncts.test.ExecutionResult ||
117
+ * @tsplus pipeable-operator fncts.test.ExecutionResult ||
117
118
  */
118
- export function or_(self: ExecutionResult, that: ExecutionResult): ExecutionResult {
119
- if (self.status._tag === "Ignored") {
120
- return that;
121
- }
122
- if (that.status._tag === "Ignored") {
123
- return self;
124
- }
125
- if (self.status._tag === "Failed" && that.status._tag === "Failed") {
126
- return new ExecutionResult(
127
- self.resultType,
128
- self.label,
129
- self.status,
130
- self.offset,
131
- self.annotations,
132
- self.lines.concat(that.lines.tail.getOrElse(Nil())),
133
- );
134
- }
135
- if (self.status._tag === "Passed") {
136
- return self;
137
- }
138
- if (that.status._tag === "Passed") {
139
- return that;
140
- }
141
- throw new Error("BUG");
119
+ export function or(that: ExecutionResult) {
120
+ return (self: ExecutionResult): ExecutionResult => {
121
+ if (self.status._tag === "Ignored") {
122
+ return that;
123
+ }
124
+ if (that.status._tag === "Ignored") {
125
+ return self;
126
+ }
127
+ if (self.status._tag === "Failed" && that.status._tag === "Failed") {
128
+ return new ExecutionResult(
129
+ self.resultType,
130
+ self.label,
131
+ self.status,
132
+ self.offset,
133
+ self.annotations,
134
+ self.lines.concat(that.lines.tail.getOrElse(Nil())),
135
+ );
136
+ }
137
+ if (self.status._tag === "Passed") {
138
+ return self;
139
+ }
140
+ if (that.status._tag === "Passed") {
141
+ return that;
142
+ }
143
+ throw new Error("BUG");
144
+ };
142
145
  }
143
146
 
144
147
  /**
@@ -1,30 +1,36 @@
1
1
  import { And, FreeBooleanAlgebra, FreeBooleanAlgebraTag, Not, Or, Value } from "./definition.js";
2
2
 
3
3
  /**
4
- * @tsplus fluent fncts.test.FreeBooleanAlgebra and
5
- * @tsplus operator fncts.test.FreeBooleanAlgebra &&
4
+ * @tsplus pipeable fncts.test.FreeBooleanAlgebra and
5
+ * @tsplus pipeable-operator fncts.test.FreeBooleanAlgebra &&
6
6
  */
7
- export function and_<A>(left: FreeBooleanAlgebra<A>, right: FreeBooleanAlgebra<A>): FreeBooleanAlgebra<A> {
8
- return new And(left, right);
7
+ export function and<A>(right: FreeBooleanAlgebra<A>) {
8
+ return (left: FreeBooleanAlgebra<A>): FreeBooleanAlgebra<A> => {
9
+ return new And(left, right);
10
+ };
9
11
  }
10
12
 
11
13
  /**
12
- * @tsplus fluent fncts.test.FreeBooleanAlgebra flatMap
14
+ * @tsplus pipeable fncts.test.FreeBooleanAlgebra flatMap
13
15
  */
14
- export function flatMap_<A, B>(self: FreeBooleanAlgebra<A>, f: (a: A) => FreeBooleanAlgebra<B>): FreeBooleanAlgebra<B> {
15
- return self.fold({
16
- Value: f,
17
- And: (l, r) => l && r,
18
- Or: (l, r) => l || r,
19
- Not: (v) => v.invert,
20
- });
16
+ export function flatMap<A, B>(f: (a: A) => FreeBooleanAlgebra<B>) {
17
+ return (self: FreeBooleanAlgebra<A>): FreeBooleanAlgebra<B> => {
18
+ return self.fold({
19
+ Value: f,
20
+ And: (l, r) => l && r,
21
+ Or: (l, r) => l || r,
22
+ Not: (v) => v.invert,
23
+ });
24
+ };
21
25
  }
22
26
 
23
27
  /**
24
- * @tsplus fluent fncts.test.FreeBooleanAlgebra map
28
+ * @tsplus pipeable fncts.test.FreeBooleanAlgebra map
25
29
  */
26
- export function map_<A, B>(self: FreeBooleanAlgebra<A>, f: (a: A) => B): FreeBooleanAlgebra<B> {
27
- return self.flatMap((a) => FreeBooleanAlgebra.success(f(a)));
30
+ export function map<A, B>(f: (a: A) => B) {
31
+ return (self: FreeBooleanAlgebra<A>): FreeBooleanAlgebra<B> => {
32
+ return self.flatMap((a) => FreeBooleanAlgebra.success(f(a)));
33
+ };
28
34
  }
29
35
 
30
36
  /**
@@ -69,58 +75,60 @@ export function failures<A>(self: FreeBooleanAlgebra<A>): Maybe<FreeBooleanAlgeb
69
75
  }
70
76
 
71
77
  /**
72
- * @tsplus fluent fncts.test.FreeBooleanAlgebra foldEval
78
+ * @tsplus pipeable fncts.test.FreeBooleanAlgebra foldEval
73
79
  */
74
- export function foldEval_<A, B>(
75
- self: FreeBooleanAlgebra<A>,
76
- cases: {
77
- Value: (value: A) => B;
78
- And: (left: B, right: B) => B;
79
- Or: (left: B, right: B) => B;
80
- Not: (value: B) => B;
81
- },
82
- ): Eval<B> {
83
- return Eval.defer(() => {
84
- switch (self._tag) {
85
- case FreeBooleanAlgebraTag.Value:
86
- return Eval.now(cases.Value(self.value));
87
- case FreeBooleanAlgebraTag.And:
88
- return self.left.foldEval(cases).zipWith(self.right.foldEval(cases), cases.And);
89
- case FreeBooleanAlgebraTag.Or:
90
- return self.left.foldEval(cases).zipWith(self.right.foldEval(cases), cases.Or);
91
- case FreeBooleanAlgebraTag.Not:
92
- return self.result.foldEval(cases).map(cases.Not);
93
- }
94
- });
80
+ export function foldEval<A, B>(cases: {
81
+ Value: (value: A) => B;
82
+ And: (left: B, right: B) => B;
83
+ Or: (left: B, right: B) => B;
84
+ Not: (value: B) => B;
85
+ }) {
86
+ return (self: FreeBooleanAlgebra<A>): Eval<B> => {
87
+ return Eval.defer(() => {
88
+ switch (self._tag) {
89
+ case FreeBooleanAlgebraTag.Value:
90
+ return Eval.now(cases.Value(self.value));
91
+ case FreeBooleanAlgebraTag.And:
92
+ return self.left.foldEval(cases).zipWith(self.right.foldEval(cases), cases.And);
93
+ case FreeBooleanAlgebraTag.Or:
94
+ return self.left.foldEval(cases).zipWith(self.right.foldEval(cases), cases.Or);
95
+ case FreeBooleanAlgebraTag.Not:
96
+ return self.result.foldEval(cases).map(cases.Not);
97
+ }
98
+ });
99
+ };
95
100
  }
96
101
 
97
102
  /**
98
- * @tsplus fluent fncts.test.FreeBooleanAlgebra fold
103
+ * @tsplus pipeable fncts.test.FreeBooleanAlgebra fold
99
104
  */
100
- export function fold_<A, B>(
101
- self: FreeBooleanAlgebra<A>,
102
- cases: {
103
- Value: (value: A) => B;
104
- And: (left: B, right: B) => B;
105
- Or: (left: B, right: B) => B;
106
- Not: (value: B) => B;
107
- },
108
- ): B {
109
- return self.foldEval(cases).run;
105
+ export function fold<A, B>(cases: {
106
+ Value: (value: A) => B;
107
+ And: (left: B, right: B) => B;
108
+ Or: (left: B, right: B) => B;
109
+ Not: (value: B) => B;
110
+ }) {
111
+ return (self: FreeBooleanAlgebra<A>): B => {
112
+ return self.foldEval(cases).run;
113
+ };
110
114
  }
111
115
 
112
116
  /**
113
- * @tsplus fluent fncts.test.FreeBooleanAlgebra iff
117
+ * @tsplus pipeable fncts.test.FreeBooleanAlgebra iff
114
118
  */
115
- export function iff_<A>(left: FreeBooleanAlgebra<A>, right: FreeBooleanAlgebra<A>): FreeBooleanAlgebra<A> {
116
- return left.implies(right) && right.implies(left);
119
+ export function iff<A>(right: FreeBooleanAlgebra<A>) {
120
+ return (left: FreeBooleanAlgebra<A>): FreeBooleanAlgebra<A> => {
121
+ return left.implies(right) && right.implies(left);
122
+ };
117
123
  }
118
124
 
119
125
  /**
120
- * @tsplus fluent fncts.test.FreeBooleanAlgebra implies
126
+ * @tsplus pipeable fncts.test.FreeBooleanAlgebra implies
121
127
  */
122
- export function implies_<A>(left: FreeBooleanAlgebra<A>, right: FreeBooleanAlgebra<A>): FreeBooleanAlgebra<A> {
123
- return left.invert || right;
128
+ export function implies<A>(right: FreeBooleanAlgebra<A>) {
129
+ return (left: FreeBooleanAlgebra<A>): FreeBooleanAlgebra<A> => {
130
+ return left.invert || right;
131
+ };
124
132
  }
125
133
 
126
134
  /**
@@ -150,11 +158,13 @@ export function not<A>(self: FreeBooleanAlgebra<A>): FreeBooleanAlgebra<A> {
150
158
  }
151
159
 
152
160
  /**
153
- * @tsplus fluent fncts.test.FreeBooleanAlgebra or
154
- * @tsplus operator fncts.test.FreeBooleanAlgebra ||
161
+ * @tsplus pipeable fncts.test.FreeBooleanAlgebra or
162
+ * @tsplus pipeable-operator fncts.test.FreeBooleanAlgebra ||
155
163
  */
156
- export function or_<A>(left: FreeBooleanAlgebra<A>, right: FreeBooleanAlgebra<A>): FreeBooleanAlgebra<A> {
157
- return new Or(left, right);
164
+ export function or<A>(right: FreeBooleanAlgebra<A>) {
165
+ return (left: FreeBooleanAlgebra<A>): FreeBooleanAlgebra<A> => {
166
+ return new Or(left, right);
167
+ };
158
168
  }
159
169
 
160
170
  /**
@@ -57,10 +57,12 @@ export function prependTo(self: Line, message: Message): Message {
57
57
  }
58
58
 
59
59
  /**
60
- * @tsplus fluent fncts.test.data.Line withOffset
60
+ * @tsplus pipeable fncts.test.data.Line withOffset
61
61
  */
62
- export function withOffset(self: Line, shift: number): Line {
63
- return new Line(self.fragments, self.offset + shift);
62
+ export function withOffset(shift: number) {
63
+ return (self: Line): Line => {
64
+ return new Line(self.fragments, self.offset + shift);
65
+ };
64
66
  }
65
67
 
66
68
  /**
@@ -44,14 +44,14 @@ export function prependFragment(fragment: Fragment, self: Message): Message {
44
44
  /**
45
45
  * @tsplus operator fncts.test.data.Message +
46
46
  */
47
- export function concat_(self: Message, that: Message): Message {
47
+ export function concat(self: Message, that: Message): Message {
48
48
  return Message(self.lines.concat(that.lines));
49
49
  }
50
50
 
51
51
  /**
52
52
  * @tsplus operator fncts.test.data.Message |
53
53
  */
54
- export function combine_(self: Message, that: Message): Message {
54
+ export function combine(self: Message, that: Message): Message {
55
55
  const last = self.lines.last;
56
56
  const head = that.lines.head;
57
57
  if (last.isJust() && head.isJust()) {
@@ -62,33 +62,41 @@ export function combine_(self: Message, that: Message): Message {
62
62
  }
63
63
 
64
64
  /**
65
- * @tsplus fluent fncts.test.data.Message drop
65
+ * @tsplus pipeable fncts.test.data.Message drop
66
66
  */
67
- export function drop_(self: Message, n: number): Message {
68
- return Message(self.lines.drop(n));
67
+ export function drop(n: number) {
68
+ return (self: Message): Message => {
69
+ return Message(self.lines.drop(n));
70
+ };
69
71
  }
70
72
 
71
73
  /**
72
- * @tsplus fluent fncts.test.data.Message map
74
+ * @tsplus pipeable fncts.test.data.Message map
73
75
  */
74
- export function map_(self: Message, f: (line: Line) => Line): Message {
75
- return Message(self.lines.map(f));
76
+ export function map(f: (line: Line) => Line) {
77
+ return (self: Message): Message => {
78
+ return Message(self.lines.map(f));
79
+ };
76
80
  }
77
81
 
78
82
  /**
79
- * @tsplus fluent fncts.test.data.Message withOffset
83
+ * @tsplus pipeable fncts.test.data.Message withOffset
80
84
  */
81
- export function withOffset(self: Message, offset: number): Message {
82
- return self.map((line) => line.withOffset(offset));
85
+ export function withOffset(offset: number) {
86
+ return (self: Message): Message => {
87
+ return self.map((line) => line.withOffset(offset));
88
+ };
83
89
  }
84
90
 
85
91
  /**
86
- * @tsplus fluent fncts.test.data.Message intersperse
92
+ * @tsplus pipeable fncts.test.data.Message intersperse
87
93
  */
88
- export function intersperse(self: Message, line: Line): Message {
89
- return new Message(
90
- Vector.from(
91
- self.lines.foldRight(List.empty<Line>(), (ln, rest) => Cons(ln, rest.isEmpty() ? Nil() : Cons(line, rest))),
92
- ),
93
- );
94
+ export function intersperse(line: Line) {
95
+ return (self: Message): Message => {
96
+ return new Message(
97
+ Vector.from(
98
+ self.lines.foldRight(List.empty<Line>(), (ln, rest) => Cons(ln, rest.isEmpty() ? Nil() : Cons(line, rest))),
99
+ ),
100
+ );
101
+ };
94
102
  }
@@ -1,5 +1,4 @@
1
1
  import type { Fragment } from "./Fragment.js";
2
-
3
2
  export const enum StyleTag {
4
3
  Primary = "Primary",
5
4
  Default = "Default",
@@ -8,7 +8,6 @@ export const enum RenderTag {
8
8
  export class RenderFunction {
9
9
  readonly _tag = RenderTag.Function;
10
10
  constructor(readonly name: string, readonly paramLists: Conc<Conc<RenderParam>>) {}
11
-
12
11
  get rendered(): string {
13
12
  return `${this.name}(${this.paramLists.map((ps) => ps.map((p) => p.rendered).join(", ")).join("")})`;
14
13
  }
@@ -17,7 +16,6 @@ export class RenderFunction {
17
16
  export class RenderInfix {
18
17
  readonly _tag = RenderTag.Infix;
19
18
  constructor(readonly left: RenderParam, readonly op: string, readonly right: RenderParam) {}
20
-
21
19
  get rendered(): string {
22
20
  return `(${this.left.rendered} ${this.op} ${this.right.rendered})`;
23
21
  }
@@ -30,7 +30,9 @@ export const TimingTag = Tag<number>("fncts.test.TestAnnotation.Timing");
30
30
  */
31
31
  export const Timing = new TestAnnotation(TimingTag, "timing", 0, (x, y) => x + y);
32
32
 
33
- export const FibersTag = Tag<Either<number, Conc<Ref<HashSet<Fiber.Runtime<any, any>>>>>>("fncts.test.TestAnnotation.Fibers");
33
+ export const FibersTag = Tag<Either<number, Conc<Ref<HashSet<Fiber.Runtime<any, any>>>>>>(
34
+ "fncts.test.TestAnnotation.Fibers",
35
+ );
34
36
  /**
35
37
  * @tsplus static fncts.test.TestAnnotationOps Fibers
36
38
  */
@@ -10,18 +10,15 @@ export type TestAnnotationTypeId = typeof TestAnnotationTypeId;
10
10
  export class TestAnnotation<V> implements Hashable, Equatable {
11
11
  readonly _typeId: TestAnnotationTypeId = TestAnnotationTypeId;
12
12
  readonly _V!: () => V;
13
-
14
13
  constructor(
15
14
  readonly tag: Tag<V>,
16
15
  readonly identifier: string,
17
16
  readonly initial: V,
18
17
  readonly combine: (v1: V, v2: V) => V,
19
18
  ) {}
20
-
21
19
  get [Symbol.hash]() {
22
20
  return Hashable.combine(Hashable.string(this.identifier), Hashable.unknown(this.tag));
23
21
  }
24
-
25
22
  [Symbol.equals](that: unknown) {
26
23
  return (
27
24
  isTestAnnotation(that) &&
@@ -4,7 +4,6 @@ import { identity } from "@fncts/base/data/function";
4
4
 
5
5
  export class TestAnnotationMap {
6
6
  constructor(private readonly map: HashMap<TestAnnotation<any>, any>) {}
7
-
8
7
  combine(that: TestAnnotationMap): TestAnnotationMap {
9
8
  return new TestAnnotationMap(
10
9
  Conc.from(this.map)
@@ -20,22 +19,17 @@ export class TestAnnotationMap {
20
19
  ),
21
20
  );
22
21
  }
23
-
24
22
  get<V>(key: TestAnnotation<V>): V {
25
23
  return this.map.get(key).match(() => key.initial, identity);
26
24
  }
27
-
28
25
  private overwrite<V>(key: TestAnnotation<V>, value: V): TestAnnotationMap {
29
26
  return new TestAnnotationMap(this.map.set(key, value));
30
27
  }
31
-
32
28
  private update<V>(key: TestAnnotation<V>, f: (v: V) => V): TestAnnotationMap {
33
29
  return this.overwrite(key, f(this.get(key)));
34
30
  }
35
-
36
31
  annotate<V>(key: TestAnnotation<V>, value: V): TestAnnotationMap {
37
32
  return this.update(key, (_) => key.combine(_, value));
38
33
  }
39
-
40
34
  static empty: TestAnnotationMap = new TestAnnotationMap(HashMap.makeDefault());
41
35
  }
package/_src/demo.ts CHANGED
@@ -2,9 +2,9 @@ import { DefaultRunnableSpec } from "@fncts/test/control/DefaultRunnableSpec";
2
2
 
3
3
  import { suite, test, testIO } from "./api.js";
4
4
  import { strictEqualTo } from "./control/Assertion.js";
5
-
6
- const ServiceATag = Tag<{ x: number }>("fncts.test.demo.ServiceA");
7
-
5
+ const ServiceATag = Tag<{
6
+ x: number;
7
+ }>("fncts.test.demo.ServiceA");
8
8
  class DemoSpec extends DefaultRunnableSpec {
9
9
  spec = suite(
10
10
  "TestSuite",
@@ -12,5 +12,4 @@ class DemoSpec extends DefaultRunnableSpec {
12
12
  test("Demo failure", { a: { b: { c: { d: 100 } } } }.assert(strictEqualTo({ a: { b: { c: { d: 0 } } } }))),
13
13
  );
14
14
  }
15
-
16
15
  new DemoSpec().main();
package/_src/util/math.ts CHANGED
@@ -4,7 +4,6 @@ export const MIN_VALUE_32 = 2 ** -126 * 2 ** -23;
4
4
  export const MAX_VALUE_32 = 2 ** 127 * (1 + (2 ** 23 - 1) / 2 ** 23);
5
5
  /** @internal */
6
6
  export const EPSILON_32 = 2 ** -23;
7
-
8
7
  /** @internal */
9
8
  const INDEX_POSITIVE_INFINITY_32 = 2139095040; // floatToIndex(MAX_VALUE_32) + 1;
10
9
  /** @internal */
@@ -23,7 +22,10 @@ export function safeFloatToIndex(f: number, label: string): IO<never, never, num
23
22
  return IO.succeedNow(index);
24
23
  }
25
24
 
26
- export function decomposeFloat(f: number): { exponent: number; significand: number } {
25
+ export function decomposeFloat(f: number): {
26
+ exponent: number;
27
+ significand: number;
28
+ } {
27
29
  // 1 => significand 0b1 - exponent 1 (will be preferred)
28
30
  // => significand 0b0.1 - exponent 2
29
31
  const maxSignificand = 1 + (2 ** 23 - 1) / 2 ** 23;
@@ -45,11 +47,9 @@ export function floatToIndex(f: number): number {
45
47
  return INDEX_NEGATIVE_INFINITY_32;
46
48
  }
47
49
  const { exponent, significand } = decomposeFloat(f);
48
-
49
50
  if (Number.isNaN(exponent) || Number.isNaN(significand) || !Number.isInteger(significand * 0x800000)) {
50
51
  return Number.NaN;
51
52
  }
52
-
53
53
  if (f > 0 || (f === 0 && 1 / f === Number.POSITIVE_INFINITY)) {
54
54
  return indexInFloatFromDecomp(exponent, significand);
55
55
  } else {
@@ -60,10 +60,8 @@ export function floatToIndex(f: number): number {
60
60
  /** @internal */
61
61
  export function indexInFloatFromDecomp(exponent: number, significand: number) {
62
62
  // WARNING: significand >= 0
63
-
64
63
  // By construct of significand in decomposeFloat,
65
64
  // significand is always max-ed.
66
-
67
65
  // The float close to zero are the only one having a significand <1, they also have an exponent of -126.
68
66
  // They are in range: [2**(-126) * 2**(-23), 2**(-126) * (2 - 2 ** 23)]
69
67
  // In other words there are 2**24 elements in that range if we include zero.
@@ -104,15 +102,17 @@ export function indexToFloat(index: number): number {
104
102
  }
105
103
 
106
104
  /** @internal */
107
- export type ArrayInt64 = { sign: 1 | -1; data: [number, number] };
105
+ export type ArrayInt64 = {
106
+ sign: 1 | -1;
107
+ data: [number, number];
108
+ };
108
109
 
109
110
  /** @internal */
110
111
  export const Zero64: ArrayInt64 = { sign: 1, data: [0, 0] };
111
-
112
112
  /** @internal */
113
113
  export const Unit64: ArrayInt64 = { sign: 1, data: [0, 1] };
114
-
115
114
  /** @internal */
115
+
116
116
  export function isZero64(a: ArrayInt64): boolean {
117
117
  return a.data[0] === 0 && a.data[1] === 0;
118
118
  }
@@ -178,7 +178,6 @@ function substract64Internal(a: ArrayInt64, b: ArrayInt64): ArrayInt64 {
178
178
  const high = a.data[0] + b.data[0] + (low > 0xffffffff ? 1 : 0);
179
179
  return { sign: 1, data: [high >>> 0, low >>> 0] };
180
180
  }
181
-
182
181
  // a.sign === -1 with b.sign === 1 is impossible given: a - b >= 0, except for a = 0 and b = 0
183
182
  // Operation is a substraction
184
183
  return {
@@ -270,7 +269,10 @@ const INDEX_NEGATIVE_INFINITY: ArrayInt64 = { sign: -1, data: [2146435072, 1] };
270
269
  *
271
270
  * @internal
272
271
  */
273
- export function decomposeDouble(d: number): { exponent: number; significand: number } {
272
+ export function decomposeDouble(d: number): {
273
+ exponent: number;
274
+ significand: number;
275
+ } {
274
276
  // 1 => significand 0b1 - exponent 1 (will be preferred)
275
277
  // => significand 0b0.1 - exponent 2
276
278
  const maxSignificand = 2 - Number.EPSILON;
@@ -292,10 +294,8 @@ function positiveNumberToInt64(n: number): ArrayInt64["data"] {
292
294
  /** @internal */
293
295
  function indexInDoubleFromDecomp(exponent: number, significand: number): ArrayInt64["data"] {
294
296
  // WARNING: significand >= 0
295
-
296
297
  // By construct of significand in decomposeDouble,
297
298
  // significand is always max-ed.
298
-
299
299
  // The double close to zero are the only one having a significand <1, they also have an exponent of -1022.
300
300
  // They are in range: [2**(-1022) * 2**(-52), 2**(-1022) * (2 - 2 ** 52)]
301
301
  // In other words there are 2**53 elements in that range if we include zero.
@@ -447,8 +447,14 @@ export function nextAfter(x: number, y: number) {
447
447
  export function computeBiasedRanges(
448
448
  min: ArrayInt64,
449
449
  max: ArrayInt64,
450
- biasedRanges?: { min: ArrayInt64; max: ArrayInt64 }[],
451
- ): { min: ArrayInt64; max: ArrayInt64 }[] {
450
+ biasedRanges?: {
451
+ min: ArrayInt64;
452
+ max: ArrayInt64;
453
+ }[],
454
+ ): {
455
+ min: ArrayInt64;
456
+ max: ArrayInt64;
457
+ }[] {
452
458
  if (biasedRanges != null) {
453
459
  return biasedRanges;
454
460
  }
@@ -477,8 +483,16 @@ export function computeArrayInt64GenerateRange(
477
483
  min: ArrayInt64,
478
484
  max: ArrayInt64,
479
485
  biasFactor: number | undefined,
480
- biasedRanges: { min: ArrayInt64; max: ArrayInt64 }[] | undefined,
481
- ): UIO<{ min: ArrayInt64; max: ArrayInt64 }> {
486
+ biasedRanges:
487
+ | {
488
+ min: ArrayInt64;
489
+ max: ArrayInt64;
490
+ }[]
491
+ | undefined,
492
+ ): UIO<{
493
+ min: ArrayInt64;
494
+ max: ArrayInt64;
495
+ }> {
482
496
  return IO.gen(function* (_) {
483
497
  if (biasFactor === undefined || (yield* _(Random.nextIntBetween(1, biasFactor))) !== 1) {
484
498
  return { min, max };