@fncts/test 0.0.20 → 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 +39 -76
- package/_cjs/api.cjs.map +1 -1
- package/_cjs/control/AbstractRunnableSpec.cjs +1 -12
- 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 +6 -29
- 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 +50 -100
- 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 +20 -26
- 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 +54 -123
- 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 +20 -36
- 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 +533 -200
- 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 +5 -23
- 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 +8 -28
- package/_cjs/control/RunnableSpec.cjs.map +1 -1
- package/_cjs/control/Sample/api.cjs +66 -107
- 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 +3 -15
- 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 +322 -367
- 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 +10 -31
- package/_cjs/control/SummaryBuilder.cjs.map +1 -1
- package/_cjs/control/Test.cjs +1 -11
- package/_cjs/control/Test.cjs.map +1 -1
- package/_cjs/control/TestAnnotationRenderer/api.cjs +20 -45
- package/_cjs/control/TestAnnotationRenderer/api.cjs.map +1 -1
- package/_cjs/control/TestAnnotationRenderer/definition.cjs +4 -20
- 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 +14 -55
- 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 +1 -22
- package/_cjs/control/TestClock/api.cjs.map +1 -1
- package/_cjs/control/TestClock/definition.cjs +50 -110
- 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 +3 -21
- package/_cjs/control/TestConsole/api.cjs.map +1 -1
- package/_cjs/control/TestConsole/definition.cjs +23 -48
- 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 +3 -15
- package/_cjs/control/TestEnvironment.cjs.map +1 -1
- package/_cjs/control/TestExecutor.cjs +3 -17
- package/_cjs/control/TestExecutor.cjs.map +1 -1
- package/_cjs/control/TestLogger.cjs +2 -17
- package/_cjs/control/TestLogger.cjs.map +1 -1
- package/_cjs/control/TestRandom/api.cjs +9 -39
- package/_cjs/control/TestRandom/api.cjs.map +1 -1
- package/_cjs/control/TestRandom/definition.cjs +61 -145
- 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 +11 -36
- 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 +23 -30
- 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 +61 -75
- 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 +42 -67
- 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 +82 -115
- 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 +2 -24
- package/_cjs/data/LogLine/Fragment.cjs.map +1 -1
- package/_cjs/data/LogLine/Line.cjs +11 -41
- package/_cjs/data/LogLine/Line.cjs.map +1 -1
- package/_cjs/data/LogLine/Message.cjs +32 -58
- 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 +3 -17
- 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 +2 -17
- 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 +4 -19
- 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 +5 -15
- package/_cjs/demo.cjs.map +1 -1
- package/_cjs/util/math.cjs +20 -148
- package/_cjs/util/math.cjs.map +1 -1
- package/_mjs/api.mjs +37 -40
- package/_mjs/api.mjs.map +1 -1
- package/_mjs/control/AbstractRunnableSpec.mjs +1 -7
- 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 +6 -11
- package/_mjs/control/Annotations/live.mjs.map +1 -1
- package/_mjs/control/Annotations.mjs.map +1 -1
- package/_mjs/control/Assertion/api.mjs +43 -46
- 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 +17 -14
- 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 +54 -87
- package/_mjs/control/DefaultTestReporter/render.mjs.map +1 -1
- package/_mjs/control/DefaultTestReporter.mjs.map +1 -1
- package/_mjs/control/FreeBooleanAlgebraIO/api.mjs +18 -22
- 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 +462 -138
- 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 +5 -10
- package/_mjs/control/Live/definition.mjs.map +1 -1
- package/_mjs/control/Live.mjs.map +1 -1
- package/_mjs/control/RunnableSpec.mjs +8 -11
- package/_mjs/control/RunnableSpec.mjs.map +1 -1
- package/_mjs/control/Sample/api.mjs +57 -73
- 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 +3 -6
- package/_mjs/control/Sized/live.mjs.map +1 -1
- package/_mjs/control/Sized.mjs.map +1 -1
- package/_mjs/control/Spec/api.mjs +300 -309
- 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 +10 -15
- package/_mjs/control/SummaryBuilder.mjs.map +1 -1
- package/_mjs/control/Test.mjs +1 -2
- package/_mjs/control/Test.mjs.map +1 -1
- package/_mjs/control/TestAnnotationRenderer/api.mjs +20 -34
- package/_mjs/control/TestAnnotationRenderer/api.mjs.map +1 -1
- package/_mjs/control/TestAnnotationRenderer/definition.mjs +4 -10
- package/_mjs/control/TestAnnotationRenderer/definition.mjs.map +1 -1
- package/_mjs/control/TestAnnotationRenderer.mjs.map +1 -1
- package/_mjs/control/TestAspect/api.mjs +14 -18
- package/_mjs/control/TestAspect/api.mjs.map +1 -1
- package/_mjs/control/TestAspect.mjs.map +1 -1
- package/_mjs/control/TestClock/api.mjs +1 -5
- package/_mjs/control/TestClock/api.mjs.map +1 -1
- package/_mjs/control/TestClock/definition.mjs +50 -72
- package/_mjs/control/TestClock/definition.mjs.map +1 -1
- package/_mjs/control/TestClock.mjs.map +1 -1
- package/_mjs/control/TestConsole/api.mjs +3 -6
- package/_mjs/control/TestConsole/api.mjs.map +1 -1
- package/_mjs/control/TestConsole/definition.mjs +23 -32
- package/_mjs/control/TestConsole/definition.mjs.map +1 -1
- package/_mjs/control/TestConsole.mjs.map +1 -1
- package/_mjs/control/TestEnvironment.mjs +3 -3
- package/_mjs/control/TestEnvironment.mjs.map +1 -1
- package/_mjs/control/TestExecutor.mjs +3 -3
- package/_mjs/control/TestExecutor.mjs.map +1 -1
- package/_mjs/control/TestLogger.mjs +2 -7
- package/_mjs/control/TestLogger.mjs.map +1 -1
- package/_mjs/control/TestRandom/api.mjs +9 -19
- package/_mjs/control/TestRandom/api.mjs.map +1 -1
- package/_mjs/control/TestRandom/definition.mjs +61 -121
- package/_mjs/control/TestRandom/definition.mjs.map +1 -1
- package/_mjs/control/TestRandom.mjs.map +1 -1
- package/_mjs/control/TestRenderer/ConsoleRenderer.mjs +11 -21
- 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 +23 -20
- 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 +55 -57
- 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 +40 -52
- 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 +70 -87
- 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 +2 -11
- package/_mjs/data/LogLine/Fragment.mjs.map +1 -1
- package/_mjs/data/LogLine/Line.mjs +11 -24
- package/_mjs/data/LogLine/Line.mjs.map +1 -1
- package/_mjs/data/LogLine/Message.mjs +26 -36
- 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 +3 -9
- 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 +2 -8
- 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 +4 -10
- 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 +5 -8
- package/_mjs/demo.mjs.map +1 -1
- package/_mjs/util/math.mjs +20 -117
- package/_mjs/util/math.mjs.map +1 -1
- package/_src/api.ts +36 -35
- package/_src/control/AbstractRunnableSpec.ts +0 -6
- package/_src/control/Annotations/live.ts +4 -10
- package/_src/control/Assertion/api.ts +36 -25
- package/_src/control/AssertionIO/api.ts +23 -17
- package/_src/control/DefaultTestReporter/render.ts +2 -12
- package/_src/control/FreeBooleanAlgebraIO/api.ts +12 -14
- package/_src/control/Gen/api.ts +476 -71
- package/_src/control/Gen.ts +0 -10
- package/_src/control/Live/definition.ts +0 -4
- package/_src/control/RunnableSpec.ts +1 -1
- package/_src/control/Sample/api.ts +78 -67
- package/_src/control/Spec/api.ts +235 -222
- package/_src/control/Spec/definition.ts +0 -2
- package/_src/control/SummaryBuilder.ts +0 -1
- package/_src/control/TestAnnotationRenderer/api.ts +17 -15
- package/_src/control/TestAnnotationRenderer/definition.ts +0 -2
- package/_src/control/TestAspect/api.ts +2 -3
- package/_src/control/TestClock/definition.ts +13 -25
- package/_src/control/TestConsole/definition.ts +1 -2
- package/_src/control/TestLogger.ts +0 -2
- package/_src/control/TestRandom/api.ts +5 -0
- package/_src/control/TestRandom/definition.ts +3 -37
- package/_src/control/TestRenderer/ConsoleRenderer.ts +0 -1
- package/_src/control/TestRunner.ts +0 -3
- package/_src/data/AssertionValue/api.ts +27 -23
- package/_src/data/AssertionValue/definition.ts +0 -1
- package/_src/data/ExecutedSpec/api.ts +41 -36
- package/_src/data/ExecutionResult.ts +54 -51
- package/_src/data/FreeBooleanAlgebra/api.ts +68 -58
- package/_src/data/LogLine/Line.ts +5 -3
- package/_src/data/LogLine/Message.ts +26 -18
- package/_src/data/LogLine/Style.ts +0 -1
- package/_src/data/Render/definition.ts +0 -2
- package/_src/data/RenderParam/api.ts +1 -1
- package/_src/data/TestAnnotation/api.ts +4 -2
- package/_src/data/TestAnnotation/definition.ts +0 -3
- package/_src/data/TestAnnotationMap.ts +2 -8
- package/_src/demo.ts +3 -4
- package/_src/util/math.ts +31 -17
- package/api.d.ts +12 -12
- package/control/AbstractRunnableSpec.d.ts +0 -1
- package/control/Annotations/live.d.ts +1 -1
- package/control/Assertion/api.d.ts +16 -12
- package/control/AssertionIO/api.d.ts +8 -8
- package/control/FreeBooleanAlgebraIO/api.d.ts +6 -6
- package/control/Gen/api.d.ts +216 -33
- package/control/Gen.d.ts +0 -7
- package/control/Sample/api.d.ts +14 -14
- package/control/Spec/api.d.ts +38 -41
- package/control/TestAnnotationRenderer/api.d.ts +3 -3
- package/control/TestClock/definition.d.ts +2 -2
- package/control/TestConsole/definition.d.ts +1 -1
- package/control/TestRandom/definition.d.ts +1 -1
- package/control/TestRunner.d.ts +1 -3
- package/data/AssertionValue/api.d.ts +8 -8
- package/data/ExecutedSpec/api.d.ts +8 -8
- package/data/ExecutionResult.d.ts +4 -4
- package/data/FreeBooleanAlgebra/api.d.ts +20 -20
- package/data/LogLine/Line.d.ts +2 -2
- package/data/LogLine/Message.d.ts +10 -10
- 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 -50
- 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 -73
- 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 -102
- 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 -31
- 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 -49
- 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 -72
- 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 -31
- package/_src/control/Gen/api/char.ts +0 -83
- package/_src/control/Gen/api/conc.ts +0 -48
- 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 -71
- package/_src/control/Gen/api/struct.ts +0 -21
- 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,60 +1,209 @@
|
|
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
|
+
|
127
|
+
/**
|
128
|
+
* @tsplus static fncts.test.GenOps base64String
|
129
|
+
*/
|
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
|
+
|
14
139
|
/**
|
15
|
-
* @tsplus static fncts.test.GenOps
|
140
|
+
* @tsplus static fncts.test.GenOps bigInt
|
16
141
|
*/
|
17
|
-
export const
|
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)),
|
198
|
+
);
|
199
|
+
};
|
200
|
+
}
|
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))));
|
58
207
|
}
|
59
208
|
|
60
209
|
/**
|
@@ -64,25 +213,85 @@ export function defer<R, A>(gen: Lazy<Gen<R, A>>): Gen<R, A> {
|
|
64
213
|
return Gen.fromIO(IO.succeed(gen)).flatten;
|
65
214
|
}
|
66
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
|
+
|
67
252
|
/**
|
68
253
|
* @tsplus static fncts.test.GenOps empty
|
69
254
|
*/
|
70
255
|
export const empty: Gen<never, never> = new Gen(Stream.empty);
|
71
256
|
|
72
257
|
/**
|
73
|
-
* @tsplus
|
258
|
+
* @tsplus static fncts.test.GenOps exponential
|
74
259
|
*/
|
75
|
-
export
|
76
|
-
|
77
|
-
|
78
|
-
|
260
|
+
export const exponential: Gen<never, number> = Gen.uniform.map((n) => -Math.log(1 - n));
|
261
|
+
|
262
|
+
/**
|
263
|
+
* @tsplus pipeable fncts.test.Gen filter
|
264
|
+
*/
|
265
|
+
export function filter<A, B extends A>(p: Refinement<A, B>): <R>(fa: Gen<R, A>) => Gen<R, B>;
|
266
|
+
export function filter<A>(p: Predicate<A>): <R>(fa: Gen<R, A>) => Gen<R, A>;
|
267
|
+
export function filter<A>(p: Predicate<A>) {
|
268
|
+
return <R>(fa: Gen<R, A>): Gen<R, A> => {
|
269
|
+
return fa.flatMap((a) => (p(a) ? Gen.constant(a) : Gen.empty));
|
270
|
+
};
|
79
271
|
}
|
80
272
|
|
81
273
|
/**
|
82
|
-
* @tsplus
|
274
|
+
* @tsplus pipeable fncts.test.Gen filterNot
|
83
275
|
*/
|
84
|
-
export function
|
85
|
-
return fa
|
276
|
+
export function filterNot<A>(p: Predicate<A>) {
|
277
|
+
return <R>(fa: Gen<R, A>): Gen<R, A> => {
|
278
|
+
return fa.filter((a) => !p(a));
|
279
|
+
};
|
280
|
+
}
|
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
|
+
};
|
86
295
|
}
|
87
296
|
|
88
297
|
/**
|
@@ -106,16 +315,77 @@ export function fromIOSample<R, A>(effect: IO<R, never, Sample<R, A>>): Gen<R, A
|
|
106
315
|
return new Gen(Stream.fromIO(effect.map(Maybe.just)));
|
107
316
|
}
|
108
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
|
+
|
109
374
|
/**
|
110
375
|
* @tsplus static fncts.test.GenOps int
|
111
376
|
*/
|
112
|
-
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> {
|
113
383
|
return Gen.fromIOSample(
|
114
384
|
IO.defer(() => {
|
115
385
|
const min = constraints.min ?? -0x80000000;
|
116
386
|
const max = constraints.max ?? 0x7fffffff;
|
117
387
|
if (min > max || min < Number.MIN_SAFE_INTEGER || max > Number.MAX_SAFE_INTEGER) {
|
118
|
-
return IO.haltNow(new IllegalArgumentError("invalid bounds", "Gen.
|
388
|
+
return IO.haltNow(new IllegalArgumentError("invalid bounds", "Gen.intWith"));
|
119
389
|
} else {
|
120
390
|
return Random.nextIntBetween(min, max).map(Sample.shrinkIntegral(min));
|
121
391
|
}
|
@@ -124,36 +394,30 @@ export function int(constraints: NumberConstraints = {}): Gen<never, number> {
|
|
124
394
|
}
|
125
395
|
|
126
396
|
/**
|
127
|
-
* @tsplus
|
397
|
+
* @tsplus pipeable fncts.test.Gen map
|
128
398
|
*/
|
129
|
-
export function
|
130
|
-
return
|
399
|
+
export function map<A, B>(f: (a: A) => B) {
|
400
|
+
return <R>(self: Gen<R, A>): Gen<R, B> => {
|
401
|
+
return new Gen(self.sample.map((maybeSample) => maybeSample.map((sample) => sample.map(f))));
|
402
|
+
};
|
131
403
|
}
|
132
404
|
|
133
405
|
/**
|
134
|
-
* @tsplus
|
406
|
+
* @tsplus pipeable fncts.test.Gen mapIO
|
135
407
|
*/
|
136
|
-
export function
|
137
|
-
return
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
408
|
+
export function mapIO<A, R1, B>(f: (a: A) => IO<R1, never, B>) {
|
409
|
+
return <R>(self: Gen<R, A>): Gen<R | R1, B> => {
|
410
|
+
return new Gen(
|
411
|
+
self.sample.mapIO((maybeSample) =>
|
412
|
+
maybeSample.match(
|
413
|
+
() => IO.succeedNow(Nothing()),
|
414
|
+
(sample) => sample.foreach(f).map(Maybe.just),
|
415
|
+
),
|
142
416
|
),
|
143
|
-
)
|
144
|
-
|
417
|
+
);
|
418
|
+
};
|
145
419
|
}
|
146
420
|
|
147
|
-
/**
|
148
|
-
* @tsplus static fncts.test.GenOps exponential
|
149
|
-
*/
|
150
|
-
export const exponential: Gen<never, number> = Gen.uniform.map((n) => -Math.log(1 - n));
|
151
|
-
|
152
|
-
/**
|
153
|
-
* @tsplus static fncts.test.GenOps size
|
154
|
-
*/
|
155
|
-
export const size: Gen<Sized, number> = Gen.fromIO(Sized.size);
|
156
|
-
|
157
421
|
/**
|
158
422
|
* @tsplus static fncts.test.GenOps medium
|
159
423
|
*/
|
@@ -168,7 +432,9 @@ export function medium<R, A>(f: (n: number) => Gen<R, A>, min = 0): Gen<R | Size
|
|
168
432
|
* @tsplus static fncts.test.GenOps memo
|
169
433
|
*/
|
170
434
|
export function memo<R, A>(builder: (maxDepth: number) => Gen<R, A>): (maxDepth?: number) => Gen<R, A> {
|
171
|
-
const previous: {
|
435
|
+
const previous: {
|
436
|
+
[depth: number]: Gen<R, A>;
|
437
|
+
} = {};
|
172
438
|
let remainingDepth = 10;
|
173
439
|
return (maxDepth?: number): Gen<R, A> => {
|
174
440
|
const n = maxDepth !== undefined ? maxDepth : remainingDepth;
|
@@ -186,7 +452,7 @@ export function memo<R, A>(builder: (maxDepth: number) => Gen<R, A>): (maxDepth?
|
|
186
452
|
* @tsplus static fncts.test.GenOps nat
|
187
453
|
*/
|
188
454
|
export function nat(max = 0x7fffffff): Gen<unknown, number> {
|
189
|
-
return Gen.
|
455
|
+
return Gen.intWith({ min: 0, max: clamp(max, 0, max) });
|
190
456
|
}
|
191
457
|
|
192
458
|
/**
|
@@ -194,18 +460,39 @@ export function nat(max = 0x7fffffff): Gen<unknown, number> {
|
|
194
460
|
*/
|
195
461
|
export function oneOf<A extends ReadonlyArray<Gen<any, any>>>(...gens: A): Gen<_R<A[number]>, _A<A[number]>> {
|
196
462
|
if (gens.isEmpty()) return Gen.empty;
|
197
|
-
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
|
+
);
|
198
478
|
}
|
199
479
|
|
200
480
|
/**
|
201
|
-
* @tsplus
|
481
|
+
* @tsplus static fncts.test.GenOps printableChar
|
202
482
|
*/
|
203
|
-
export
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
483
|
+
export const printableChar: Gen<never, string> = Gen.char({ min: 0x20, max: 0x7e });
|
484
|
+
|
485
|
+
/**
|
486
|
+
* @tsplus pipeable fncts.test.Gen reshrink
|
487
|
+
*/
|
488
|
+
export function reshrink<A, R1, B>(f: (a: A) => Sample<R1, B>) {
|
489
|
+
return <R>(gen: Gen<R, A>): Gen<R | R1, B> => {
|
490
|
+
return new Gen(
|
491
|
+
(gen.sample as Stream<R | R1, never, Maybe<Sample<R, A>>>).map((maybeSample) =>
|
492
|
+
maybeSample.map((sample) => f(sample.value)),
|
493
|
+
),
|
494
|
+
);
|
495
|
+
};
|
209
496
|
}
|
210
497
|
|
211
498
|
/**
|
@@ -225,6 +512,48 @@ export function small<R, A>(f: (size: number) => Gen<R, A>, min = 0): Gen<R | Si
|
|
225
512
|
.flatMap(f);
|
226
513
|
}
|
227
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
|
+
|
228
557
|
/**
|
229
558
|
* @tsplus static fncts.test.GenOps unfoldGen
|
230
559
|
*/
|
@@ -241,9 +570,49 @@ export function unfoldGenN<S, R, A>(n: number, s: S, f: (s: S) => Gen<R, readonl
|
|
241
570
|
}
|
242
571
|
|
243
572
|
/**
|
244
|
-
* @tsplus static fncts.test.GenOps
|
573
|
+
* @tsplus static fncts.test.GenOps unicodeChar
|
245
574
|
*/
|
246
|
-
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
|
+
}
|
247
616
|
|
248
617
|
/**
|
249
618
|
* @tsplus static fncts.test.GenOps unwrap
|
@@ -258,7 +627,7 @@ export function unwrap<R, R1, A>(effect: URIO<R, Gen<R1, A>>): Gen<R | R1, A> {
|
|
258
627
|
export function weighted<R, A>(...gens: ReadonlyArray<readonly [Gen<R, A>, number]>): Gen<R, A> {
|
259
628
|
const sum = gens.map(([, weight]) => weight).foldLeft(0, (b, a) => b + a);
|
260
629
|
const [map] = gens.foldLeft(tuple(SortedMap.make<number, Gen<R, A>>(Number.Ord), 0), ([map, acc], [gen, d]) => {
|
261
|
-
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);
|
262
631
|
else return tuple(map, acc);
|
263
632
|
});
|
264
633
|
return Gen.uniform.flatMap((n) =>
|
@@ -269,8 +638,44 @@ export function weighted<R, A>(...gens: ReadonlyArray<readonly [Gen<R, A>, numbe
|
|
269
638
|
}
|
270
639
|
|
271
640
|
/**
|
272
|
-
* @tsplus
|
641
|
+
* @tsplus pipeable fncts.test.Gen zipWith
|
642
|
+
*/
|
643
|
+
export function zipWith<A, R1, B, C>(that: Gen<R1, B>, f: (a: A, b: B) => C) {
|
644
|
+
return <R>(self: Gen<R, A>): Gen<R | R1, C> => {
|
645
|
+
return self.flatMap((a) => that.map((b) => f(a, b)));
|
646
|
+
};
|
647
|
+
}
|
648
|
+
|
649
|
+
/**
|
650
|
+
* @tsplus pipeable fncts.test.Gen zip
|
273
651
|
*/
|
274
|
-
export function
|
275
|
-
return self
|
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;
|
276
681
|
}
|