@fncts/test 0.0.21 → 0.0.22
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.
- package/_cjs/api.cjs +2 -47
- package/_cjs/api.cjs.map +1 -1
- package/_cjs/control/AbstractRunnableSpec.cjs +0 -11
- package/_cjs/control/AbstractRunnableSpec.cjs.map +1 -1
- package/_cjs/control/Annotations/api.cjs +0 -12
- package/_cjs/control/Annotations/api.cjs.map +1 -1
- package/_cjs/control/Annotations/definition.cjs +0 -6
- package/_cjs/control/Annotations/definition.cjs.map +1 -1
- package/_cjs/control/Annotations/live.cjs +9 -30
- package/_cjs/control/Annotations/live.cjs.map +1 -1
- package/_cjs/control/Annotations.cjs +0 -6
- package/_cjs/control/Annotations.cjs.map +1 -1
- package/_cjs/control/Assertion/api.cjs +8 -70
- package/_cjs/control/Assertion/api.cjs.map +1 -1
- package/_cjs/control/Assertion/definition.cjs +0 -8
- package/_cjs/control/Assertion/definition.cjs.map +1 -1
- package/_cjs/control/Assertion.cjs +0 -4
- package/_cjs/control/Assertion.cjs.map +1 -1
- package/_cjs/control/AssertionIO/api.cjs +0 -12
- package/_cjs/control/AssertionIO/api.cjs.map +1 -1
- package/_cjs/control/AssertionIO/definition.cjs +0 -8
- package/_cjs/control/AssertionIO/definition.cjs.map +1 -1
- package/_cjs/control/AssertionIO.cjs +0 -4
- package/_cjs/control/AssertionIO.cjs.map +1 -1
- package/_cjs/control/DefaultRunnableSpec.cjs +0 -12
- package/_cjs/control/DefaultRunnableSpec.cjs.map +1 -1
- package/_cjs/control/DefaultTestReporter/definition.cjs.map +1 -1
- package/_cjs/control/DefaultTestReporter/render.cjs +5 -74
- package/_cjs/control/DefaultTestReporter/render.cjs.map +1 -1
- package/_cjs/control/DefaultTestReporter.cjs +0 -4
- package/_cjs/control/DefaultTestReporter.cjs.map +1 -1
- package/_cjs/control/FreeBooleanAlgebraIO/api.cjs +0 -20
- package/_cjs/control/FreeBooleanAlgebraIO/api.cjs.map +1 -1
- package/_cjs/control/FreeBooleanAlgebraIO/definition.cjs.map +1 -1
- package/_cjs/control/FreeBooleanAlgebraIO.cjs +0 -4
- package/_cjs/control/FreeBooleanAlgebraIO.cjs.map +1 -1
- package/_cjs/control/Gen/api.cjs +496 -176
- package/_cjs/control/Gen/api.cjs.map +1 -1
- package/_cjs/control/Gen/definition.cjs +0 -3
- package/_cjs/control/Gen/definition.cjs.map +1 -1
- package/_cjs/control/Gen.cjs +0 -97
- package/_cjs/control/Gen.cjs.map +1 -1
- package/_cjs/control/Live/definition.cjs +0 -18
- package/_cjs/control/Live/definition.cjs.map +1 -1
- package/_cjs/control/Live.cjs +0 -2
- package/_cjs/control/Live.cjs.map +1 -1
- package/_cjs/control/RunnableSpec.cjs +1 -21
- package/_cjs/control/RunnableSpec.cjs.map +1 -1
- package/_cjs/control/Sample/api.cjs +1 -56
- package/_cjs/control/Sample/api.cjs.map +1 -1
- package/_cjs/control/Sample/definition.cjs +0 -3
- package/_cjs/control/Sample/definition.cjs.map +1 -1
- package/_cjs/control/Sample.cjs +0 -4
- package/_cjs/control/Sample.cjs.map +1 -1
- package/_cjs/control/Sized/api.cjs +0 -8
- package/_cjs/control/Sized/api.cjs.map +1 -1
- package/_cjs/control/Sized/definition.cjs +0 -6
- package/_cjs/control/Sized/definition.cjs.map +1 -1
- package/_cjs/control/Sized/live.cjs +0 -12
- package/_cjs/control/Sized/live.cjs.map +1 -1
- package/_cjs/control/Sized.cjs +0 -6
- package/_cjs/control/Sized.cjs.map +1 -1
- package/_cjs/control/Spec/api.cjs +1 -82
- package/_cjs/control/Spec/api.cjs.map +1 -1
- package/_cjs/control/Spec/definition.cjs +6 -45
- package/_cjs/control/Spec/definition.cjs.map +1 -1
- package/_cjs/control/Spec.cjs +0 -4
- package/_cjs/control/Spec.cjs.map +1 -1
- package/_cjs/control/SummaryBuilder.cjs +0 -21
- package/_cjs/control/SummaryBuilder.cjs.map +1 -1
- package/_cjs/control/Test.cjs +0 -10
- package/_cjs/control/Test.cjs.map +1 -1
- package/_cjs/control/TestAnnotationRenderer/api.cjs +4 -31
- package/_cjs/control/TestAnnotationRenderer/api.cjs.map +1 -1
- package/_cjs/control/TestAnnotationRenderer/definition.cjs +2 -18
- package/_cjs/control/TestAnnotationRenderer/definition.cjs.map +1 -1
- package/_cjs/control/TestAnnotationRenderer.cjs +0 -4
- package/_cjs/control/TestAnnotationRenderer.cjs.map +1 -1
- package/_cjs/control/TestAspect/api.cjs +3 -44
- package/_cjs/control/TestAspect/api.cjs.map +1 -1
- package/_cjs/control/TestAspect.cjs +0 -4
- package/_cjs/control/TestAspect.cjs.map +1 -1
- package/_cjs/control/TestClock/api.cjs +10 -29
- package/_cjs/control/TestClock/api.cjs.map +1 -1
- package/_cjs/control/TestClock/definition.cjs +57 -107
- package/_cjs/control/TestClock/definition.cjs.map +1 -1
- package/_cjs/control/TestClock.cjs +0 -4
- package/_cjs/control/TestClock.cjs.map +1 -1
- package/_cjs/control/TestConsole/api.cjs +0 -18
- package/_cjs/control/TestConsole/api.cjs.map +1 -1
- package/_cjs/control/TestConsole/definition.cjs +24 -45
- package/_cjs/control/TestConsole/definition.cjs.map +1 -1
- package/_cjs/control/TestConsole.cjs +0 -4
- package/_cjs/control/TestConsole.cjs.map +1 -1
- package/_cjs/control/TestEnvironment.cjs +0 -12
- package/_cjs/control/TestEnvironment.cjs.map +1 -1
- package/_cjs/control/TestExecutor.cjs +0 -14
- package/_cjs/control/TestExecutor.cjs.map +1 -1
- package/_cjs/control/TestLogger.cjs +0 -15
- package/_cjs/control/TestLogger.cjs.map +1 -1
- package/_cjs/control/TestRandom/api.cjs +0 -30
- package/_cjs/control/TestRandom/api.cjs.map +1 -1
- package/_cjs/control/TestRandom/definition.cjs +56 -134
- package/_cjs/control/TestRandom/definition.cjs.map +1 -1
- package/_cjs/control/TestRandom.cjs +0 -4
- package/_cjs/control/TestRandom.cjs.map +1 -1
- package/_cjs/control/TestRenderer/ConsoleRenderer.cjs +0 -25
- package/_cjs/control/TestRenderer/ConsoleRenderer.cjs.map +1 -1
- package/_cjs/control/TestRunner.cjs +2 -19
- package/_cjs/control/TestRunner.cjs.map +1 -1
- package/_cjs/data/AssertionData.cjs +0 -14
- package/_cjs/data/AssertionData.cjs.map +1 -1
- package/_cjs/data/AssertionResult.cjs +0 -8
- package/_cjs/data/AssertionResult.cjs.map +1 -1
- package/_cjs/data/AssertionValue/api.cjs +1 -16
- package/_cjs/data/AssertionValue/api.cjs.map +1 -1
- package/_cjs/data/AssertionValue/definition.cjs +0 -8
- package/_cjs/data/AssertionValue/definition.cjs.map +1 -1
- package/_cjs/data/AssertionValue.cjs +0 -4
- package/_cjs/data/AssertionValue.cjs.map +1 -1
- package/_cjs/data/ExecutedSpec/api.cjs +4 -26
- package/_cjs/data/ExecutedSpec/api.cjs.map +1 -1
- package/_cjs/data/ExecutedSpec/definition.cjs +3 -21
- package/_cjs/data/ExecutedSpec/definition.cjs.map +1 -1
- package/_cjs/data/ExecutedSpec.cjs +0 -4
- package/_cjs/data/ExecutedSpec.cjs.map +1 -1
- package/_cjs/data/ExecutionResult.cjs +0 -29
- package/_cjs/data/ExecutionResult.cjs.map +1 -1
- package/_cjs/data/FailureDetails.cjs +0 -3
- package/_cjs/data/FailureDetails.cjs.map +1 -1
- package/_cjs/data/FreeBooleanAlgebra/api.cjs +4 -53
- package/_cjs/data/FreeBooleanAlgebra/api.cjs.map +1 -1
- package/_cjs/data/FreeBooleanAlgebra/definition.cjs +4 -24
- package/_cjs/data/FreeBooleanAlgebra/definition.cjs.map +1 -1
- package/_cjs/data/FreeBooleanAlgebra.cjs +0 -4
- package/_cjs/data/FreeBooleanAlgebra.cjs.map +1 -1
- package/_cjs/data/GenFailureDetails.cjs +0 -3
- package/_cjs/data/GenFailureDetails.cjs.map +1 -1
- package/_cjs/data/LogLine/Fragment.cjs +0 -22
- package/_cjs/data/LogLine/Fragment.cjs.map +1 -1
- package/_cjs/data/LogLine/Line.cjs +0 -32
- package/_cjs/data/LogLine/Line.cjs.map +1 -1
- package/_cjs/data/LogLine/Message.cjs +0 -34
- package/_cjs/data/LogLine/Message.cjs.map +1 -1
- package/_cjs/data/LogLine/Style.cjs +10 -44
- package/_cjs/data/LogLine/Style.cjs.map +1 -1
- package/_cjs/data/LogLine/api.cjs +0 -15
- package/_cjs/data/LogLine/api.cjs.map +1 -1
- package/_cjs/data/LogLine.cjs +0 -4
- package/_cjs/data/LogLine.cjs.map +1 -1
- package/_cjs/data/Render/api.cjs +0 -4
- package/_cjs/data/Render/api.cjs.map +1 -1
- package/_cjs/data/Render/definition.cjs +2 -16
- package/_cjs/data/Render/definition.cjs.map +1 -1
- package/_cjs/data/Render.cjs +0 -4
- package/_cjs/data/Render.cjs.map +1 -1
- package/_cjs/data/RenderParam/api.cjs +3 -15
- package/_cjs/data/RenderParam/api.cjs.map +1 -1
- package/_cjs/data/RenderParam/definition.cjs +2 -12
- package/_cjs/data/RenderParam/definition.cjs.map +1 -1
- package/_cjs/data/RenderParam.cjs +0 -4
- package/_cjs/data/RenderParam.cjs.map +1 -1
- package/_cjs/data/Summary.cjs +0 -3
- package/_cjs/data/Summary.cjs.map +1 -1
- package/_cjs/data/TestAnnotation/api.cjs +1 -16
- package/_cjs/data/TestAnnotation/api.cjs.map +1 -1
- package/_cjs/data/TestAnnotation/definition.cjs +4 -19
- package/_cjs/data/TestAnnotation/definition.cjs.map +1 -1
- package/_cjs/data/TestAnnotation.cjs +0 -4
- package/_cjs/data/TestAnnotation.cjs.map +1 -1
- package/_cjs/data/TestAnnotationMap.cjs +2 -17
- package/_cjs/data/TestAnnotationMap.cjs.map +1 -1
- package/_cjs/data/TestArgs/definition.cjs +0 -3
- package/_cjs/data/TestArgs/definition.cjs.map +1 -1
- package/_cjs/data/TestArgs.cjs +0 -2
- package/_cjs/data/TestArgs.cjs.map +1 -1
- package/_cjs/data/TestConfig.cjs +0 -17
- package/_cjs/data/TestConfig.cjs.map +1 -1
- package/_cjs/data/TestFailure.cjs +2 -23
- package/_cjs/data/TestFailure.cjs.map +1 -1
- package/_cjs/data/TestSuccess.cjs +2 -16
- package/_cjs/data/TestSuccess.cjs.map +1 -1
- package/_cjs/data/TestTimeoutException.cjs +0 -3
- package/_cjs/data/TestTimeoutException.cjs.map +1 -1
- package/_cjs/demo.cjs +0 -10
- package/_cjs/demo.cjs.map +1 -1
- package/_cjs/util/math.cjs +14 -142
- package/_cjs/util/math.cjs.map +1 -1
- package/_mjs/api.mjs +2 -13
- package/_mjs/api.mjs.map +1 -1
- package/_mjs/control/AbstractRunnableSpec.mjs +0 -6
- package/_mjs/control/AbstractRunnableSpec.mjs.map +1 -1
- package/_mjs/control/Annotations/api.mjs +0 -4
- package/_mjs/control/Annotations/api.mjs.map +1 -1
- package/_mjs/control/Annotations/definition.mjs +0 -2
- package/_mjs/control/Annotations/definition.mjs.map +1 -1
- package/_mjs/control/Annotations/live.mjs +9 -13
- package/_mjs/control/Annotations/live.mjs.map +1 -1
- package/_mjs/control/Annotations.mjs.map +1 -1
- package/_mjs/control/Assertion/api.mjs +6 -21
- package/_mjs/control/Assertion/api.mjs.map +1 -1
- package/_mjs/control/Assertion/definition.mjs +0 -2
- package/_mjs/control/Assertion/definition.mjs.map +1 -1
- package/_mjs/control/Assertion.mjs.map +1 -1
- package/_mjs/control/AssertionIO/api.mjs +0 -3
- package/_mjs/control/AssertionIO/api.mjs.map +1 -1
- package/_mjs/control/AssertionIO/definition.mjs +0 -3
- package/_mjs/control/AssertionIO/definition.mjs.map +1 -1
- package/_mjs/control/AssertionIO.mjs.map +1 -1
- package/_mjs/control/DefaultRunnableSpec.mjs +0 -1
- package/_mjs/control/DefaultRunnableSpec.mjs.map +1 -1
- package/_mjs/control/DefaultTestReporter/definition.mjs.map +1 -1
- package/_mjs/control/DefaultTestReporter/render.mjs +5 -38
- package/_mjs/control/DefaultTestReporter/render.mjs.map +1 -1
- package/_mjs/control/DefaultTestReporter.mjs.map +1 -1
- package/_mjs/control/FreeBooleanAlgebraIO/api.mjs +0 -8
- package/_mjs/control/FreeBooleanAlgebraIO/api.mjs.map +1 -1
- package/_mjs/control/FreeBooleanAlgebraIO/definition.mjs.map +1 -1
- package/_mjs/control/FreeBooleanAlgebraIO.mjs.map +1 -1
- package/_mjs/control/Gen/api.mjs +430 -120
- package/_mjs/control/Gen/api.mjs.map +1 -1
- package/_mjs/control/Gen/definition.mjs +0 -1
- package/_mjs/control/Gen/definition.mjs.map +1 -1
- package/_mjs/control/Gen.mjs +1 -10
- package/_mjs/control/Gen.mjs.map +1 -1
- package/_mjs/control/Live/definition.mjs +0 -5
- package/_mjs/control/Live/definition.mjs.map +1 -1
- package/_mjs/control/Live.mjs.map +1 -1
- package/_mjs/control/RunnableSpec.mjs +1 -4
- package/_mjs/control/RunnableSpec.mjs.map +1 -1
- package/_mjs/control/Sample/api.mjs +1 -31
- package/_mjs/control/Sample/api.mjs.map +1 -1
- package/_mjs/control/Sample/definition.mjs +0 -1
- package/_mjs/control/Sample/definition.mjs.map +1 -1
- package/_mjs/control/Sample.mjs.map +1 -1
- package/_mjs/control/Sized/api.mjs +0 -2
- package/_mjs/control/Sized/api.mjs.map +1 -1
- package/_mjs/control/Sized/definition.mjs +0 -2
- package/_mjs/control/Sized/definition.mjs.map +1 -1
- package/_mjs/control/Sized/live.mjs +0 -3
- package/_mjs/control/Sized/live.mjs.map +1 -1
- package/_mjs/control/Sized.mjs.map +1 -1
- package/_mjs/control/Spec/api.mjs +1 -45
- package/_mjs/control/Spec/api.mjs.map +1 -1
- package/_mjs/control/Spec/definition.mjs +6 -31
- package/_mjs/control/Spec/definition.mjs.map +1 -1
- package/_mjs/control/Spec.mjs.map +1 -1
- package/_mjs/control/SummaryBuilder.mjs +0 -5
- package/_mjs/control/SummaryBuilder.mjs.map +1 -1
- package/_mjs/control/Test.mjs +0 -1
- package/_mjs/control/Test.mjs.map +1 -1
- package/_mjs/control/TestAnnotationRenderer/api.mjs +4 -20
- package/_mjs/control/TestAnnotationRenderer/api.mjs.map +1 -1
- package/_mjs/control/TestAnnotationRenderer/definition.mjs +2 -8
- package/_mjs/control/TestAnnotationRenderer/definition.mjs.map +1 -1
- package/_mjs/control/TestAnnotationRenderer.mjs.map +1 -1
- package/_mjs/control/TestAspect/api.mjs +3 -7
- package/_mjs/control/TestAspect/api.mjs.map +1 -1
- package/_mjs/control/TestAspect.mjs.map +1 -1
- package/_mjs/control/TestClock/api.mjs +10 -13
- package/_mjs/control/TestClock/api.mjs.map +1 -1
- package/_mjs/control/TestClock/definition.mjs +57 -72
- package/_mjs/control/TestClock/definition.mjs.map +1 -1
- package/_mjs/control/TestClock.mjs.map +1 -1
- package/_mjs/control/TestConsole/api.mjs +0 -3
- package/_mjs/control/TestConsole/api.mjs.map +1 -1
- package/_mjs/control/TestConsole/definition.mjs +24 -31
- package/_mjs/control/TestConsole/definition.mjs.map +1 -1
- package/_mjs/control/TestConsole.mjs.map +1 -1
- package/_mjs/control/TestEnvironment.mjs.map +1 -1
- package/_mjs/control/TestExecutor.mjs.map +1 -1
- package/_mjs/control/TestLogger.mjs +0 -5
- package/_mjs/control/TestLogger.mjs.map +1 -1
- package/_mjs/control/TestRandom/api.mjs +0 -10
- package/_mjs/control/TestRandom/api.mjs.map +1 -1
- package/_mjs/control/TestRandom/definition.mjs +56 -113
- package/_mjs/control/TestRandom/definition.mjs.map +1 -1
- package/_mjs/control/TestRandom.mjs.map +1 -1
- package/_mjs/control/TestRenderer/ConsoleRenderer.mjs +0 -10
- package/_mjs/control/TestRenderer/ConsoleRenderer.mjs.map +1 -1
- package/_mjs/control/TestRunner.mjs +2 -6
- package/_mjs/control/TestRunner.mjs.map +1 -1
- package/_mjs/data/AssertionData.mjs +0 -5
- package/_mjs/data/AssertionData.mjs.map +1 -1
- package/_mjs/data/AssertionResult.mjs +0 -2
- package/_mjs/data/AssertionResult.mjs.map +1 -1
- package/_mjs/data/AssertionValue/api.mjs +1 -6
- package/_mjs/data/AssertionValue/api.mjs.map +1 -1
- package/_mjs/data/AssertionValue/definition.mjs +0 -2
- package/_mjs/data/AssertionValue/definition.mjs.map +1 -1
- package/_mjs/data/AssertionValue.mjs.map +1 -1
- package/_mjs/data/ExecutedSpec/api.mjs +3 -13
- package/_mjs/data/ExecutedSpec/api.mjs.map +1 -1
- package/_mjs/data/ExecutedSpec/definition.mjs +5 -13
- package/_mjs/data/ExecutedSpec/definition.mjs.map +1 -1
- package/_mjs/data/ExecutedSpec.mjs.map +1 -1
- package/_mjs/data/ExecutionResult.mjs +0 -16
- package/_mjs/data/ExecutionResult.mjs.map +1 -1
- package/_mjs/data/FailureDetails.mjs +0 -1
- package/_mjs/data/FailureDetails.mjs.map +1 -1
- package/_mjs/data/FreeBooleanAlgebra/api.mjs +4 -37
- package/_mjs/data/FreeBooleanAlgebra/api.mjs.map +1 -1
- package/_mjs/data/FreeBooleanAlgebra/definition.mjs +8 -16
- package/_mjs/data/FreeBooleanAlgebra/definition.mjs.map +1 -1
- package/_mjs/data/FreeBooleanAlgebra.mjs.map +1 -1
- package/_mjs/data/GenFailureDetails.mjs +0 -1
- package/_mjs/data/GenFailureDetails.mjs.map +1 -1
- package/_mjs/data/LogLine/Fragment.mjs +0 -9
- package/_mjs/data/LogLine/Fragment.mjs.map +1 -1
- package/_mjs/data/LogLine/Line.mjs +0 -15
- package/_mjs/data/LogLine/Line.mjs.map +1 -1
- package/_mjs/data/LogLine/Message.mjs +0 -18
- package/_mjs/data/LogLine/Message.mjs.map +1 -1
- package/_mjs/data/LogLine/Style.mjs +10 -39
- package/_mjs/data/LogLine/Style.mjs.map +1 -1
- package/_mjs/data/LogLine/api.mjs.map +1 -1
- package/_mjs/data/LogLine.mjs.map +1 -1
- package/_mjs/data/Render/api.mjs +0 -2
- package/_mjs/data/Render/api.mjs.map +1 -1
- package/_mjs/data/Render/definition.mjs +2 -8
- package/_mjs/data/Render/definition.mjs.map +1 -1
- package/_mjs/data/Render.mjs.map +1 -1
- package/_mjs/data/RenderParam/api.mjs +3 -10
- package/_mjs/data/RenderParam/api.mjs.map +1 -1
- package/_mjs/data/RenderParam/definition.mjs +4 -8
- package/_mjs/data/RenderParam/definition.mjs.map +1 -1
- package/_mjs/data/RenderParam.mjs.map +1 -1
- package/_mjs/data/Summary.mjs +0 -1
- package/_mjs/data/Summary.mjs.map +1 -1
- package/_mjs/data/TestAnnotation/api.mjs +1 -7
- package/_mjs/data/TestAnnotation/api.mjs.map +1 -1
- package/_mjs/data/TestAnnotation/definition.mjs +4 -8
- package/_mjs/data/TestAnnotation/definition.mjs.map +1 -1
- package/_mjs/data/TestAnnotation.mjs.map +1 -1
- package/_mjs/data/TestAnnotationMap.mjs +2 -8
- package/_mjs/data/TestAnnotationMap.mjs.map +1 -1
- package/_mjs/data/TestArgs/definition.mjs +0 -1
- package/_mjs/data/TestArgs/definition.mjs.map +1 -1
- package/_mjs/data/TestArgs.mjs.map +1 -1
- package/_mjs/data/TestConfig.mjs +0 -8
- package/_mjs/data/TestConfig.mjs.map +1 -1
- package/_mjs/data/TestFailure.mjs +4 -12
- package/_mjs/data/TestFailure.mjs.map +1 -1
- package/_mjs/data/TestSuccess.mjs +4 -10
- package/_mjs/data/TestSuccess.mjs.map +1 -1
- package/_mjs/data/TestTimeoutException.mjs +0 -1
- package/_mjs/data/TestTimeoutException.mjs.map +1 -1
- package/_mjs/demo.mjs +0 -3
- package/_mjs/demo.mjs.map +1 -1
- package/_mjs/util/math.mjs +14 -111
- package/_mjs/util/math.mjs.map +1 -1
- package/_src/api.ts +2 -2
- package/_src/control/AbstractRunnableSpec.ts +0 -3
- package/_src/control/Annotations/live.ts +4 -6
- package/_src/control/Assertion/api.ts +5 -5
- package/_src/control/DefaultTestReporter/render.ts +1 -1
- package/_src/control/Gen/api.ts +429 -40
- package/_src/control/Gen.ts +0 -9
- package/_src/control/RunnableSpec.ts +1 -1
- package/_src/control/Sample/api.ts +1 -1
- package/_src/control/Spec/api.ts +1 -1
- package/_src/control/TestAspect/api.ts +2 -2
- package/_src/control/TestClock/definition.ts +9 -8
- package/_src/control/TestConsole/definition.ts +1 -1
- package/_src/control/TestRunner.ts +0 -3
- package/_src/data/AssertionValue/api.ts +1 -1
- package/_src/data/ExecutedSpec/api.ts +3 -3
- package/_src/data/RenderParam/api.ts +1 -1
- package/_src/data/TestAnnotation/api.ts +1 -1
- package/_src/data/TestAnnotationMap.ts +2 -2
- package/api.d.ts +2 -2
- package/control/AbstractRunnableSpec.d.ts +0 -1
- package/control/Annotations/live.d.ts +1 -1
- package/control/Assertion/api.d.ts +2 -2
- package/control/Gen/api.d.ts +207 -24
- package/control/Gen.d.ts +0 -7
- package/control/TestClock/definition.d.ts +2 -2
- package/control/TestConsole/definition.d.ts +3 -3
- package/control/TestRandom/definition.d.ts +1 -1
- package/control/TestRunner.d.ts +1 -3
- package/data/ExecutedSpec/api.d.ts +2 -2
- package/data/TestAnnotation/api.d.ts +1 -1
- package/data/TestAnnotation/definition.d.ts +2 -2
- package/package.json +4 -4
- package/_cjs/control/Gen/api/array.cjs +0 -56
- package/_cjs/control/Gen/api/array.cjs.map +0 -1
- package/_cjs/control/Gen/api/char.cjs +0 -129
- package/_cjs/control/Gen/api/char.cjs.map +0 -1
- package/_cjs/control/Gen/api/conc.cjs +0 -82
- package/_cjs/control/Gen/api/conc.cjs.map +0 -1
- package/_cjs/control/Gen/api/double.cjs +0 -82
- package/_cjs/control/Gen/api/double.cjs.map +0 -1
- package/_cjs/control/Gen/api/float.cjs +0 -55
- package/_cjs/control/Gen/api/float.cjs.map +0 -1
- package/_cjs/control/Gen/api/string.cjs +0 -106
- package/_cjs/control/Gen/api/string.cjs.map +0 -1
- package/_cjs/control/Gen/api/struct.cjs +0 -36
- package/_cjs/control/Gen/api/struct.cjs.map +0 -1
- package/_mjs/control/Gen/api/array.mjs +0 -37
- package/_mjs/control/Gen/api/array.mjs.map +0 -1
- package/_mjs/control/Gen/api/char.mjs +0 -95
- package/_mjs/control/Gen/api/char.mjs.map +0 -1
- package/_mjs/control/Gen/api/conc.mjs +0 -57
- package/_mjs/control/Gen/api/conc.mjs.map +0 -1
- package/_mjs/control/Gen/api/double.mjs +0 -60
- package/_mjs/control/Gen/api/double.mjs.map +0 -1
- package/_mjs/control/Gen/api/float.mjs +0 -41
- package/_mjs/control/Gen/api/float.mjs.map +0 -1
- package/_mjs/control/Gen/api/string.mjs +0 -76
- package/_mjs/control/Gen/api/string.mjs.map +0 -1
- package/_mjs/control/Gen/api/struct.mjs +0 -18
- package/_mjs/control/Gen/api/struct.mjs.map +0 -1
- package/_src/control/Gen/api/array.ts +0 -34
- package/_src/control/Gen/api/char.ts +0 -83
- package/_src/control/Gen/api/conc.ts +0 -53
- package/_src/control/Gen/api/double.ts +0 -64
- package/_src/control/Gen/api/float.ts +0 -36
- package/_src/control/Gen/api/string.ts +0 -75
- package/_src/control/Gen/api/struct.ts +0 -31
- package/control/Gen/api/array.d.ts +0 -18
- package/control/Gen/api/char.d.ts +0 -47
- package/control/Gen/api/conc.d.ts +0 -25
- package/control/Gen/api/double.d.ts +0 -13
- package/control/Gen/api/float.d.ts +0 -7
- package/control/Gen/api/string.d.ts +0 -48
- package/control/Gen/api/struct.d.ts +0 -8
package/_src/control/Gen/api.ts
CHANGED
@@ -1,64 +1,211 @@
|
|
1
|
-
import type { NumberConstraints } from "./constraints.js";
|
1
|
+
import type { EqConstraint, FloatConstraints, LengthConstraints, NumberConstraints } from "./constraints.js";
|
2
2
|
import type { _A, _R } from "@fncts/base/types.js";
|
3
|
+
import type { ArrayInt64 } from "@fncts/base/util/rand";
|
3
4
|
|
4
5
|
import { SortedMap } from "@fncts/base/collection/immutable/SortedMap";
|
5
6
|
import { IllegalArgumentError, NoSuchElementError } from "@fncts/base/data/exceptions";
|
6
7
|
import { tuple } from "@fncts/base/data/function";
|
7
8
|
import { identity } from "@fncts/base/data/function";
|
8
9
|
|
9
|
-
import {
|
10
|
+
import {
|
11
|
+
add64,
|
12
|
+
clamp,
|
13
|
+
computeArrayInt64GenerateRange,
|
14
|
+
indexToDouble,
|
15
|
+
indexToFloat,
|
16
|
+
isStrictlyPositive64,
|
17
|
+
isStrictlySmaller64,
|
18
|
+
MAX_VALUE_32,
|
19
|
+
safeDoubleToIndex,
|
20
|
+
safeFloatToIndex,
|
21
|
+
substract64,
|
22
|
+
Unit64,
|
23
|
+
} from "../../util/math.js";
|
10
24
|
import { Sample } from "../Sample.js";
|
11
25
|
import { Sized } from "../Sized.js";
|
12
26
|
import { Gen } from "./definition.js";
|
13
27
|
|
28
|
+
const gapSize = 0xdfff + 1 - 0xd800;
|
29
|
+
|
30
|
+
/**
|
31
|
+
* @tsplus static fncts.test.GenOps size
|
32
|
+
*/
|
33
|
+
export const size: Gen<Sized, number> = Gen.fromIO(Sized.size);
|
34
|
+
|
35
|
+
/**
|
36
|
+
* @tsplus static fncts.test.GenOps uniform
|
37
|
+
*/
|
38
|
+
export const uniform: Gen<never, number> = Gen.fromIOSample(Random.nextDouble.map(Sample.shrinkFractional(0.0)));
|
39
|
+
|
40
|
+
/**
|
41
|
+
* @tsplus static fncts.test.GenOps alphaNumericChar
|
42
|
+
*/
|
43
|
+
export const alphaNumericChar: Gen<never, string> = Gen.weighted(
|
44
|
+
[Gen.char({ min: 48, max: 57 }), 10],
|
45
|
+
[Gen.char({ min: 65, max: 90 }), 26],
|
46
|
+
[Gen.char({ min: 97, max: 122 }), 26],
|
47
|
+
);
|
48
|
+
|
49
|
+
/**
|
50
|
+
* @tsplus static fncts.test.GenOps alphaNumericStringWith
|
51
|
+
*/
|
52
|
+
export function alphaNumericStringWith(constraints: LengthConstraints = {}): Gen<Sized, string> {
|
53
|
+
return alphaNumericChar.string(constraints);
|
54
|
+
}
|
55
|
+
|
56
|
+
/**
|
57
|
+
* @tsplus static fncts.test.GenOps alphaNumericString
|
58
|
+
*/
|
59
|
+
export const alphaNumericString: Gen<Sized, string> = alphaNumericChar.string();
|
60
|
+
|
61
|
+
/**
|
62
|
+
* @tsplus getter fncts.test.Gen array
|
63
|
+
*/
|
64
|
+
export function array<R, A>(self: Gen<R, A>): Gen<R | Sized, ReadonlyArray<A>> {
|
65
|
+
return self.arrayWith();
|
66
|
+
}
|
67
|
+
|
68
|
+
/**
|
69
|
+
* @tsplus pipeable fncts.test.Gen arrayWith
|
70
|
+
*/
|
71
|
+
export function arrayWith(constraints: LengthConstraints = {}) {
|
72
|
+
return <R, A>(g: Gen<R, A>): Gen<R | Sized, ReadonlyArray<A>> => {
|
73
|
+
const minLength = constraints.minLength || 0;
|
74
|
+
return constraints.maxLength
|
75
|
+
? Gen.intWith({ min: minLength, max: constraints.maxLength }).flatMap((n) => g.arrayN(n))
|
76
|
+
: Gen.small((n) => g.arrayN(n), minLength);
|
77
|
+
};
|
78
|
+
}
|
79
|
+
|
80
|
+
/**
|
81
|
+
* @tsplus pipeable fncts.test.Gen arrayN
|
82
|
+
*/
|
83
|
+
export function arrayN(n: number) {
|
84
|
+
return <R, A>(self: Gen<R, A>): Gen<R, ReadonlyArray<A>> => {
|
85
|
+
return self.concN(n).map((conc) => conc.toArray);
|
86
|
+
};
|
87
|
+
}
|
88
|
+
|
89
|
+
/**
|
90
|
+
* @tsplus static fncts.test.GenOps arrayInt64
|
91
|
+
*/
|
92
|
+
export function arrayInt64(min: ArrayInt64, max: ArrayInt64): Gen<never, ArrayInt64> {
|
93
|
+
return new Gen(
|
94
|
+
Stream.fromIO(computeArrayInt64GenerateRange(min, max, undefined, undefined))
|
95
|
+
.flatMap(({ min, max }) => Stream.repeatIO(Random.nextArrayIntBetween(min, max)))
|
96
|
+
.map((uncheckedValue) => {
|
97
|
+
if (uncheckedValue.data.length === 1) {
|
98
|
+
uncheckedValue.data.unshift(0);
|
99
|
+
}
|
100
|
+
return Just(Sample.shrinkArrayInt64(min)(uncheckedValue as ArrayInt64));
|
101
|
+
}),
|
102
|
+
);
|
103
|
+
}
|
104
|
+
|
105
|
+
/**
|
106
|
+
* @tsplus static fncts.test.GenOps asciiChar
|
107
|
+
*/
|
108
|
+
export const asciiChar: Gen<never, string> = _char(0x00, 0x7f, indexToPrintableIndex);
|
109
|
+
|
110
|
+
/**
|
111
|
+
* @tsplus static fncts.test.GenOps asciiStringWith
|
112
|
+
*/
|
113
|
+
export function asciiStringWith(constraints?: LengthConstraints): Gen<Sized, string> {
|
114
|
+
return asciiChar.string(constraints);
|
115
|
+
}
|
116
|
+
|
117
|
+
/**
|
118
|
+
* @tsplus static fncts.test.GenOps asciiString
|
119
|
+
*/
|
120
|
+
export const asciiString: Gen<Sized, string> = asciiStringWith();
|
121
|
+
|
122
|
+
/**
|
123
|
+
* @tsplus static fncts.test.GenOps base64Char
|
124
|
+
*/
|
125
|
+
export const base64Char: Gen<never, string> = _char(0, 63, base64ToCharCode);
|
126
|
+
|
14
127
|
/**
|
15
|
-
* @tsplus static fncts.test.GenOps
|
128
|
+
* @tsplus static fncts.test.GenOps base64String
|
16
129
|
*/
|
17
|
-
export const
|
130
|
+
export const base64String: Gen<Sized, string> = Gen.base64StringWith();
|
131
|
+
|
132
|
+
/**
|
133
|
+
* @tsplus static fncts.test.GenOps base64StringWith
|
134
|
+
*/
|
135
|
+
export function base64StringWith(constraints: LengthConstraints = {}): Gen<Sized, string> {
|
136
|
+
return base64Char.string(constraints);
|
137
|
+
}
|
138
|
+
|
139
|
+
/**
|
140
|
+
* @tsplus static fncts.test.GenOps bigInt
|
141
|
+
*/
|
142
|
+
export const bigInt: Gen<never, bigint> = Gen.fromIOSample(
|
18
143
|
Random.nextBigIntBetween(BigInt(-1) << BigInt(255), (BigInt(1) << BigInt(255)) - BigInt(1)).map(
|
19
144
|
Sample.shrinkBigInt(BigInt(0)),
|
20
145
|
),
|
21
146
|
);
|
22
147
|
|
23
148
|
/**
|
24
|
-
* @tsplus static fncts.test.GenOps
|
149
|
+
* @tsplus static fncts.test.GenOps boolean
|
25
150
|
*/
|
26
|
-
export const
|
151
|
+
export const boolean: Gen<never, boolean> = Gen.defer(Gen.oneOf(Gen.constant(true), Gen.constant(false)));
|
27
152
|
|
28
153
|
/**
|
29
|
-
* @tsplus static fncts.test.GenOps
|
154
|
+
* @tsplus static fncts.test.GenOps bounded
|
30
155
|
*/
|
31
|
-
export
|
156
|
+
export function bounded<R, A>(min: number, max: number, f: (n: number) => Gen<R, A>): Gen<R, A> {
|
157
|
+
return Gen.intWith({ min, max }).flatMap(f);
|
158
|
+
}
|
32
159
|
|
33
160
|
/**
|
34
|
-
* @tsplus static fncts.test.GenOps
|
161
|
+
* @tsplus static fncts.test.GenOps char
|
35
162
|
*/
|
36
|
-
export function
|
37
|
-
return
|
163
|
+
export function char(constraints: Required<NumberConstraints>): Gen<never, string> {
|
164
|
+
return _char(constraints.min, constraints.max, identity);
|
38
165
|
}
|
39
166
|
|
40
167
|
/**
|
41
|
-
* @tsplus static fncts.test.GenOps
|
168
|
+
* @tsplus static fncts.test.GenOps char16
|
42
169
|
*/
|
43
|
-
export
|
44
|
-
|
170
|
+
export const char16: Gen<never, string> = _char(0x0000, 0xffff, indexToPrintableIndex);
|
171
|
+
|
172
|
+
/**
|
173
|
+
* @tsplus pipeable fncts.test.Gen conc
|
174
|
+
*/
|
175
|
+
export function concWith(constraints: LengthConstraints = {}) {
|
176
|
+
return <R, A>(self: Gen<R, A>): Gen<R | Sized, Conc<A>> => {
|
177
|
+
const minLength = constraints.minLength ?? 0;
|
178
|
+
return constraints.maxLength
|
179
|
+
? Gen.intWith({ min: minLength, max: constraints.maxLength }).flatMap((n) => self.concN(n))
|
180
|
+
: Gen.small((n) => self.concN(n), minLength);
|
181
|
+
};
|
45
182
|
}
|
46
183
|
|
47
184
|
/**
|
48
|
-
* @tsplus
|
185
|
+
* @tsplus getter fncts.test.Gen conc
|
49
186
|
*/
|
50
|
-
export function
|
51
|
-
return
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
187
|
+
export function conc<R, A>(self: Gen<R, A>): Gen<R | Sized, Conc<A>> {
|
188
|
+
return self.conc();
|
189
|
+
}
|
190
|
+
|
191
|
+
/**
|
192
|
+
* @tsplus pipeable fncts.test.Gen concN
|
193
|
+
*/
|
194
|
+
export function concN(n: number) {
|
195
|
+
return <R, A>(g: Gen<R, A>): Gen<R, Conc<A>> => {
|
196
|
+
return Conc.replicate(n, g).foldLeft(Gen.constant(Conc.empty()) as Gen<R, Conc<A>>, (gen, a) =>
|
197
|
+
gen.zipWith(a, (as, a) => as.append(a)),
|
58
198
|
);
|
59
199
|
};
|
60
200
|
}
|
61
201
|
|
202
|
+
/**
|
203
|
+
* @tsplus static fncts.test.GenOps constant
|
204
|
+
*/
|
205
|
+
export function constant<A>(a: A): Gen<never, A> {
|
206
|
+
return new Gen(Stream.succeedNow(Just(Sample.noShrink(a))));
|
207
|
+
}
|
208
|
+
|
62
209
|
/**
|
63
210
|
* @tsplus static fncts.test.GenOps defer
|
64
211
|
*/
|
@@ -66,11 +213,52 @@ export function defer<R, A>(gen: Lazy<Gen<R, A>>): Gen<R, A> {
|
|
66
213
|
return Gen.fromIO(IO.succeed(gen)).flatten;
|
67
214
|
}
|
68
215
|
|
216
|
+
/**
|
217
|
+
* @tsplus static fncts.test.GenOps double
|
218
|
+
*/
|
219
|
+
export const double: Gen<never, number> = Gen.fromIOSample(Random.nextDouble.map(Sample.shrinkFractional(0)));
|
220
|
+
|
221
|
+
/**
|
222
|
+
* @tsplus static fncts.test.GenOps doubleWith
|
223
|
+
*/
|
224
|
+
export function doubleWith(constraints: NumberConstraints & FloatConstraints = {}): Gen<never, number> {
|
225
|
+
const {
|
226
|
+
noDefaultInfinity = false,
|
227
|
+
noNaN = false,
|
228
|
+
min = noDefaultInfinity ? -Number.MAX_VALUE : Number.NEGATIVE_INFINITY,
|
229
|
+
max = noDefaultInfinity ? Number.MAX_VALUE : Number.POSITIVE_INFINITY,
|
230
|
+
} = constraints;
|
231
|
+
return Gen.unwrap(
|
232
|
+
IO.gen(function* (_) {
|
233
|
+
const minIndex = yield* _(safeDoubleToIndex(min, "min"));
|
234
|
+
const maxIndex = yield* _(safeDoubleToIndex(max, "max"));
|
235
|
+
if (isStrictlySmaller64(maxIndex, minIndex)) {
|
236
|
+
return yield* _(IO.haltNow(new IllegalArgumentError("min must be less than or equal to max", "Gen.double")));
|
237
|
+
}
|
238
|
+
if (noNaN) {
|
239
|
+
return arrayInt64(minIndex, maxIndex).map(indexToDouble);
|
240
|
+
}
|
241
|
+
const positiveMaxIdx = isStrictlyPositive64(maxIndex);
|
242
|
+
const minIndexWithNaN = positiveMaxIdx ? minIndex : substract64(minIndex, Unit64);
|
243
|
+
const maxIndexWithNaN = positiveMaxIdx ? add64(maxIndex, Unit64) : maxIndex;
|
244
|
+
return arrayInt64(minIndexWithNaN, maxIndexWithNaN).map((index) => {
|
245
|
+
if (isStrictlySmaller64(maxIndex, index) || isStrictlySmaller64(index, minIndex)) return Number.NaN;
|
246
|
+
else return indexToDouble(index);
|
247
|
+
});
|
248
|
+
}),
|
249
|
+
);
|
250
|
+
}
|
251
|
+
|
69
252
|
/**
|
70
253
|
* @tsplus static fncts.test.GenOps empty
|
71
254
|
*/
|
72
255
|
export const empty: Gen<never, never> = new Gen(Stream.empty);
|
73
256
|
|
257
|
+
/**
|
258
|
+
* @tsplus static fncts.test.GenOps exponential
|
259
|
+
*/
|
260
|
+
export const exponential: Gen<never, number> = Gen.uniform.map((n) => -Math.log(1 - n));
|
261
|
+
|
74
262
|
/**
|
75
263
|
* @tsplus pipeable fncts.test.Gen filter
|
76
264
|
*/
|
@@ -91,6 +279,21 @@ export function filterNot<A>(p: Predicate<A>) {
|
|
91
279
|
};
|
92
280
|
}
|
93
281
|
|
282
|
+
/**
|
283
|
+
* @tsplus pipeable fncts.test.Gen flatMap
|
284
|
+
*/
|
285
|
+
export function flatMap<A, R1, B>(f: (a: A) => Gen<R1, B>) {
|
286
|
+
return <R>(ma: Gen<R, A>): Gen<R | R1, B> => {
|
287
|
+
return new Gen(
|
288
|
+
Sample.flatMapStream(ma.sample, (sample) => {
|
289
|
+
const values = f(sample.value).sample;
|
290
|
+
const shrinks = new Gen(sample.shrink).flatMap((a) => f(a)).sample;
|
291
|
+
return values.map((maybeSample) => maybeSample.map((sample) => sample.flatMap((b) => new Sample(b, shrinks))));
|
292
|
+
}),
|
293
|
+
);
|
294
|
+
};
|
295
|
+
}
|
296
|
+
|
94
297
|
/**
|
95
298
|
* @tsplus getter fncts.test.Gen flatten
|
96
299
|
*/
|
@@ -112,16 +315,77 @@ export function fromIOSample<R, A>(effect: IO<R, never, Sample<R, A>>): Gen<R, A
|
|
112
315
|
return new Gen(Stream.fromIO(effect.map(Maybe.just)));
|
113
316
|
}
|
114
317
|
|
318
|
+
/**
|
319
|
+
* @tsplus static fncts.test.GenOps floatWith
|
320
|
+
*/
|
321
|
+
export function floatWith(constraints: NumberConstraints & FloatConstraints = {}): Gen<never, number> {
|
322
|
+
const {
|
323
|
+
noDefaultInfinity = false,
|
324
|
+
min = noDefaultInfinity ? -MAX_VALUE_32 : Number.NEGATIVE_INFINITY,
|
325
|
+
max = noDefaultInfinity ? MAX_VALUE_32 : Number.POSITIVE_INFINITY,
|
326
|
+
noNaN = false,
|
327
|
+
} = constraints;
|
328
|
+
return Gen.unwrap(
|
329
|
+
IO.gen(function* (_) {
|
330
|
+
const minIndex = yield* _(safeFloatToIndex(min, "min"));
|
331
|
+
const maxIndex = yield* _(safeFloatToIndex(max, "max"));
|
332
|
+
if (minIndex > maxIndex) {
|
333
|
+
return yield* _(
|
334
|
+
IO.haltNow(new Error("Gen.float constraints.min must be less than or equal to constraints.max")),
|
335
|
+
);
|
336
|
+
}
|
337
|
+
if (noNaN) {
|
338
|
+
return Gen.intWith({ min: minIndex, max: maxIndex }).map(indexToFloat);
|
339
|
+
}
|
340
|
+
const minIndexWithNaN = maxIndex > 0 ? minIndex : minIndex - 1;
|
341
|
+
const maxIndexWithNaN = maxIndex > 0 ? maxIndex + 1 : maxIndex;
|
342
|
+
return Gen.intWith({ min: minIndexWithNaN, max: maxIndexWithNaN }).map((index) => {
|
343
|
+
if (index > maxIndex || index < minIndex) return Number.NaN;
|
344
|
+
else return indexToFloat(index);
|
345
|
+
});
|
346
|
+
}),
|
347
|
+
);
|
348
|
+
}
|
349
|
+
|
350
|
+
/**
|
351
|
+
* @tsplus static fncts.test.GenOps fullUnicodeChar
|
352
|
+
*/
|
353
|
+
export const fullUnicodeChar: Gen<never, string> = _char(0x0000, 0x10ffff - gapSize, unicodeToCharCode);
|
354
|
+
|
355
|
+
/**
|
356
|
+
* @tsplus static fncts.test.GenOps fullUnicodeString
|
357
|
+
*/
|
358
|
+
export function fullUnicodeString(constraints: LengthConstraints = {}): Gen<Sized, string> {
|
359
|
+
return fullUnicodeChar.string(constraints);
|
360
|
+
}
|
361
|
+
|
362
|
+
/**
|
363
|
+
* @tsplus static fncts.test.GenOps hexChar
|
364
|
+
*/
|
365
|
+
export const hexChar: Gen<never, string> = _char(0, 15, hexToCharCode);
|
366
|
+
|
367
|
+
/**
|
368
|
+
* @tsplus static fncts.test.GenOps hexString
|
369
|
+
*/
|
370
|
+
export function hexString(constraints: LengthConstraints = {}): Gen<Sized, string> {
|
371
|
+
return hexChar.string(constraints);
|
372
|
+
}
|
373
|
+
|
115
374
|
/**
|
116
375
|
* @tsplus static fncts.test.GenOps int
|
117
376
|
*/
|
118
|
-
export
|
377
|
+
export const int: Gen<never, number> = Gen.fromIOSample(Random.nextInt.map(Sample.shrinkIntegral(0)));
|
378
|
+
|
379
|
+
/**
|
380
|
+
* @tsplus static fncts.test.GenOps intWith
|
381
|
+
*/
|
382
|
+
export function intWith(constraints: NumberConstraints = {}): Gen<never, number> {
|
119
383
|
return Gen.fromIOSample(
|
120
384
|
IO.defer(() => {
|
121
385
|
const min = constraints.min ?? -0x80000000;
|
122
386
|
const max = constraints.max ?? 0x7fffffff;
|
123
387
|
if (min > max || min < Number.MIN_SAFE_INTEGER || max > Number.MAX_SAFE_INTEGER) {
|
124
|
-
return IO.haltNow(new IllegalArgumentError("invalid bounds", "Gen.
|
388
|
+
return IO.haltNow(new IllegalArgumentError("invalid bounds", "Gen.intWith"));
|
125
389
|
} else {
|
126
390
|
return Random.nextIntBetween(min, max).map(Sample.shrinkIntegral(min));
|
127
391
|
}
|
@@ -154,16 +418,6 @@ export function mapIO<A, R1, B>(f: (a: A) => IO<R1, never, B>) {
|
|
154
418
|
};
|
155
419
|
}
|
156
420
|
|
157
|
-
/**
|
158
|
-
* @tsplus static fncts.test.GenOps exponential
|
159
|
-
*/
|
160
|
-
export const exponential: Gen<never, number> = Gen.uniform.map((n) => -Math.log(1 - n));
|
161
|
-
|
162
|
-
/**
|
163
|
-
* @tsplus static fncts.test.GenOps size
|
164
|
-
*/
|
165
|
-
export const size: Gen<Sized, number> = Gen.fromIO(Sized.size);
|
166
|
-
|
167
421
|
/**
|
168
422
|
* @tsplus static fncts.test.GenOps medium
|
169
423
|
*/
|
@@ -198,7 +452,7 @@ export function memo<R, A>(builder: (maxDepth: number) => Gen<R, A>): (maxDepth?
|
|
198
452
|
* @tsplus static fncts.test.GenOps nat
|
199
453
|
*/
|
200
454
|
export function nat(max = 0x7fffffff): Gen<unknown, number> {
|
201
|
-
return Gen.
|
455
|
+
return Gen.intWith({ min: 0, max: clamp(max, 0, max) });
|
202
456
|
}
|
203
457
|
|
204
458
|
/**
|
@@ -206,9 +460,28 @@ export function nat(max = 0x7fffffff): Gen<unknown, number> {
|
|
206
460
|
*/
|
207
461
|
export function oneOf<A extends ReadonlyArray<Gen<any, any>>>(...gens: A): Gen<_R<A[number]>, _A<A[number]>> {
|
208
462
|
if (gens.isEmpty()) return Gen.empty;
|
209
|
-
else return Gen.
|
463
|
+
else return Gen.intWith({ min: 0, max: gens.length - 1 }).flatMap((i) => gens[i]!);
|
464
|
+
}
|
465
|
+
|
466
|
+
export function partial<P extends Record<string, Gen<any, any>>>(
|
467
|
+
properties: P,
|
468
|
+
): Gen<
|
469
|
+
_R<P[keyof P]>,
|
470
|
+
Partial<{
|
471
|
+
readonly [K in keyof P]: _A<P[K]>;
|
472
|
+
}>
|
473
|
+
> {
|
474
|
+
const entries = Object.entries(properties);
|
475
|
+
return entries.foldLeft(Gen.constant({}) as Gen<any, any>, (b, [k, gen]) =>
|
476
|
+
Gen.unwrap(Random.nextBoolean.ifIO(IO.succeed(b.zipWith(gen, (r, a) => ({ ...r, [k]: a }))), IO.succeed(b))),
|
477
|
+
);
|
210
478
|
}
|
211
479
|
|
480
|
+
/**
|
481
|
+
* @tsplus static fncts.test.GenOps printableChar
|
482
|
+
*/
|
483
|
+
export const printableChar: Gen<never, string> = Gen.char({ min: 0x20, max: 0x7e });
|
484
|
+
|
212
485
|
/**
|
213
486
|
* @tsplus pipeable fncts.test.Gen reshrink
|
214
487
|
*/
|
@@ -239,6 +512,48 @@ export function small<R, A>(f: (size: number) => Gen<R, A>, min = 0): Gen<R | Si
|
|
239
512
|
.flatMap(f);
|
240
513
|
}
|
241
514
|
|
515
|
+
/**
|
516
|
+
* @tsplus static fncts.test.GenOps string16
|
517
|
+
*/
|
518
|
+
export function string16(constraints: LengthConstraints = {}): Gen<Sized, string> {
|
519
|
+
return char16.string(constraints);
|
520
|
+
}
|
521
|
+
|
522
|
+
/**
|
523
|
+
* @tsplus pipeable fncts.test.Gen string
|
524
|
+
*/
|
525
|
+
export function string(constraints: LengthConstraints = {}) {
|
526
|
+
return <R>(char: Gen<R, string>): Gen<R | Sized, string> => {
|
527
|
+
const min = constraints.minLength || 0;
|
528
|
+
return constraints.maxLength
|
529
|
+
? Gen.bounded(min, constraints.maxLength, (n) => char.stringN(n))
|
530
|
+
: Gen.small((n) => char.stringN(n), min);
|
531
|
+
};
|
532
|
+
}
|
533
|
+
|
534
|
+
/**
|
535
|
+
* @tsplus pipeable fncts.test.Gen stringN
|
536
|
+
*/
|
537
|
+
export function stringN(n: number) {
|
538
|
+
return <R>(char: Gen<R, string>): Gen<R, string> => {
|
539
|
+
return char.arrayN(n).map((arr) => arr.join(""));
|
540
|
+
};
|
541
|
+
}
|
542
|
+
|
543
|
+
export function struct<P extends Record<string, Gen<any, any>>>(
|
544
|
+
properties: P,
|
545
|
+
): Gen<
|
546
|
+
_R<P[keyof P]>,
|
547
|
+
{
|
548
|
+
readonly [K in keyof P]: _A<P[K]>;
|
549
|
+
}
|
550
|
+
> {
|
551
|
+
const entries = Object.entries(properties);
|
552
|
+
return entries.foldLeft(Gen.constant({}) as Gen<any, any>, (b, [k, gen]) =>
|
553
|
+
b.zipWith(gen, (out, a) => ({ ...out, [k]: a })),
|
554
|
+
);
|
555
|
+
}
|
556
|
+
|
242
557
|
/**
|
243
558
|
* @tsplus static fncts.test.GenOps unfoldGen
|
244
559
|
*/
|
@@ -255,9 +570,49 @@ export function unfoldGenN<S, R, A>(n: number, s: S, f: (s: S) => Gen<R, readonl
|
|
255
570
|
}
|
256
571
|
|
257
572
|
/**
|
258
|
-
* @tsplus static fncts.test.GenOps
|
573
|
+
* @tsplus static fncts.test.GenOps unicodeChar
|
259
574
|
*/
|
260
|
-
export const
|
575
|
+
export const unicodeChar: Gen<never, string> = _char(0x0000, 0xffff - gapSize, unicodeToCharCode);
|
576
|
+
|
577
|
+
/**
|
578
|
+
* @tsplus static fncts.test.GenOps unicodeString
|
579
|
+
*/
|
580
|
+
export function unicodeString(constraints: LengthConstraints = {}): Gen<Sized, string> {
|
581
|
+
return unicodeChar.string(constraints);
|
582
|
+
}
|
583
|
+
|
584
|
+
/**
|
585
|
+
* @tsplus pipeable fncts.test.Gen uniqueArray
|
586
|
+
*/
|
587
|
+
export function uniqueArray<A>(constraints: LengthConstraints & EqConstraint<A> = {}) {
|
588
|
+
return <R>(gen: Gen<R, A>): Gen<Sized | R, ReadonlyArray<A>> => {
|
589
|
+
return gen.uniqueConc(constraints).map((conc) => conc.toArray);
|
590
|
+
};
|
591
|
+
}
|
592
|
+
|
593
|
+
/**
|
594
|
+
* @tsplus pipeable fncts.test.Gen uniqueConc
|
595
|
+
*/
|
596
|
+
export function uniqueConc<A>(constraints: LengthConstraints & EqConstraint<A> = {}) {
|
597
|
+
return <R>(self: Gen<R, A>): Gen<Sized | R, Conc<A>> => {
|
598
|
+
const minLength = constraints.minLength ?? 0;
|
599
|
+
const eq = constraints.eq ?? Eq({ equals: (y) => (x) => Equatable.strictEquals(x, y) });
|
600
|
+
return constraints.maxLength
|
601
|
+
? Gen.bounded(minLength, constraints.maxLength, (n) => self.uniqueConcN(n, eq))
|
602
|
+
: Gen.small((n) => self.uniqueConcN(n, eq), minLength);
|
603
|
+
};
|
604
|
+
}
|
605
|
+
|
606
|
+
/**
|
607
|
+
* @tsplus pipeable fncts.test.Gen uniqueConcN
|
608
|
+
*/
|
609
|
+
export function uniqueConcN<A>(n: number, /** @tsplus auto */ E: Eq<A>) {
|
610
|
+
return <R>(self: Gen<R, A>): Gen<R, Conc<A>> => {
|
611
|
+
return Conc.replicate(n, self).foldLeft(Gen.constant(Conc.empty()) as Gen<R, Conc<A>>, (gen, a) =>
|
612
|
+
gen.zipWith(a, (as, a) => (as.elem(a, E) ? as : as.append(a))),
|
613
|
+
);
|
614
|
+
};
|
615
|
+
}
|
261
616
|
|
262
617
|
/**
|
263
618
|
* @tsplus static fncts.test.GenOps unwrap
|
@@ -272,7 +627,7 @@ export function unwrap<R, R1, A>(effect: URIO<R, Gen<R1, A>>): Gen<R | R1, A> {
|
|
272
627
|
export function weighted<R, A>(...gens: ReadonlyArray<readonly [Gen<R, A>, number]>): Gen<R, A> {
|
273
628
|
const sum = gens.map(([, weight]) => weight).foldLeft(0, (b, a) => b + a);
|
274
629
|
const [map] = gens.foldLeft(tuple(SortedMap.make<number, Gen<R, A>>(Number.Ord), 0), ([map, acc], [gen, d]) => {
|
275
|
-
if ((acc + d) / sum > acc / sum) return tuple(map.
|
630
|
+
if ((acc + d) / sum > acc / sum) return tuple(map.set((acc + d) / sum, gen), acc + d);
|
276
631
|
else return tuple(map, acc);
|
277
632
|
});
|
278
633
|
return Gen.uniform.flatMap((n) =>
|
@@ -290,3 +645,37 @@ export function zipWith<A, R1, B, C>(that: Gen<R1, B>, f: (a: A, b: B) => C) {
|
|
290
645
|
return self.flatMap((a) => that.map((b) => f(a, b)));
|
291
646
|
};
|
292
647
|
}
|
648
|
+
|
649
|
+
/**
|
650
|
+
* @tsplus pipeable fncts.test.Gen zip
|
651
|
+
*/
|
652
|
+
export function zip<R1, B>(that: Gen<R1, B>) {
|
653
|
+
return <R, A>(self: Gen<R, A>): Gen<R | R1, readonly [A, B]> => {
|
654
|
+
return self.zipWith(that, tuple);
|
655
|
+
};
|
656
|
+
}
|
657
|
+
|
658
|
+
function _char(min: number, max: number, mapToCode: (v: number) => number): Gen<never, string> {
|
659
|
+
return Gen.intWith({ min, max }).map((n) => String.fromCharCode(mapToCode(n)));
|
660
|
+
}
|
661
|
+
|
662
|
+
function indexToPrintableIndex(v: number): number {
|
663
|
+
return v < 95 ? v + 0x20 : v <= 0x7e ? v - 95 : v;
|
664
|
+
}
|
665
|
+
|
666
|
+
function base64ToCharCode(v: number): number {
|
667
|
+
if (v < 26) return v + 65; // A-Z
|
668
|
+
if (v < 52) return v + 97 - 26; // a-z
|
669
|
+
if (v < 62) return v + 48 - 52; // 0-9
|
670
|
+
return v === 62 ? 43 : 47; // +/
|
671
|
+
}
|
672
|
+
|
673
|
+
function hexToCharCode(v: number): number {
|
674
|
+
return v < 10
|
675
|
+
? v + 48 // 0-9
|
676
|
+
: v + 97 - 10; // a-f
|
677
|
+
}
|
678
|
+
|
679
|
+
function unicodeToCharCode(v: number): number {
|
680
|
+
return v < 0xd800 ? indexToPrintableIndex(v) : v + gapSize;
|
681
|
+
}
|
package/_src/control/Gen.ts
CHANGED
@@ -3,12 +3,3 @@ export * from "./Gen/api.js";
|
|
3
3
|
export * from "./Gen/constraints.js";
|
4
4
|
export * from "./Gen/definition.js";
|
5
5
|
// codegen:end
|
6
|
-
// codegen:start { preset: barrel, include: ./Gen/api/*.ts }
|
7
|
-
export * from "./Gen/api/array.js";
|
8
|
-
export * from "./Gen/api/char.js";
|
9
|
-
export * from "./Gen/api/conc.js";
|
10
|
-
export * from "./Gen/api/double.js";
|
11
|
-
export * from "./Gen/api/float.js";
|
12
|
-
export * from "./Gen/api/string.js";
|
13
|
-
export * from "./Gen/api/struct.js";
|
14
|
-
// codegen:end
|
@@ -13,7 +13,7 @@ export abstract class RunnableSpec<R, E> extends AbstractRunnableSpec<R, E> {
|
|
13
13
|
const self = this;
|
14
14
|
return Do((_) => {
|
15
15
|
const results = _(self.runSpec(spec));
|
16
|
-
const hasFailures = results.
|
16
|
+
const hasFailures = results.some(
|
17
17
|
matchTag(
|
18
18
|
{
|
19
19
|
Test: ({ test }) => test.isLeft(),
|
@@ -256,7 +256,7 @@ export function flatMapStream<R, A, R1, B>(
|
|
256
256
|
)
|
257
257
|
.foldLeft(
|
258
258
|
Channel.unit as Channel<R1, unknown, unknown, unknown, never, Conc<Either<boolean, B>>, unknown>,
|
259
|
-
(a, b) => a.
|
259
|
+
(a, b) => a.zipRight(b),
|
260
260
|
),
|
261
261
|
constVoid,
|
262
262
|
constVoid,
|
package/_src/control/Spec/api.ts
CHANGED
@@ -153,7 +153,7 @@ export function filterLabels(f: (label: string) => boolean) {
|
|
153
153
|
*/
|
154
154
|
export function filterTags(f: (tag: string) => boolean) {
|
155
155
|
return <R, E, T>(spec: PSpec<R, E, T>): Maybe<PSpec<R, E, T>> => {
|
156
|
-
return spec.filterAnnotations(TestAnnotation.Tagged, (v) => v.
|
156
|
+
return spec.filterAnnotations(TestAnnotation.Tagged, (v) => v.some(f));
|
157
157
|
};
|
158
158
|
}
|
159
159
|
|
@@ -35,7 +35,7 @@ export function after<R, E, A>(effect: IO<R, E, A>): TestAspect<R, E> {
|
|
35
35
|
return perTest<R, E>((test) =>
|
36
36
|
test.result
|
37
37
|
.zipWith(effect.catchAllCause((cause) => IO.fail(new RuntimeFailure(cause))).result, (ex0, ex1) =>
|
38
|
-
ex0.
|
38
|
+
ex0.zipLeft(ex1),
|
39
39
|
)
|
40
40
|
.flatMap(IO.fromExitNow),
|
41
41
|
);
|
@@ -60,7 +60,7 @@ export function aroundAll<R, E, A, R1>(
|
|
60
60
|
}
|
61
61
|
|
62
62
|
export function before<R0>(effect: IO<R0, never, any>): TestAspect<R0, never> {
|
63
|
-
return perTest<R0, never>((test) => effect.
|
63
|
+
return perTest<R0, never>((test) => effect.zipRight(test));
|
64
64
|
}
|
65
65
|
|
66
66
|
export function beforeAll<R0, E0>(effect: IO<R0, E0, any>): TestAspect<R0, E0> {
|