@fncts/test 0.0.21 → 0.0.23
Sign up to get free protection for your applications and to get access to all the features.
- 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 +7 -11
- 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 +4 -16
- 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 +3 -9
- 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 +12 -24
- 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 +5 -6
- 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 +3 -6
- 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 +3 -3
- 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 +10 -12
- 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/AssertionIO/definition.ts +2 -4
- 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/AssertionData.ts +1 -1
- package/_src/data/AssertionValue/api.ts +1 -1
- package/_src/data/AssertionValue/definition.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/TestAnnotation/definition.ts +7 -4
- 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/AssertionIO/definition.d.ts +1 -1
- 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/AssertionData.d.ts +1 -1
- package/data/AssertionValue/definition.d.ts +1 -1
- package/data/ExecutedSpec/api.d.ts +2 -2
- package/data/TestAnnotation/api.d.ts +1 -1
- package/data/TestAnnotation/definition.d.ts +8 -4
- 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> {
|