@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
@@ -11,7 +11,6 @@ export class LeafRenderer {
11
11
  constructor(
12
12
  readonly use: <X>(f: <V>(annotation: TestAnnotation<V>, render: (_: List<V>) => Maybe<string>) => X) => X,
13
13
  ) {}
14
-
15
14
  run(ancestors: List<TestAnnotationMap>, child: TestAnnotationMap): List<string> {
16
15
  return this.use((annotation, render) =>
17
16
  render(
@@ -30,7 +29,6 @@ export class LeafRenderer {
30
29
  export class CompositeRenderer {
31
30
  readonly _tag = TestAnnotationRendererTag.CompositeRenderer;
32
31
  constructor(readonly renderers: Vector<TestAnnotationRenderer>) {}
33
-
34
32
  run(ancestors: List<TestAnnotationMap>, child: TestAnnotationMap): List<string> {
35
33
  return this.renderers.toList.flatMap((renderer) => renderer.run(ancestors, child));
36
34
  }
@@ -96,7 +96,6 @@ export function timeoutWarning(duration: Duration): TestAspect<Live, any> {
96
96
  Multiple: ({ specs }) => Spec.multiple(specs.map((spec) => loop(labels, spec))),
97
97
  Test: ({ test, annotations }) => Spec.test(warn(labels, test, duration), annotations),
98
98
  });
99
-
100
99
  return loop(Vector(), spec);
101
100
  };
102
101
  }
@@ -60,9 +60,9 @@ export class TestClock extends Clock {
60
60
  }
61
61
  sleep = (ms: Lazy<Duration>) => {
62
62
  const self = this;
63
- return IO.gen(function* (_) {
64
- const promise = yield* _(Future.make<never, void>());
65
- const wait = yield* _(
63
+ return Do((_) => {
64
+ const promise = _(Future.make<never, void>());
65
+ const wait = _(
66
66
  self.clockState.modify((data) => {
67
67
  const end = data.duration + ms().milliseconds;
68
68
  if (end > data.duration) {
@@ -72,7 +72,7 @@ export class TestClock extends Clock {
72
72
  }
73
73
  }),
74
74
  );
75
- yield* _(
75
+ _(
76
76
  IO.defer(() => {
77
77
  if (wait) {
78
78
  return self.warningStart > promise.await;
@@ -83,23 +83,17 @@ export class TestClock extends Clock {
83
83
  );
84
84
  });
85
85
  };
86
-
87
86
  currentTime = this.clockState.get.map((data) => data.duration);
88
-
89
87
  adjust(duration: number): UIO<void> {
90
88
  return this.warningDone > this.run((d) => d + duration);
91
89
  }
92
-
93
90
  setDate(date: Date): UIO<void> {
94
91
  return this.setTime(date.getTime());
95
92
  }
96
-
97
93
  setTime(time: number): UIO<void> {
98
94
  return this.warningDone > this.run((_) => time);
99
95
  }
100
-
101
96
  sleeps = this.clockState.get.map((data) => data.sleeps.map(([_]) => _));
102
-
103
97
  get supervizedFibers(): UIO<HashSet<Fiber.Runtime<any, any>>> {
104
98
  return IO.descriptorWith((descriptor) =>
105
99
  this.annotations.get(TestAnnotation.Fibers).flatMap((_) =>
@@ -113,7 +107,6 @@ export class TestClock extends Clock {
113
107
  ),
114
108
  );
115
109
  }
116
-
117
110
  private get freeze(): IO<never, void, HashMap<FiberId, FiberStatus>> {
118
111
  return this.supervizedFibers.flatMap((fibers) =>
119
112
  IO.foldLeft(fibers, HashMap.makeDefault<FiberId, FiberStatus>(), (map, fiber) =>
@@ -133,17 +126,14 @@ export class TestClock extends Clock {
133
126
  ),
134
127
  );
135
128
  }
136
-
137
129
  private get delay(): UIO<void> {
138
130
  return this.live.provide(Clock.sleep((5).milliseconds));
139
131
  }
140
-
141
132
  private get awaitSuspended(): UIO<void> {
142
133
  return this.suspended
143
134
  .zipWith(this.live.provide(Clock.sleep((10).milliseconds)) > this.suspended, Equatable.strictEquals)
144
135
  .filterOrFail(Function.identity, (): void => undefined).eventually.asUnit;
145
136
  }
146
-
147
137
  private run(f: (duration: number) => number): UIO<void> {
148
138
  return (
149
139
  this.awaitSuspended >
@@ -165,7 +155,6 @@ export class TestClock extends Clock {
165
155
  ),
166
156
  );
167
157
  }
168
-
169
158
  private get suspended(): IO<never, void, HashMap<FiberId, FiberStatus>> {
170
159
  return this.freeze.zip(this.delay > this.freeze).flatMap(([first, last]) => {
171
160
  if (Equatable.strictEquals(first, last)) {
@@ -175,7 +164,6 @@ export class TestClock extends Clock {
175
164
  }
176
165
  });
177
166
  }
178
-
179
167
  warningDone: UIO<void> = this.warningState.updateJustIO(
180
168
  matchTag({
181
169
  Start: () => Just(IO(Done)),
@@ -183,7 +171,6 @@ export class TestClock extends Clock {
183
171
  Done: () => Nothing(),
184
172
  }),
185
173
  );
186
-
187
174
  private warningStart: UIO<void> = this.warningState.updateJustIO(
188
175
  matchTag(
189
176
  {
@@ -54,7 +54,6 @@ export class TestConsole implements Console {
54
54
  return this.debugState.locally(true)(io);
55
55
  }
56
56
  }
57
-
58
57
  /**
59
58
  * @tsplus static fncts.test.TestConsoleOps Tag
60
59
  */
@@ -1,5 +1,3 @@
1
- import { Console } from "@fncts/io/Console";
2
-
3
1
  /**
4
2
  * @tsplus type fncts.test.TestLogger
5
3
  * @tsplus companion fncts.test.TestLoggerOps
@@ -7,30 +7,35 @@ import { Buffer, Data, TestRandom } from "@fncts/test/control/TestRandom";
7
7
  export function feedInts(...ints: ReadonlyArray<number>) {
8
8
  return IO.serviceWithIO((tr) => tr.feedInts(...ints), TestRandom.Tag);
9
9
  }
10
+
10
11
  /**
11
12
  * @tsplus static fncts.test.TestRandom feedBytes
12
13
  */
13
14
  export function feedBytes(...bytes: ReadonlyArray<ReadonlyArray<Byte>>) {
14
15
  return IO.serviceWithIO((tr) => tr.feedBytes(...bytes), TestRandom.Tag);
15
16
  }
17
+
16
18
  /**
17
19
  * @tsplus static fncts.test.TestRandom feedChars
18
20
  */
19
21
  export function feedChars(...chars: ReadonlyArray<string>) {
20
22
  return IO.serviceWithIO((tr) => tr.feedChars(...chars), TestRandom.Tag);
21
23
  }
24
+
22
25
  /**
23
26
  * @tsplus static fncts.test.TestRandom feedDoubles
24
27
  */
25
28
  export function feedDoubles(...doubles: ReadonlyArray<number>) {
26
29
  return IO.serviceWithIO((tr) => tr.feedDoubles(...doubles), TestRandom.Tag);
27
30
  }
31
+
28
32
  /**
29
33
  * @tsplus static fncts.test.TestRandom feedStrings
30
34
  */
31
35
  export function feedStrings(...strings: ReadonlyArray<string>) {
32
36
  return IO.serviceWithIO((tr) => tr.feedStrings(...strings), TestRandom.Tag);
33
37
  }
38
+
34
39
  /**
35
40
  * @tsplus static fncts.test.TestRandom feedBooleans
36
41
  */
@@ -13,7 +13,6 @@ export const TestRandomTag = Tag<TestRandom>("fncts.test.TestRandom");
13
13
  */
14
14
  export class TestRandom implements Random {
15
15
  constructor(readonly randomState: Ref<Data>, readonly bufferState: Ref<Buffer>) {}
16
-
17
16
  clearBooleans: UIO<void> = this.bufferState.update((buff) => buff.copy({ booleans: Vector.empty() }));
18
17
  clearBytes: UIO<void> = this.bufferState.update((buff) => buff.copy({ bytes: Vector.empty() }));
19
18
  clearChars: UIO<void> = this.bufferState.update((buff) => buff.copy({ chars: Vector.empty() }));
@@ -39,7 +38,6 @@ export class TestRandom implements Random {
39
38
  return this.bufferState.update((data) => data.copy({ strings: Vector.from(strings).concat(data.strings) }));
40
39
  }
41
40
  getSeed: UIO<number> = this.randomState.get.map((data) => ((data.seed1 << 24) | data.seed2) ^ 0x5deece66d);
42
-
43
41
  setSeed(seed: number): UIO<void> {
44
42
  const mash = Mash();
45
43
  const newSeed = mash(seed.toString());
@@ -47,7 +45,6 @@ export class TestRandom implements Random {
47
45
  const seed2 = Math.floor(newSeed) & ((1 << 24) - 1);
48
46
  return this.randomState.set(new Data(seed1, seed2, ImmutableQueue.empty()));
49
47
  }
50
-
51
48
  private bufferedBoolean = (buffer: Buffer): readonly [Maybe<boolean>, Buffer] => {
52
49
  return [buffer.booleans.head, buffer.copy({ booleans: buffer.booleans.drop(1) })];
53
50
  };
@@ -57,19 +54,15 @@ export class TestRandom implements Random {
57
54
  private bufferedInt = (buffer: Buffer): readonly [Maybe<number>, Buffer] => {
58
55
  return [buffer.integers.head, buffer.copy({ integers: buffer.integers.drop(1) })];
59
56
  };
60
-
61
57
  private getOrElse = <A>(buffer: (_: Buffer) => readonly [Maybe<A>, Buffer], random: UIO<A>): UIO<A> => {
62
58
  return this.bufferState.modify(buffer).flatMap((_) => _.match(() => random, IO.succeedNow));
63
59
  };
64
-
65
60
  private leastSignificantBits = (x: number): number => {
66
61
  return Math.floor(x) & ((1 << 24) - 1);
67
62
  };
68
-
69
63
  private mostSignificantBits = (x: number): number => {
70
64
  return Math.floor(x / (1 << 24));
71
65
  };
72
-
73
66
  private randomBits = (bits: number): UIO<number> => {
74
67
  return this.randomState.modify((data) => {
75
68
  const multiplier = 0x5deece66d;
@@ -83,10 +76,8 @@ export class TestRandom implements Random {
83
76
  return [result >>> (32 - bits), new Data(newSeed1, newSeed2, data.nextNextGaussians)];
84
77
  });
85
78
  };
86
-
87
79
  private randomBoolean = this.randomBits(1).map((n) => n !== 0);
88
-
89
- private randomBytes = (length: number): UIO<ReadonlyArray<Byte>> => {
80
+ private randomBytes = (length: number): UIO<ReadonlyArray<Byte>> => {
90
81
  const loop = (i: number, rnd: UIO<number>, n: number, acc: UIO<List<Byte>>): UIO<List<Byte>> => {
91
82
  if (i === length) {
92
83
  return acc.map((l) => l.reverse);
@@ -103,10 +94,8 @@ export class TestRandom implements Random {
103
94
  return loop(i, this.nextInt, Math.min(length - i, 4), acc);
104
95
  }
105
96
  };
106
-
107
97
  return loop(0, this.randomInt, Math.min(length, 4), IO.succeedNow(List.empty())).map((list) => Array.from(list));
108
98
  };
109
-
110
99
  private randomIntBounded = (n: number) => {
111
100
  if (n <= 0) {
112
101
  return IO.haltNow(new IllegalArgumentError("n must be positive", "TestRandom.randomIntBounded"));
@@ -121,47 +110,35 @@ export class TestRandom implements Random {
121
110
  return loop;
122
111
  }
123
112
  };
124
-
125
113
  private randomLong: UIO<bigint> = this.randomBits(32).flatMap((i1) =>
126
114
  this.randomBits(32).flatMap((i2) => IO.succeedNow(BigInt(i1 << 32) + BigInt(i2))),
127
115
  );
128
-
129
- private randomInt = this.randomBits(32);
130
-
116
+ private randomInt = this.randomBits(32);
131
117
  private randomDouble = this.randomBits(26).flatMap((i1) =>
132
118
  this.randomBits(27).map((i2) => (i1 * (1 << 27) + i2) / (1 << 53)),
133
119
  );
134
-
135
120
  private random = this.randomBits(26);
136
-
137
121
  get nextInt(): UIO<number> {
138
122
  return this.getOrElse(this.bufferedInt, this.randomInt);
139
123
  }
140
-
141
124
  get nextBoolean(): UIO<boolean> {
142
125
  return this.getOrElse(this.bufferedBoolean, this.randomBoolean);
143
126
  }
144
-
145
127
  get nextDouble(): UIO<number> {
146
128
  return this.getOrElse(this.bufferedDouble, this.randomDouble);
147
129
  }
148
-
149
130
  get next(): UIO<number> {
150
131
  return this.getOrElse(this.bufferedDouble, this.random);
151
132
  }
152
-
153
133
  nextBigIntBetween(low: bigint, high: bigint): UIO<bigint> {
154
134
  return this.randomLong.repeatUntil((n) => low <= n && n < high);
155
135
  }
156
-
157
136
  nextIntBetween(low: number, high: number): UIO<number> {
158
137
  return nextIntBetweenWith(low, high, this.randomInt, this.randomIntBounded);
159
138
  }
160
-
161
139
  nextRange(low: number, high: number): UIO<number> {
162
140
  return this.next.map((n) => (high - low + 1) * n + low);
163
141
  }
164
-
165
142
  nextArrayIntBetween(low: ArrayInt, high: ArrayInt): UIO<ArrayInt> {
166
143
  const self = this;
167
144
  return IO.gen(function* (_) {
@@ -187,7 +164,6 @@ export class TestRandom implements Random {
187
164
  }).map((ns) => trimArrayIntInplace(addArrayIntToNew({ sign: 1, data: ns }, low)));
188
165
  }
189
166
  }
190
-
191
167
  /**
192
168
  * @internal
193
169
  */
@@ -205,7 +181,6 @@ function nextIntBetweenWith(
205
181
  else return nextInt.repeatUntil((n) => min <= n && n < max);
206
182
  }
207
183
  }
208
-
209
184
  export class Data {
210
185
  constructor(
211
186
  readonly seed1: number,
@@ -213,7 +188,6 @@ export class Data {
213
188
  readonly nextNextGaussians: ImmutableQueue<number> = ImmutableQueue.empty(),
214
189
  ) {}
215
190
  }
216
-
217
191
  export class Buffer {
218
192
  constructor(
219
193
  readonly booleans: Vector<boolean> = Vector.empty(),
@@ -223,7 +197,6 @@ export class Buffer {
223
197
  readonly integers: Vector<number> = Vector.empty(),
224
198
  readonly strings: Vector<string> = Vector.empty(),
225
199
  ) {}
226
-
227
200
  copy(_: Partial<Buffer>): Buffer {
228
201
  return new Buffer(
229
202
  _.booleans ?? this.booleans,
@@ -235,7 +208,6 @@ export class Buffer {
235
208
  );
236
209
  }
237
210
  }
238
-
239
211
  /** @internal */
240
212
  function isStrictlySmaller(dataA: number[], dataB: number[]): boolean {
241
213
  const maxLength = Math.max(dataA.length, dataB.length);
@@ -249,7 +221,6 @@ function isStrictlySmaller(dataA: number[], dataB: number[]): boolean {
249
221
  }
250
222
  return false;
251
223
  }
252
-
253
224
  export function substractArrayIntToNew(arrayIntA: ArrayInt, arrayIntB: ArrayInt): ArrayInt {
254
225
  if (arrayIntA.sign !== arrayIntB.sign) {
255
226
  return addArrayIntToNew(arrayIntA, { sign: -arrayIntB.sign as -1 | 1, data: arrayIntB.data });
@@ -272,7 +243,6 @@ export function substractArrayIntToNew(arrayIntA: ArrayInt, arrayIntB: ArrayInt)
272
243
  }
273
244
  return { sign: arrayIntA.sign, data: data.reverse() };
274
245
  }
275
-
276
246
  /**
277
247
  * Trim uneeded zeros in ArrayInt
278
248
  * and uniform notation for zero: {sign: 1, data: [0]}
@@ -292,7 +262,6 @@ export function trimArrayIntInplace(arrayInt: ArrayInt) {
292
262
  return arrayInt;
293
263
  /* eslint-enable */
294
264
  }
295
-
296
265
  /**
297
266
  * Add two ArrayInt
298
267
  * @internal
@@ -320,7 +289,6 @@ export function addArrayIntToNew(arrayIntA: ArrayInt, arrayIntB: ArrayInt): Arra
320
289
  }
321
290
  return { sign: arrayIntA.sign, data: data.reverse() };
322
291
  }
323
-
324
292
  /**
325
293
  * Add one to a given positive ArrayInt
326
294
  * @internal
@@ -342,8 +310,7 @@ export function addOneToPositiveArrayInt(arrayInt: ArrayInt): ArrayInt {
342
310
  }
343
311
 
344
312
  function Mash() {
345
- let n = 0xefc8249d;
346
-
313
+ let n = 0xefc8249d;
347
314
  const mash = function (data: string) {
348
315
  for (let i = 0; i < data.length; i++) {
349
316
  n += data.charCodeAt(i);
@@ -357,6 +324,5 @@ function Mash() {
357
324
  }
358
325
  return (n >>> 0) * 2.3283064365386963e-10; // 2^-32
359
326
  };
360
-
361
327
  return mash;
362
328
  }
@@ -10,7 +10,6 @@ import { fr, info, sp, warn } from "../../data/LogLine.js";
10
10
  import { Line } from "../../data/LogLine/Line.js";
11
11
  import { Message } from "../../data/LogLine/Message.js";
12
12
  import { TestAnnotation } from "../../data/TestAnnotation.js";
13
- import { TestRenderer } from "./definition.js";
14
13
 
15
14
  const tabSize = 2;
16
15
 
@@ -3,30 +3,36 @@ import { showWithOptions } from "@fncts/base/typeclass/Showable";
3
3
  import { AssertionValue } from "./definition.js";
4
4
 
5
5
  /**
6
- * @tsplus fluent fncts.test.data.AssertionValue label
6
+ * @tsplus pipeable fncts.test.data.AssertionValue label
7
7
  */
8
- export function label<A>(self: AssertionValue<A>, string: string): AssertionValue<A> {
9
- return new AssertionValue(
10
- LazyValue(() => self.assertion.value.label(string)),
11
- self.value,
12
- self.result,
13
- self.expression,
14
- self.sourceLocation,
15
- );
8
+ export function label(string: string) {
9
+ return <A>(self: AssertionValue<A>): AssertionValue<A> => {
10
+ return new AssertionValue(
11
+ LazyValue(() => self.assertion.value.label(string)),
12
+ self.value,
13
+ self.result,
14
+ self.expression,
15
+ self.sourceLocation,
16
+ );
17
+ };
16
18
  }
17
19
 
18
20
  /**
19
- * @tsplus fluent fncts.test.data.AssertionValue isSameAssertionAs
21
+ * @tsplus pipeable fncts.test.data.AssertionValue isSameAssertionAs
20
22
  */
21
- export function isSameAssertionAs<A>(self: AssertionValue<A>, that: AssertionValue<A>): boolean {
22
- return self.assertion.value.rendered === that.assertion.value.rendered;
23
+ export function isSameAssertionAs<A>(that: AssertionValue<A>) {
24
+ return (self: AssertionValue<A>): boolean => {
25
+ return self.assertion.value.rendered === that.assertion.value.rendered;
26
+ };
23
27
  }
24
28
 
25
29
  /**
26
- * @tsplus fluent fncts.test.data.AssertionValue showValue
30
+ * @tsplus pipeable fncts.test.data.AssertionValue showValue
27
31
  */
28
- export function showValue<A>(self: AssertionValue<A>, offset = 0): string {
29
- return showWithOptions(self.value, { indentationLevel: offset });
32
+ export function showValue(offset = 0) {
33
+ return <A>(self: AssertionValue<A>): string => {
34
+ return showWithOptions(self.value, { indentationLevel: offset });
35
+ };
30
36
  }
31
37
 
32
38
  /**
@@ -37,12 +43,10 @@ export function printAssertion<A>(self: AssertionValue<A>): string {
37
43
  }
38
44
 
39
45
  /**
40
- * @tsplus fluent fncts.test.data.AssertionValue withContext
46
+ * @tsplus pipeable fncts.test.data.AssertionValue withContext
41
47
  */
42
- export function withContext<A>(
43
- self: AssertionValue<A>,
44
- expr: Maybe<string>,
45
- sourceLocation: Maybe<string>,
46
- ): AssertionValue<A> {
47
- return new AssertionValue(self.assertion, self.value, self.result, expr, sourceLocation);
48
+ export function withContext(expr: Maybe<string>, sourceLocation: Maybe<string>) {
49
+ return <A>(self: AssertionValue<A>): AssertionValue<A> => {
50
+ return new AssertionValue(self.assertion, self.value, self.result, expr, sourceLocation);
51
+ };
48
52
  }
@@ -1,6 +1,5 @@
1
1
  import type { AssertionIO } from "../../control/AssertionIO/definition.js";
2
2
  import type { FreeBooleanAlgebra } from "../FreeBooleanAlgebra.js";
3
-
4
3
  export const AssertionValueTypeId = Symbol.for("fncts.test.data.AssertionValue");
5
4
  export type AssertionValueTypeId = typeof AssertionValueTypeId;
6
5
 
@@ -10,14 +10,16 @@ import { ExecutedSpec, TestCase } from "./definition.js";
10
10
  import { LabeledCase, MultipleCase } from "./definition.js";
11
11
 
12
12
  /**
13
- * @tsplus fluent fncts.test.data.ExecutedSpec fold
13
+ * @tsplus pipeable fncts.test.data.ExecutedSpec fold
14
14
  */
15
- export function fold_<E, Z>(self: ExecutedSpec<E>, f: (_: SpecCase<E, Z>) => Z): Z {
16
- return matchTag_(self.caseValue, {
17
- Labeled: ({ label, spec }) => f(new LabeledCase(label, spec.fold(f))),
18
- Multiple: ({ specs }) => f(new MultipleCase(specs.map((spec) => spec.fold(f)))),
19
- Test: f,
20
- });
15
+ export function fold<E, Z>(f: (_: SpecCase<E, Z>) => Z) {
16
+ return (self: ExecutedSpec<E>): Z => {
17
+ return matchTag_(self.caseValue, {
18
+ Labeled: ({ label, spec }) => f(new LabeledCase(label, spec.fold(f))),
19
+ Multiple: ({ specs }) => f(new MultipleCase(specs.map((spec) => spec.fold(f)))),
20
+ Test: f,
21
+ });
22
+ };
21
23
  }
22
24
 
23
25
  /**
@@ -28,17 +30,19 @@ export function labeled<E>(spec: ExecutedSpec<E>, label: string): ExecutedSpec<E
28
30
  }
29
31
 
30
32
  /**
31
- * @tsplus fluent fncts.test.data.ExecutedSpecCase map
33
+ * @tsplus pipeable fncts.test.data.ExecutedSpecCase map
32
34
  */
33
- export function mapSpecCase_<E, A, B>(self: SpecCase<E, A>, f: (a: A) => B): SpecCase<E, B> {
34
- return matchTag_(
35
- self,
36
- {
37
- Labeled: ({ label, spec }) => new LabeledCase(label, f(spec)),
38
- Multiple: ({ specs }) => new MultipleCase(specs.map(f)),
39
- },
40
- identity,
41
- );
35
+ export function mapSpecCase<A, B>(f: (a: A) => B) {
36
+ return <E>(self: SpecCase<E, A>): SpecCase<E, B> => {
37
+ return matchTag_(
38
+ self,
39
+ {
40
+ Labeled: ({ label, spec }) => new LabeledCase(label, f(spec)),
41
+ Multiple: ({ specs }) => new MultipleCase(specs.map(f)),
42
+ },
43
+ identity,
44
+ );
45
+ };
42
46
  }
43
47
 
44
48
  /**
@@ -56,30 +60,31 @@ export function test<E>(test: Either<TestFailure<E>, TestSuccess>, annotations:
56
60
  }
57
61
 
58
62
  /**
59
- * @tsplus fluent fncts.test.data.ExecutedSpec transform
63
+ * @tsplus pipeable fncts.test.data.ExecutedSpec transform
60
64
  */
61
- export function transform_<E, E1>(
62
- self: ExecutedSpec<E>,
63
- f: (_: SpecCase<E, ExecutedSpec<E1>>) => SpecCase<E1, ExecutedSpec<E1>>,
64
- ): ExecutedSpec<E1> {
65
- return matchTag_(self.caseValue, {
66
- Labeled: ({ label, spec }) => new ExecutedSpec(f(new LabeledCase(label, spec.transform(f)))),
67
- Multiple: ({ specs }) => new ExecutedSpec(f(new MultipleCase(specs.map((spec) => spec.transform(f))))),
68
- Test: (t) => new ExecutedSpec(f(t)),
69
- });
65
+ export function transform<E, E1>(f: (_: SpecCase<E, ExecutedSpec<E1>>) => SpecCase<E1, ExecutedSpec<E1>>) {
66
+ return (self: ExecutedSpec<E>): ExecutedSpec<E1> => {
67
+ return matchTag_(self.caseValue, {
68
+ Labeled: ({ label, spec }) => new ExecutedSpec(f(new LabeledCase(label, spec.transform(f)))),
69
+ Multiple: ({ specs }) => new ExecutedSpec(f(new MultipleCase(specs.map((spec) => spec.transform(f))))),
70
+ Test: (t) => new ExecutedSpec(f(t)),
71
+ });
72
+ };
70
73
  }
71
74
 
72
75
  /**
73
- * @tsplus fluent fncts.test.data.ExecutedSpec exists
76
+ * @tsplus pipeable fncts.test.data.ExecutedSpec exists
74
77
  */
75
- export function exists_<E>(self: ExecutedSpec<E>, f: (_: SpecCase<E, boolean>) => boolean): boolean {
76
- return self.fold(
77
- matchTag({
78
- Labeled: (c) => c.spec || f(c),
79
- Multiple: (c) => c.specs.exists(identity) || f(c),
80
- Test: f,
81
- }),
82
- );
78
+ export function exists<E>(f: (_: SpecCase<E, boolean>) => boolean) {
79
+ return (self: ExecutedSpec<E>): boolean => {
80
+ return self.fold(
81
+ matchTag({
82
+ Labeled: (c) => c.spec || f(c),
83
+ Multiple: (c) => c.specs.exists(identity) || f(c),
84
+ Test: f,
85
+ }),
86
+ );
87
+ };
83
88
  }
84
89
 
85
90
  /**