@fncts/test 0.0.20 → 0.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 };