@fncts/test 0.0.51 → 0.0.52
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/LICENSE +26 -0
- package/_cjs/Fragment.cjs +424 -0
- package/_cjs/Fragment.cjs.map +1 -0
- package/_cjs/api.cjs +97 -83
- package/_cjs/api.cjs.map +1 -1
- package/_cjs/chunk.cjs +28 -0
- package/_cjs/control/AbstractRunnableSpec.cjs +83 -81
- package/_cjs/control/AbstractRunnableSpec.cjs.map +1 -1
- package/_cjs/control/Annotations/api.cjs +25 -24
- package/_cjs/control/Annotations/api.cjs.map +1 -1
- package/_cjs/control/Annotations/definition.cjs +19 -18
- package/_cjs/control/Annotations/definition.cjs.map +1 -1
- package/_cjs/control/Annotations/live.cjs +50 -40
- package/_cjs/control/Annotations/live.cjs.map +1 -1
- package/_cjs/control/Annotations.cjs +13 -39
- package/_cjs/control/Assertion/api.cjs +170 -156
- package/_cjs/control/Assertion/api.cjs.map +1 -1
- package/_cjs/control/Assertion/definition.cjs +21 -21
- package/_cjs/control/Assertion/definition.cjs.map +1 -1
- package/_cjs/control/Assertion.cjs +39 -28
- package/_cjs/control/AssertionIO/api.cjs +33 -31
- package/_cjs/control/AssertionIO/api.cjs.map +1 -1
- package/_cjs/control/AssertionIO/definition.cjs +27 -27
- package/_cjs/control/AssertionIO/definition.cjs.map +1 -1
- package/_cjs/control/AssertionIO.cjs +9 -28
- package/_cjs/control/DefaultRunnableSpec.cjs +14 -15
- package/_cjs/control/DefaultRunnableSpec.cjs.map +1 -1
- package/_cjs/control/DefaultTestReporter/definition.cjs +5 -6
- package/_cjs/control/DefaultTestReporter/definition.cjs.map +1 -1
- package/_cjs/control/DefaultTestReporter/render.cjs +184 -176
- package/_cjs/control/DefaultTestReporter/render.cjs.map +1 -1
- package/_cjs/control/DefaultTestReporter.cjs +10 -28
- package/_cjs/control/FreeBooleanAlgebraIO/api.cjs +47 -46
- package/_cjs/control/FreeBooleanAlgebraIO/api.cjs.map +1 -1
- package/_cjs/control/FreeBooleanAlgebraIO/definition.cjs +5 -6
- package/_cjs/control/FreeBooleanAlgebraIO/definition.cjs.map +1 -1
- package/_cjs/control/FreeBooleanAlgebraIO.cjs +12 -28
- package/_cjs/control/Gen/api.cjs +653 -614
- package/_cjs/control/Gen/api.cjs.map +1 -1
- package/_cjs/control/Gen/constraints.cjs +0 -2
- package/_cjs/control/Gen/definition.cjs +13 -15
- package/_cjs/control/Gen/definition.cjs.map +1 -1
- package/_cjs/control/Gen.cjs +84 -39
- package/_cjs/control/Live/definition.cjs +43 -38
- package/_cjs/control/Live/definition.cjs.map +1 -1
- package/_cjs/control/Live.cjs +6 -17
- package/_cjs/control/Sample/api.cjs +143 -145
- package/_cjs/control/Sample/api.cjs.map +1 -1
- package/_cjs/control/Sample/definition.cjs +15 -17
- package/_cjs/control/Sample/definition.cjs.map +1 -1
- package/_cjs/control/Sample.cjs +18 -28
- package/_cjs/control/Sized/api.cjs +17 -16
- package/_cjs/control/Sized/api.cjs.map +1 -1
- package/_cjs/control/Sized/definition.cjs +15 -15
- package/_cjs/control/Sized/definition.cjs.map +1 -1
- package/_cjs/control/Sized/live.cjs +25 -21
- package/_cjs/control/Sized/live.cjs.map +1 -1
- package/_cjs/control/Sized.cjs +9 -39
- package/_cjs/control/Spec/api.cjs +288 -385
- package/_cjs/control/Spec/api.cjs.map +1 -1
- package/_cjs/control/Spec/definition.cjs +86 -87
- package/_cjs/control/Spec/definition.cjs.map +1 -1
- package/_cjs/control/Spec.cjs +38 -28
- package/_cjs/control/SummaryBuilder.cjs +48 -56
- package/_cjs/control/SummaryBuilder.cjs.map +1 -1
- package/_cjs/control/Test.cjs +21 -17
- package/_cjs/control/Test.cjs.map +1 -1
- package/_cjs/control/TestAnnotationRenderer/api.cjs +63 -57
- package/_cjs/control/TestAnnotationRenderer/api.cjs.map +1 -1
- package/_cjs/control/TestAnnotationRenderer/definition.cjs +36 -33
- package/_cjs/control/TestAnnotationRenderer/definition.cjs.map +1 -1
- package/_cjs/control/TestAnnotationRenderer.cjs +14 -28
- package/_cjs/control/TestAspect/api.cjs +81 -80
- package/_cjs/control/TestAspect/api.cjs.map +1 -1
- package/_cjs/control/TestAspect/definition.cjs +0 -2
- package/_cjs/control/TestAspect.cjs +14 -28
- package/_cjs/control/TestClock/api.cjs +44 -32
- package/_cjs/control/TestClock/api.cjs.map +1 -1
- package/_cjs/control/TestClock/definition.cjs +175 -173
- package/_cjs/control/TestClock/definition.cjs.map +1 -1
- package/_cjs/control/TestClock.cjs +13 -28
- package/_cjs/control/TestConsole/api.cjs +45 -34
- package/_cjs/control/TestConsole/api.cjs.map +1 -1
- package/_cjs/control/TestConsole/definition.cjs +76 -83
- package/_cjs/control/TestConsole/definition.cjs.map +1 -1
- package/_cjs/control/TestConsole.cjs +8 -28
- package/_cjs/control/TestEnvironment.cjs +31 -23
- package/_cjs/control/TestEnvironment.cjs.map +1 -1
- package/_cjs/control/TestLogger.cjs +36 -31
- package/_cjs/control/TestLogger.cjs.map +1 -1
- package/_cjs/control/TestRandom/api.cjs +67 -58
- package/_cjs/control/TestRandom/api.cjs.map +1 -1
- package/_cjs/control/TestRandom/definition.cjs +332 -378
- package/_cjs/control/TestRandom/definition.cjs.map +1 -1
- package/_cjs/control/TestRandom.cjs +20 -28
- package/_cjs/control/TestRenderer/ConsoleRenderer.cjs +78 -82
- package/_cjs/control/TestRenderer/ConsoleRenderer.cjs.map +1 -1
- package/_cjs/control/TestRenderer/definition.cjs +0 -2
- package/_cjs/control.cjs +0 -2
- package/_cjs/data/AssertionData.cjs +35 -31
- package/_cjs/data/AssertionData.cjs.map +1 -1
- package/_cjs/data/AssertionResult.cjs +23 -23
- package/_cjs/data/AssertionResult.cjs.map +1 -1
- package/_cjs/data/AssertionValue/api.cjs +39 -40
- package/_cjs/data/AssertionValue/api.cjs.map +1 -1
- package/_cjs/data/AssertionValue/definition.cjs +27 -27
- package/_cjs/data/AssertionValue/definition.cjs.map +1 -1
- package/_cjs/data/AssertionValue.cjs +10 -28
- package/_cjs/data/ExecutedSpec/api.cjs +71 -90
- package/_cjs/data/ExecutedSpec/api.cjs.map +1 -1
- package/_cjs/data/ExecutedSpec/definition.cjs +39 -41
- package/_cjs/data/ExecutedSpec/definition.cjs.map +1 -1
- package/_cjs/data/ExecutedSpec.cjs +15 -28
- package/_cjs/data/ExecutionResult.cjs +78 -103
- package/_cjs/data/ExecutionResult.cjs.map +1 -1
- package/_cjs/data/FailureDetails.cjs +12 -14
- package/_cjs/data/FailureDetails.cjs.map +1 -1
- package/_cjs/data/FreeBooleanAlgebra/api.cjs +129 -127
- package/_cjs/data/FreeBooleanAlgebra/api.cjs.map +1 -1
- package/_cjs/data/FreeBooleanAlgebra/definition.cjs +40 -41
- package/_cjs/data/FreeBooleanAlgebra/definition.cjs.map +1 -1
- package/_cjs/data/FreeBooleanAlgebra.cjs +22 -28
- package/_cjs/data/GenFailureDetails.cjs +14 -16
- package/_cjs/data/GenFailureDetails.cjs.map +1 -1
- package/_cjs/data/LogLine/Fragment.cjs +10 -73
- package/_cjs/data/LogLine/Line.cjs +13 -112
- package/_cjs/data/LogLine/Message.cjs +13 -115
- package/_cjs/data/LogLine/Style.cjs +56 -65
- package/_cjs/data/LogLine/Style.cjs.map +1 -1
- package/_cjs/data/LogLine/api.cjs +30 -29
- package/_cjs/data/LogLine/api.cjs.map +1 -1
- package/_cjs/data/LogLine.cjs +24 -28
- package/_cjs/data/Render/api.cjs +13 -14
- package/_cjs/data/Render/api.cjs.map +1 -1
- package/_cjs/data/Render/definition.cjs +37 -36
- package/_cjs/data/Render/definition.cjs.map +1 -1
- package/_cjs/data/Render.cjs +8 -28
- package/_cjs/data/RenderParam/api.cjs +18 -22
- package/_cjs/data/RenderParam/api.cjs.map +1 -1
- package/_cjs/data/RenderParam/definition.cjs +20 -21
- package/_cjs/data/RenderParam/definition.cjs.map +1 -1
- package/_cjs/data/RenderParam.cjs +8 -28
- package/_cjs/data/Summary.cjs +19 -21
- package/_cjs/data/Summary.cjs.map +1 -1
- package/_cjs/data/TestAnnotation/api.cjs +55 -40
- package/_cjs/data/TestAnnotation/api.cjs.map +1 -1
- package/_cjs/data/TestAnnotation/definition.cjs +44 -39
- package/_cjs/data/TestAnnotation/definition.cjs.map +1 -1
- package/_cjs/data/TestAnnotation.cjs +19 -28
- package/_cjs/data/TestAnnotationMap.cjs +36 -34
- package/_cjs/data/TestAnnotationMap.cjs.map +1 -1
- package/_cjs/data/TestArgs/definition.cjs +14 -16
- package/_cjs/data/TestArgs/definition.cjs.map +1 -1
- package/_cjs/data/TestArgs.cjs +3 -17
- package/_cjs/data/TestConfig.cjs +46 -41
- package/_cjs/data/TestConfig.cjs.map +1 -1
- package/_cjs/data/TestFailure.cjs +41 -41
- package/_cjs/data/TestFailure.cjs.map +1 -1
- package/_cjs/data/TestSuccess.cjs +26 -26
- package/_cjs/data/TestSuccess.cjs.map +1 -1
- package/_cjs/data/TestTimeoutException.cjs +9 -11
- package/_cjs/data/TestTimeoutException.cjs.map +1 -1
- package/_cjs/data.cjs +0 -2
- package/_cjs/global.cjs +0 -2
- package/_cjs/index.cjs +0 -2
- package/_cjs/util/math.cjs +319 -440
- package/_cjs/util/math.cjs.map +1 -1
- package/_cjs/util.cjs +0 -2
- package/_cjs/vitest.cjs +115 -104
- package/_cjs/vitest.cjs.map +1 -1
- package/_mjs/Fragment.mjs +237 -0
- package/_mjs/Fragment.mjs.map +1 -0
- package/_mjs/api.mjs +67 -64
- package/_mjs/api.mjs.map +1 -1
- package/_mjs/control/AbstractRunnableSpec.mjs +53 -65
- package/_mjs/control/AbstractRunnableSpec.mjs.map +1 -1
- package/_mjs/control/Annotations/api.mjs +21 -17
- package/_mjs/control/Annotations/api.mjs.map +1 -1
- package/_mjs/control/Annotations/definition.mjs +14 -10
- package/_mjs/control/Annotations/definition.mjs.map +1 -1
- package/_mjs/control/Annotations/live.mjs +32 -28
- package/_mjs/control/Annotations/live.mjs.map +1 -1
- package/_mjs/control/Annotations.mjs +4 -5
- package/_mjs/control/Assertion/api.mjs +140 -142
- package/_mjs/control/Assertion/api.mjs.map +1 -1
- package/_mjs/control/Assertion/definition.mjs +19 -14
- package/_mjs/control/Assertion/definition.mjs.map +1 -1
- package/_mjs/control/Assertion.mjs +3 -4
- package/_mjs/control/AssertionIO/api.mjs +26 -22
- package/_mjs/control/AssertionIO/api.mjs.map +1 -1
- package/_mjs/control/AssertionIO/definition.mjs +22 -18
- package/_mjs/control/AssertionIO/definition.mjs.map +1 -1
- package/_mjs/control/AssertionIO.mjs +3 -4
- package/_mjs/control/DefaultRunnableSpec.mjs +9 -5
- package/_mjs/control/DefaultRunnableSpec.mjs.map +1 -1
- package/_mjs/control/DefaultTestReporter/definition.mjs +5 -1
- package/_mjs/control/DefaultTestReporter/definition.mjs.map +1 -1
- package/_mjs/control/DefaultTestReporter/render.mjs +152 -165
- package/_mjs/control/DefaultTestReporter/render.mjs.map +1 -1
- package/_mjs/control/DefaultTestReporter.mjs +3 -4
- package/_mjs/control/FreeBooleanAlgebraIO/api.mjs +43 -39
- package/_mjs/control/FreeBooleanAlgebraIO/api.mjs.map +1 -1
- package/_mjs/control/FreeBooleanAlgebraIO/definition.mjs +5 -1
- package/_mjs/control/FreeBooleanAlgebraIO/definition.mjs.map +1 -1
- package/_mjs/control/FreeBooleanAlgebraIO.mjs +3 -4
- package/_mjs/control/Gen/api.mjs +570 -591
- package/_mjs/control/Gen/api.mjs.map +1 -1
- package/_mjs/control/Gen/constraints.mjs +0 -2
- package/_mjs/control/Gen/definition.mjs +13 -9
- package/_mjs/control/Gen/definition.mjs.map +1 -1
- package/_mjs/control/Gen.mjs +4 -5
- package/_mjs/control/Live/definition.mjs +31 -27
- package/_mjs/control/Live/definition.mjs.map +1 -1
- package/_mjs/control/Live.mjs +2 -3
- package/_mjs/control/Sample/api.mjs +109 -126
- package/_mjs/control/Sample/api.mjs.map +1 -1
- package/_mjs/control/Sample/definition.mjs +15 -11
- package/_mjs/control/Sample/definition.mjs.map +1 -1
- package/_mjs/control/Sample.mjs +3 -4
- package/_mjs/control/Sized/api.mjs +13 -9
- package/_mjs/control/Sized/api.mjs.map +1 -1
- package/_mjs/control/Sized/definition.mjs +11 -7
- package/_mjs/control/Sized/definition.mjs.map +1 -1
- package/_mjs/control/Sized/live.mjs +18 -14
- package/_mjs/control/Sized/live.mjs.map +1 -1
- package/_mjs/control/Sized.mjs +4 -5
- package/_mjs/control/Spec/api.mjs +245 -366
- package/_mjs/control/Spec/api.mjs.map +1 -1
- package/_mjs/control/Spec/definition.mjs +79 -75
- package/_mjs/control/Spec/definition.mjs.map +1 -1
- package/_mjs/control/Spec.mjs +3 -4
- package/_mjs/control/SummaryBuilder.mjs +31 -41
- package/_mjs/control/SummaryBuilder.mjs.map +1 -1
- package/_mjs/control/Test.mjs +13 -9
- package/_mjs/control/Test.mjs.map +1 -1
- package/_mjs/control/TestAnnotationRenderer/api.mjs +53 -55
- package/_mjs/control/TestAnnotationRenderer/api.mjs.map +1 -1
- package/_mjs/control/TestAnnotationRenderer/definition.mjs +25 -21
- package/_mjs/control/TestAnnotationRenderer/definition.mjs.map +1 -1
- package/_mjs/control/TestAnnotationRenderer.mjs +3 -4
- package/_mjs/control/TestAspect/api.mjs +49 -63
- package/_mjs/control/TestAspect/api.mjs.map +1 -1
- package/_mjs/control/TestAspect/definition.mjs +0 -2
- package/_mjs/control/TestAspect.mjs +3 -4
- package/_mjs/control/TestClock/api.mjs +24 -20
- package/_mjs/control/TestClock/api.mjs.map +1 -1
- package/_mjs/control/TestClock/definition.mjs +128 -150
- package/_mjs/control/TestClock/definition.mjs.map +1 -1
- package/_mjs/control/TestClock.mjs +3 -4
- package/_mjs/control/TestConsole/api.mjs +27 -24
- package/_mjs/control/TestConsole/api.mjs.map +1 -1
- package/_mjs/control/TestConsole/definition.mjs +62 -72
- package/_mjs/control/TestConsole/definition.mjs.map +1 -1
- package/_mjs/control/TestConsole.mjs +3 -4
- package/_mjs/control/TestEnvironment.mjs +14 -10
- package/_mjs/control/TestEnvironment.mjs.map +1 -1
- package/_mjs/control/TestLogger.mjs +25 -21
- package/_mjs/control/TestLogger.mjs.map +1 -1
- package/_mjs/control/TestRandom/api.mjs +46 -43
- package/_mjs/control/TestRandom/api.mjs.map +1 -1
- package/_mjs/control/TestRandom/definition.mjs +311 -362
- package/_mjs/control/TestRandom/definition.mjs.map +1 -1
- package/_mjs/control/TestRandom.mjs +3 -4
- package/_mjs/control/TestRenderer/ConsoleRenderer.mjs +66 -72
- package/_mjs/control/TestRenderer/ConsoleRenderer.mjs.map +1 -1
- package/_mjs/control/TestRenderer/definition.mjs +0 -2
- package/_mjs/control.mjs +0 -2
- package/_mjs/data/AssertionData.mjs +27 -22
- package/_mjs/data/AssertionData.mjs.map +1 -1
- package/_mjs/data/AssertionResult.mjs +18 -14
- package/_mjs/data/AssertionResult.mjs.map +1 -1
- package/_mjs/data/AssertionValue/api.mjs +34 -32
- package/_mjs/data/AssertionValue/api.mjs.map +1 -1
- package/_mjs/data/AssertionValue/definition.mjs +24 -20
- package/_mjs/data/AssertionValue/definition.mjs.map +1 -1
- package/_mjs/data/AssertionValue.mjs +3 -4
- package/_mjs/data/ExecutedSpec/api.mjs +64 -80
- package/_mjs/data/ExecutedSpec/api.mjs.map +1 -1
- package/_mjs/data/ExecutedSpec/definition.mjs +38 -34
- package/_mjs/data/ExecutedSpec/definition.mjs.map +1 -1
- package/_mjs/data/ExecutedSpec.mjs +3 -4
- package/_mjs/data/ExecutionResult.mjs +63 -91
- package/_mjs/data/ExecutionResult.mjs.map +1 -1
- package/_mjs/data/FailureDetails.mjs +12 -8
- package/_mjs/data/FailureDetails.mjs.map +1 -1
- package/_mjs/data/FreeBooleanAlgebra/api.mjs +107 -111
- package/_mjs/data/FreeBooleanAlgebra/api.mjs.map +1 -1
- package/_mjs/data/FreeBooleanAlgebra/definition.mjs +37 -33
- package/_mjs/data/FreeBooleanAlgebra/definition.mjs.map +1 -1
- package/_mjs/data/FreeBooleanAlgebra.mjs +3 -4
- package/_mjs/data/GenFailureDetails.mjs +14 -10
- package/_mjs/data/GenFailureDetails.mjs.map +1 -1
- package/_mjs/data/LogLine/Fragment.mjs +2 -58
- package/_mjs/data/LogLine/Line.mjs +2 -94
- package/_mjs/data/LogLine/Message.mjs +2 -99
- package/_mjs/data/LogLine/Style.mjs +56 -66
- package/_mjs/data/LogLine/Style.mjs.map +1 -1
- package/_mjs/data/LogLine/api.mjs +24 -20
- package/_mjs/data/LogLine/api.mjs.map +1 -1
- package/_mjs/data/LogLine.mjs +3 -3
- package/_mjs/data/Render/api.mjs +12 -8
- package/_mjs/data/Render/api.mjs.map +1 -1
- package/_mjs/data/Render/definition.mjs +31 -27
- package/_mjs/data/Render/definition.mjs.map +1 -1
- package/_mjs/data/Render.mjs +3 -4
- package/_mjs/data/RenderParam/api.mjs +15 -15
- package/_mjs/data/RenderParam/api.mjs.map +1 -1
- package/_mjs/data/RenderParam/definition.mjs +19 -15
- package/_mjs/data/RenderParam/definition.mjs.map +1 -1
- package/_mjs/data/RenderParam.mjs +3 -4
- package/_mjs/data/Summary.mjs +19 -15
- package/_mjs/data/Summary.mjs.map +1 -1
- package/_mjs/data/TestAnnotation/api.mjs +34 -30
- package/_mjs/data/TestAnnotation/api.mjs.map +1 -1
- package/_mjs/data/TestAnnotation/definition.mjs +31 -27
- package/_mjs/data/TestAnnotation/definition.mjs.map +1 -1
- package/_mjs/data/TestAnnotation.mjs +3 -4
- package/_mjs/data/TestAnnotationMap.mjs +28 -24
- package/_mjs/data/TestAnnotationMap.mjs.map +1 -1
- package/_mjs/data/TestArgs/definition.mjs +14 -10
- package/_mjs/data/TestArgs/definition.mjs.map +1 -1
- package/_mjs/data/TestArgs.mjs +2 -3
- package/_mjs/data/TestConfig.mjs +34 -30
- package/_mjs/data/TestConfig.mjs.map +1 -1
- package/_mjs/data/TestFailure.mjs +35 -31
- package/_mjs/data/TestFailure.mjs.map +1 -1
- package/_mjs/data/TestSuccess.mjs +22 -18
- package/_mjs/data/TestSuccess.mjs.map +1 -1
- package/_mjs/data/TestTimeoutException.mjs +9 -5
- package/_mjs/data/TestTimeoutException.mjs.map +1 -1
- package/_mjs/data.mjs +0 -2
- package/_mjs/global.mjs +0 -2
- package/_mjs/index.mjs +0 -2
- package/_mjs/util/math.mjs +310 -432
- package/_mjs/util/math.mjs.map +1 -1
- package/_mjs/util.mjs +0 -2
- package/_mjs/vitest.mjs +80 -80
- package/_mjs/vitest.mjs.map +1 -1
- package/package.json +13 -4
- package/_cjs/control/Annotations.cjs.map +0 -1
- package/_cjs/control/Assertion.cjs.map +0 -1
- package/_cjs/control/AssertionIO.cjs.map +0 -1
- package/_cjs/control/DefaultTestReporter.cjs.map +0 -1
- package/_cjs/control/FreeBooleanAlgebraIO.cjs.map +0 -1
- package/_cjs/control/Gen/constraints.cjs.map +0 -1
- package/_cjs/control/Gen.cjs.map +0 -1
- package/_cjs/control/Live.cjs.map +0 -1
- package/_cjs/control/Sample.cjs.map +0 -1
- package/_cjs/control/Sized.cjs.map +0 -1
- package/_cjs/control/Spec.cjs.map +0 -1
- package/_cjs/control/TestAnnotationRenderer.cjs.map +0 -1
- package/_cjs/control/TestAspect/definition.cjs.map +0 -1
- package/_cjs/control/TestAspect.cjs.map +0 -1
- package/_cjs/control/TestClock.cjs.map +0 -1
- package/_cjs/control/TestConsole.cjs.map +0 -1
- package/_cjs/control/TestRandom.cjs.map +0 -1
- package/_cjs/control/TestRenderer/definition.cjs.map +0 -1
- package/_cjs/control.cjs.map +0 -1
- package/_cjs/data/AssertionValue.cjs.map +0 -1
- package/_cjs/data/ExecutedSpec.cjs.map +0 -1
- package/_cjs/data/FreeBooleanAlgebra.cjs.map +0 -1
- package/_cjs/data/LogLine/Fragment.cjs.map +0 -1
- package/_cjs/data/LogLine/Line.cjs.map +0 -1
- package/_cjs/data/LogLine/Message.cjs.map +0 -1
- package/_cjs/data/LogLine.cjs.map +0 -1
- package/_cjs/data/Render.cjs.map +0 -1
- package/_cjs/data/RenderParam.cjs.map +0 -1
- package/_cjs/data/TestAnnotation.cjs.map +0 -1
- package/_cjs/data/TestArgs.cjs.map +0 -1
- package/_cjs/data.cjs.map +0 -1
- package/_cjs/global.cjs.map +0 -1
- package/_cjs/index.cjs.map +0 -1
- package/_cjs/util.cjs.map +0 -1
- package/_mjs/control/Annotations.mjs.map +0 -1
- package/_mjs/control/Assertion.mjs.map +0 -1
- package/_mjs/control/AssertionIO.mjs.map +0 -1
- package/_mjs/control/DefaultTestReporter.mjs.map +0 -1
- package/_mjs/control/FreeBooleanAlgebraIO.mjs.map +0 -1
- package/_mjs/control/Gen/constraints.mjs.map +0 -1
- package/_mjs/control/Gen.mjs.map +0 -1
- package/_mjs/control/Live.mjs.map +0 -1
- package/_mjs/control/Sample.mjs.map +0 -1
- package/_mjs/control/Sized.mjs.map +0 -1
- package/_mjs/control/Spec.mjs.map +0 -1
- package/_mjs/control/TestAnnotationRenderer.mjs.map +0 -1
- package/_mjs/control/TestAspect/definition.mjs.map +0 -1
- package/_mjs/control/TestAspect.mjs.map +0 -1
- package/_mjs/control/TestClock.mjs.map +0 -1
- package/_mjs/control/TestConsole.mjs.map +0 -1
- package/_mjs/control/TestRandom.mjs.map +0 -1
- package/_mjs/control/TestRenderer/definition.mjs.map +0 -1
- package/_mjs/control.mjs.map +0 -1
- package/_mjs/data/AssertionValue.mjs.map +0 -1
- package/_mjs/data/ExecutedSpec.mjs.map +0 -1
- package/_mjs/data/FreeBooleanAlgebra.mjs.map +0 -1
- package/_mjs/data/LogLine/Fragment.mjs.map +0 -1
- package/_mjs/data/LogLine/Line.mjs.map +0 -1
- package/_mjs/data/LogLine/Message.mjs.map +0 -1
- package/_mjs/data/LogLine.mjs.map +0 -1
- package/_mjs/data/Render.mjs.map +0 -1
- package/_mjs/data/RenderParam.mjs.map +0 -1
- package/_mjs/data/TestAnnotation.mjs.map +0 -1
- package/_mjs/data/TestArgs.mjs.map +0 -1
- package/_mjs/data.mjs.map +0 -1
- package/_mjs/global.mjs.map +0 -1
- package/_mjs/index.mjs.map +0 -1
- package/_mjs/util.mjs.map +0 -1
package/_mjs/util/math.mjs
CHANGED
|
@@ -1,505 +1,383 @@
|
|
|
1
|
-
const fileName_1 = "(@fncts/test) src/util/math.ts";
|
|
2
1
|
import * as tsplus_module_1 from "@fncts/io/IO/api";
|
|
3
2
|
import * as tsplus_module_2 from "@fncts/io/Random/api";
|
|
3
|
+
//#region build/esm/util/math.js
|
|
4
|
+
const fileName_1 = "(@fncts/test) src/util/math.ts";
|
|
4
5
|
/** @internal */
|
|
5
|
-
|
|
6
|
+
const MIN_VALUE_32 = 2 ** -126 * 2 ** -23;
|
|
6
7
|
/** @internal */
|
|
7
|
-
|
|
8
|
+
const MAX_VALUE_32 = 2 ** 127 * (1 + (2 ** 23 - 1) / 2 ** 23);
|
|
8
9
|
/** @internal */
|
|
9
|
-
|
|
10
|
+
const EPSILON_32 = 2 ** -23;
|
|
10
11
|
/** @internal */
|
|
11
|
-
const INDEX_POSITIVE_INFINITY_32 = 2139095040;
|
|
12
|
+
const INDEX_POSITIVE_INFINITY_32 = 2139095040;
|
|
12
13
|
/** @internal */
|
|
13
|
-
const INDEX_NEGATIVE_INFINITY_32 = -2139095041;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const index = floatToIndex(f);
|
|
21
|
-
if (!Number.isInteger(index)) {
|
|
22
|
-
return tsplus_module_1.haltNow(new Error(errorMessage), fileName_1 + ":20:22");
|
|
23
|
-
}
|
|
24
|
-
return tsplus_module_1.succeedNow(index, fileName_1 + ":22:23");
|
|
14
|
+
const INDEX_NEGATIVE_INFINITY_32 = -2139095041;
|
|
15
|
+
function safeFloatToIndex(f, label) {
|
|
16
|
+
const errorMessage = "fc.floatNext constraints." + label + " must be a 32-bit float - you can convert any double to a 32-bit float by using `new Float32Array([myDouble])[0]`";
|
|
17
|
+
if (Number.isNaN(f) || Number.isFinite(f) && (f < -MAX_VALUE_32 || f > MAX_VALUE_32)) return tsplus_module_1.haltNow(new Error(errorMessage), fileName_1 + ":16:22");
|
|
18
|
+
const index = floatToIndex(f);
|
|
19
|
+
if (!Number.isInteger(index)) return tsplus_module_1.haltNow(new Error(errorMessage), fileName_1 + ":20:22");
|
|
20
|
+
return tsplus_module_1.succeedNow(index, fileName_1 + ":22:23");
|
|
25
21
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
return {
|
|
41
|
-
exponent: Number.NaN,
|
|
42
|
-
significand: Number.NaN
|
|
43
|
-
};
|
|
22
|
+
function decomposeFloat(f) {
|
|
23
|
+
const maxSignificand = 1 + (2 ** 23 - 1) / 2 ** 23;
|
|
24
|
+
for (let exponent = -126; exponent !== 128; ++exponent) {
|
|
25
|
+
const powExponent = 2 ** exponent;
|
|
26
|
+
const maxForExponent = maxSignificand * powExponent;
|
|
27
|
+
if (Math.abs(f) <= maxForExponent) return {
|
|
28
|
+
exponent,
|
|
29
|
+
significand: f / powExponent
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
exponent: NaN,
|
|
34
|
+
significand: NaN
|
|
35
|
+
};
|
|
44
36
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
const {
|
|
53
|
-
exponent,
|
|
54
|
-
significand
|
|
55
|
-
} = decomposeFloat(f);
|
|
56
|
-
if (Number.isNaN(exponent) || Number.isNaN(significand) || !Number.isInteger(significand * 0x800000)) {
|
|
57
|
-
return Number.NaN;
|
|
58
|
-
}
|
|
59
|
-
if (f > 0 || f === 0 && 1 / f === Number.POSITIVE_INFINITY) {
|
|
60
|
-
return indexInFloatFromDecomp(exponent, significand);
|
|
61
|
-
} else {
|
|
62
|
-
return -indexInFloatFromDecomp(exponent, -significand) - 1;
|
|
63
|
-
}
|
|
37
|
+
function floatToIndex(f) {
|
|
38
|
+
if (f === Number.POSITIVE_INFINITY) return INDEX_POSITIVE_INFINITY_32;
|
|
39
|
+
if (f === Number.NEGATIVE_INFINITY) return INDEX_NEGATIVE_INFINITY_32;
|
|
40
|
+
const { exponent, significand } = decomposeFloat(f);
|
|
41
|
+
if (Number.isNaN(exponent) || Number.isNaN(significand) || !Number.isInteger(significand * 8388608)) return NaN;
|
|
42
|
+
if (f > 0 || f === 0 && 1 / f === Number.POSITIVE_INFINITY) return indexInFloatFromDecomp(exponent, significand);
|
|
43
|
+
else return -indexInFloatFromDecomp(exponent, -significand) - 1;
|
|
64
44
|
}
|
|
65
45
|
/** @internal */
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
// significand is always max-ed.
|
|
70
|
-
// The float close to zero are the only one having a significand <1, they also have an exponent of -126.
|
|
71
|
-
// They are in range: [2**(-126) * 2**(-23), 2**(-126) * (2 - 2 ** 23)]
|
|
72
|
-
// In other words there are 2**24 elements in that range if we include zero.
|
|
73
|
-
// All other ranges (other exponents) have a length of 2**23 elements.
|
|
74
|
-
if (exponent === -126) {
|
|
75
|
-
return significand * 0x800000; // significand * 2**23
|
|
76
|
-
}
|
|
77
|
-
// Offset due to exp = -126 + Offset of previous exp (excl. -126) + Offset in current exp
|
|
78
|
-
// 2**24 + (exponent - (-126) -1) * 2**23 + (significand - 1) * 2**23
|
|
79
|
-
return (exponent + 127) * 0x800000 + (significand - 1) * 0x800000;
|
|
46
|
+
function indexInFloatFromDecomp(exponent, significand) {
|
|
47
|
+
if (exponent === -126) return significand * 8388608;
|
|
48
|
+
return (exponent + 127) * 8388608 + (significand - 1) * 8388608;
|
|
80
49
|
}
|
|
81
50
|
/**
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
if (index < 0x1000000) {
|
|
96
|
-
// The first 2**24 elements correspond to values having
|
|
97
|
-
// exponent = -126 and significand = index * 2**(-23)
|
|
98
|
-
return index * 2 ** -149;
|
|
99
|
-
}
|
|
100
|
-
const postIndex = index - 0x1000000;
|
|
101
|
-
// Math.floor(postIndex / 0x800000) = Math.floor(postIndex / 2**23) = (postIndex >> 23)
|
|
102
|
-
const exponent = -125 + (postIndex >> 23);
|
|
103
|
-
// (postIndex % 0x800000) / 0x800000 = (postIndex & 0x7fffff) / 0x800000
|
|
104
|
-
const significand = 1 + (postIndex & 0x7fffff) / 0x800000;
|
|
105
|
-
return significand * 2 ** exponent;
|
|
51
|
+
* Compute the 32-bit floating point number corresponding to the provided indexes
|
|
52
|
+
*
|
|
53
|
+
* @param n - index of the float
|
|
54
|
+
*
|
|
55
|
+
* @internal
|
|
56
|
+
*/
|
|
57
|
+
function indexToFloat(index) {
|
|
58
|
+
if (index < 0) return -indexToFloat(-index - 1);
|
|
59
|
+
if (index === INDEX_POSITIVE_INFINITY_32) return Number.POSITIVE_INFINITY;
|
|
60
|
+
if (index < 16777216) return index * 2 ** -149;
|
|
61
|
+
const postIndex = index - 16777216;
|
|
62
|
+
const exponent = -125 + (postIndex >> 23);
|
|
63
|
+
return (1 + (postIndex & 8388607) / 8388608) * 2 ** exponent;
|
|
106
64
|
}
|
|
107
65
|
/** @internal */
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
66
|
+
const Zero64 = {
|
|
67
|
+
sign: 1,
|
|
68
|
+
data: [0, 0]
|
|
111
69
|
};
|
|
112
70
|
/** @internal */
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
71
|
+
const Unit64 = {
|
|
72
|
+
sign: 1,
|
|
73
|
+
data: [0, 1]
|
|
116
74
|
};
|
|
117
75
|
/** @internal */
|
|
118
|
-
|
|
119
|
-
|
|
76
|
+
function isZero64(a) {
|
|
77
|
+
return a.data[0] === 0 && a.data[1] === 0;
|
|
120
78
|
}
|
|
121
79
|
/** @internal */
|
|
122
|
-
|
|
123
|
-
|
|
80
|
+
function isStrictlyNegative64(a) {
|
|
81
|
+
return a.sign === -1 && !isZero64(a);
|
|
124
82
|
}
|
|
125
83
|
/** @internal */
|
|
126
|
-
|
|
127
|
-
|
|
84
|
+
function isStrictlyPositive64(a) {
|
|
85
|
+
return a.sign === 1 && !isZero64(a);
|
|
128
86
|
}
|
|
129
87
|
/** @internal */
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
}
|
|
134
|
-
return false;
|
|
88
|
+
function isEqual64(a, b) {
|
|
89
|
+
if (a.data[0] === b.data[0] && a.data[1] === b.data[1]) return a.sign === b.sign || a.data[0] === 0 && a.data[1] === 0;
|
|
90
|
+
return false;
|
|
135
91
|
}
|
|
136
92
|
/** @internal */
|
|
137
93
|
function isStrictlySmaller64Internal(a, b) {
|
|
138
|
-
|
|
94
|
+
return a[0] < b[0] || a[0] === b[0] && a[1] < b[1];
|
|
139
95
|
}
|
|
140
96
|
/** @internal */
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
: isStrictlySmaller64Internal(b.data, a.data); // a.sign = -1, b.sign = -1
|
|
145
|
-
}
|
|
146
|
-
// a.sign = +1, b.sign = -1 is always false
|
|
147
|
-
return a.sign === -1 && (!isZero64(a) || !isZero64(b)); // a.sign = -1, b.sign = +1
|
|
97
|
+
function isStrictlySmaller64(a, b) {
|
|
98
|
+
if (a.sign === b.sign) return a.sign === 1 ? isStrictlySmaller64Internal(a.data, b.data) : isStrictlySmaller64Internal(b.data, a.data);
|
|
99
|
+
return a.sign === -1 && (!isZero64(a) || !isZero64(b));
|
|
148
100
|
}
|
|
149
101
|
/** @internal */
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
102
|
+
function clone64(a) {
|
|
103
|
+
return {
|
|
104
|
+
sign: a.sign,
|
|
105
|
+
data: [a.data[0], a.data[1]]
|
|
106
|
+
};
|
|
155
107
|
}
|
|
156
108
|
/** @internal */
|
|
157
109
|
function substract64DataInternal(a, b) {
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
110
|
+
let reminderLow = 0;
|
|
111
|
+
let low = a[1] - b[1];
|
|
112
|
+
if (low < 0) {
|
|
113
|
+
reminderLow = 1;
|
|
114
|
+
low = low >>> 0;
|
|
115
|
+
}
|
|
116
|
+
return [a[0] - b[0] - reminderLow, low];
|
|
165
117
|
}
|
|
166
118
|
/**
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
119
|
+
* Expects a >= b
|
|
120
|
+
* @internal
|
|
121
|
+
*/
|
|
170
122
|
function substract64Internal(a, b) {
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
return {
|
|
183
|
-
sign: 1,
|
|
184
|
-
data: a.sign === 1 ? substract64DataInternal(a.data, b.data) : substract64DataInternal(b.data, a.data)
|
|
185
|
-
};
|
|
123
|
+
if (a.sign === 1 && b.sign === -1) {
|
|
124
|
+
const low = a.data[1] + b.data[1];
|
|
125
|
+
return {
|
|
126
|
+
sign: 1,
|
|
127
|
+
data: [a.data[0] + b.data[0] + (low > 4294967295 ? 1 : 0) >>> 0, low >>> 0]
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
return {
|
|
131
|
+
sign: 1,
|
|
132
|
+
data: a.sign === 1 ? substract64DataInternal(a.data, b.data) : substract64DataInternal(b.data, a.data)
|
|
133
|
+
};
|
|
186
134
|
}
|
|
187
135
|
/**
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
136
|
+
* Substract two ArrayInt64
|
|
137
|
+
* @returns When result is zero always with sign=1
|
|
138
|
+
* @internal
|
|
139
|
+
*/
|
|
140
|
+
function substract64(arrayIntA, arrayIntB) {
|
|
141
|
+
if (isStrictlySmaller64(arrayIntA, arrayIntB)) {
|
|
142
|
+
const out = substract64Internal(arrayIntB, arrayIntA);
|
|
143
|
+
out.sign = -1;
|
|
144
|
+
return out;
|
|
145
|
+
}
|
|
146
|
+
return substract64Internal(arrayIntA, arrayIntB);
|
|
199
147
|
}
|
|
200
148
|
/**
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
149
|
+
* Negative version of an ArrayInt64
|
|
150
|
+
* @internal
|
|
151
|
+
*/
|
|
152
|
+
function negative64(arrayIntA) {
|
|
153
|
+
return {
|
|
154
|
+
sign: -arrayIntA.sign,
|
|
155
|
+
data: [arrayIntA.data[0], arrayIntA.data[1]]
|
|
156
|
+
};
|
|
209
157
|
}
|
|
210
158
|
/**
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
}
|
|
222
|
-
return substract64(arrayIntA, negative64(arrayIntB));
|
|
159
|
+
* Add two ArrayInt64
|
|
160
|
+
* @returns When result is zero always with sign=1
|
|
161
|
+
* @internal
|
|
162
|
+
*/
|
|
163
|
+
function add64(arrayIntA, arrayIntB) {
|
|
164
|
+
if (isZero64(arrayIntB)) {
|
|
165
|
+
if (isZero64(arrayIntA)) return clone64(Zero64);
|
|
166
|
+
return clone64(arrayIntA);
|
|
167
|
+
}
|
|
168
|
+
return substract64(arrayIntA, negative64(arrayIntB));
|
|
223
169
|
}
|
|
224
170
|
/**
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
171
|
+
* Halve an ArrayInt64
|
|
172
|
+
* @internal
|
|
173
|
+
*/
|
|
174
|
+
function halve64(a) {
|
|
175
|
+
return {
|
|
176
|
+
sign: a.sign,
|
|
177
|
+
data: [Math.floor(a.data[0] / 2), (a.data[0] % 2 === 1 ? 2147483648 : 0) + Math.floor(a.data[1] / 2)]
|
|
178
|
+
};
|
|
233
179
|
}
|
|
234
180
|
/**
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
};
|
|
181
|
+
* Apply log2 to an ArrayInt64 (preserve sign)
|
|
182
|
+
* @internal
|
|
183
|
+
*/
|
|
184
|
+
function logLike64(a) {
|
|
185
|
+
return {
|
|
186
|
+
sign: a.sign,
|
|
187
|
+
data: [0, Math.floor(Math.log(a.data[0] * 4294967296 + a.data[1]) / Math.log(2))]
|
|
188
|
+
};
|
|
244
189
|
}
|
|
245
190
|
/** @internal */
|
|
246
191
|
const INDEX_POSITIVE_INFINITY = {
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
};
|
|
192
|
+
sign: 1,
|
|
193
|
+
data: [2146435072, 0]
|
|
194
|
+
};
|
|
250
195
|
/** @internal */
|
|
251
196
|
const INDEX_NEGATIVE_INFINITY = {
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
};
|
|
197
|
+
sign: -1,
|
|
198
|
+
data: [2146435072, 1]
|
|
199
|
+
};
|
|
255
200
|
/**
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
return {
|
|
285
|
-
exponent: Number.NaN,
|
|
286
|
-
significand: Number.NaN
|
|
287
|
-
};
|
|
201
|
+
* Decompose a 64-bit floating point number into a significand and exponent
|
|
202
|
+
* such that:
|
|
203
|
+
* - significand over 53 bits including sign (also referred as fraction)
|
|
204
|
+
* - exponent over 11 bits including sign
|
|
205
|
+
* - whenever there are multiple possibilities we take the one having the highest significand (in abs)
|
|
206
|
+
* - Number.MAX_VALUE = 2**1023 * (1 + (2**52-1)/2**52)
|
|
207
|
+
* = 2**1023 * (2 - Number.EPSILON)
|
|
208
|
+
* - Number.MIN_VALUE = 2**(-1022) * 2**(-52)
|
|
209
|
+
* - Number.EPSILON = 2**(-52)
|
|
210
|
+
*
|
|
211
|
+
* @param d - 64-bit floating point number to be decomposed into (significand, exponent)
|
|
212
|
+
*
|
|
213
|
+
* @internal
|
|
214
|
+
*/
|
|
215
|
+
function decomposeDouble(d) {
|
|
216
|
+
const maxSignificand = 2 - Number.EPSILON;
|
|
217
|
+
for (let exponent = -1022; exponent !== 1024; ++exponent) {
|
|
218
|
+
const powExponent = 2 ** exponent;
|
|
219
|
+
const maxForExponent = maxSignificand * powExponent;
|
|
220
|
+
if (Math.abs(d) <= maxForExponent) return {
|
|
221
|
+
exponent,
|
|
222
|
+
significand: d / powExponent
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
return {
|
|
226
|
+
exponent: NaN,
|
|
227
|
+
significand: NaN
|
|
228
|
+
};
|
|
288
229
|
}
|
|
289
230
|
/** @internal */
|
|
290
231
|
function positiveNumberToInt64(n) {
|
|
291
|
-
|
|
232
|
+
return [~~(n / 4294967296), n >>> 0];
|
|
292
233
|
}
|
|
293
234
|
/** @internal */
|
|
294
235
|
function indexInDoubleFromDecomp(exponent, significand) {
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
// All other ranges (other exponents) have a length of 2**52 elements.
|
|
302
|
-
if (exponent === -1022) {
|
|
303
|
-
// We want the significand to be an integer value (like an index)
|
|
304
|
-
const rescaledSignificand = significand * 2 ** 52; // significand * 2**52
|
|
305
|
-
return positiveNumberToInt64(rescaledSignificand);
|
|
306
|
-
}
|
|
307
|
-
// Offset due to exp = -1022 + Offset of previous exp (excl. -1022) + Offset in current exp
|
|
308
|
-
// 2**53 + (exponent - (-1022) -1) * 2**52 + (significand - 1) * 2**52
|
|
309
|
-
// (exponent + 1023) * 2**52 + (significand - 1) * 2**52
|
|
310
|
-
const rescaledSignificand = (significand - 1) * 2 ** 52; // (significand-1) * 2**52
|
|
311
|
-
const exponentOnlyHigh = (exponent + 1023) * 2 ** 20; // (exponent + 1023) * 2**52 => [high: (exponent + 1023) * 2**20, low: 0]
|
|
312
|
-
const index = positiveNumberToInt64(rescaledSignificand);
|
|
313
|
-
index[0] += exponentOnlyHigh;
|
|
314
|
-
return index;
|
|
236
|
+
if (exponent === -1022) return positiveNumberToInt64(significand * 2 ** 52);
|
|
237
|
+
const rescaledSignificand = (significand - 1) * 2 ** 52;
|
|
238
|
+
const exponentOnlyHigh = (exponent + 1023) * 2 ** 20;
|
|
239
|
+
const index = positiveNumberToInt64(rescaledSignificand);
|
|
240
|
+
index[0] += exponentOnlyHigh;
|
|
241
|
+
return index;
|
|
315
242
|
}
|
|
316
243
|
/**
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
indexOpposite[1] += 1;
|
|
346
|
-
}
|
|
347
|
-
return {
|
|
348
|
-
sign: -1,
|
|
349
|
-
data: indexOpposite
|
|
350
|
-
}; // -indexInDoubleFromDecomp(exponent, -significand) - 1
|
|
351
|
-
}
|
|
244
|
+
* Compute the index of d relative to other available 64-bit floating point numbers
|
|
245
|
+
* Rq: Produces negative indexes for negative doubles
|
|
246
|
+
*
|
|
247
|
+
* @param d - 64-bit floating point number, anything except NaN
|
|
248
|
+
*
|
|
249
|
+
* @internal
|
|
250
|
+
*/
|
|
251
|
+
function doubleToIndex(d) {
|
|
252
|
+
if (d === Number.POSITIVE_INFINITY) return clone64(INDEX_POSITIVE_INFINITY);
|
|
253
|
+
if (d === Number.NEGATIVE_INFINITY) return clone64(INDEX_NEGATIVE_INFINITY);
|
|
254
|
+
const decomp = decomposeDouble(d);
|
|
255
|
+
const exponent = decomp.exponent;
|
|
256
|
+
const significand = decomp.significand;
|
|
257
|
+
if (d > 0 || d === 0 && 1 / d === Number.POSITIVE_INFINITY) return {
|
|
258
|
+
sign: 1,
|
|
259
|
+
data: indexInDoubleFromDecomp(exponent, significand)
|
|
260
|
+
};
|
|
261
|
+
else {
|
|
262
|
+
const indexOpposite = indexInDoubleFromDecomp(exponent, -significand);
|
|
263
|
+
if (indexOpposite[1] === 4294967295) {
|
|
264
|
+
indexOpposite[0] += 1;
|
|
265
|
+
indexOpposite[1] = 0;
|
|
266
|
+
} else indexOpposite[1] += 1;
|
|
267
|
+
return {
|
|
268
|
+
sign: -1,
|
|
269
|
+
data: indexOpposite
|
|
270
|
+
};
|
|
271
|
+
}
|
|
352
272
|
}
|
|
353
273
|
/**
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
if (index.data[0] < 0x200000) {
|
|
378
|
-
// if: index < 2 ** 53 <--> index[0] < 2 ** (53-32) = 0x20_0000
|
|
379
|
-
// The first 2**53 elements correspond to values having
|
|
380
|
-
// exponent = -1022 and significand = index * Number.EPSILON
|
|
381
|
-
// double value = index * 2 ** -1022 * Number.EPSILON
|
|
382
|
-
// = index * 2 ** -1022 * 2 ** -52
|
|
383
|
-
// = index * 2 ** -1074
|
|
384
|
-
return (index.data[0] * 0x100000000 + index.data[1]) * 2 ** -1074;
|
|
385
|
-
}
|
|
386
|
-
const postIndexHigh = index.data[0] - 0x200000; // postIndex = index - 2 ** 53
|
|
387
|
-
// exponent = -1021 + Math.floor(postIndex / 2**52)
|
|
388
|
-
// = -1021 + Math.floor(postIndexHigh / 2**(52-32))
|
|
389
|
-
// = -1021 + Math.floor(postIndexHigh / 2**20)
|
|
390
|
-
// = -1021 + (postIndexHigh >> 20)
|
|
391
|
-
const exponent = -1021 + (postIndexHigh >> 20);
|
|
392
|
-
// significand = 1 + (postIndex % 2**52) / 2**52
|
|
393
|
-
// = 1 + ((postIndexHigh * 2**32 + postIndexLow) % 2**52) / 2**52
|
|
394
|
-
// = 1 + ((postIndexHigh % 2**20) * 2**32 + postIndexLow) / 2**52
|
|
395
|
-
// = 1 + ((postIndexHigh & 0xfffff) * 2**32 + postIndexLow) / 2**52
|
|
396
|
-
// = 1 + ((postIndexHigh & 0xfffff) * 2**32 + postIndexLow) * Number.EPSILON
|
|
397
|
-
const significand = 1 + ((postIndexHigh & 0xfffff) * 2 ** 32 + index.data[1]) * Number.EPSILON;
|
|
398
|
-
return significand * 2 ** exponent;
|
|
274
|
+
* Compute the 64-bit floating point number corresponding to the provided indexes
|
|
275
|
+
*
|
|
276
|
+
* @param n - index of the double
|
|
277
|
+
*
|
|
278
|
+
* @internal
|
|
279
|
+
*/
|
|
280
|
+
function indexToDouble(index) {
|
|
281
|
+
if (index.sign === -1) {
|
|
282
|
+
const indexOpposite = {
|
|
283
|
+
sign: 1,
|
|
284
|
+
data: [index.data[0], index.data[1]]
|
|
285
|
+
};
|
|
286
|
+
if (indexOpposite.data[1] === 0) {
|
|
287
|
+
indexOpposite.data[0] -= 1;
|
|
288
|
+
indexOpposite.data[1] = 4294967295;
|
|
289
|
+
} else indexOpposite.data[1] -= 1;
|
|
290
|
+
return -indexToDouble(indexOpposite);
|
|
291
|
+
}
|
|
292
|
+
if (isEqual64(index, INDEX_POSITIVE_INFINITY)) return Number.POSITIVE_INFINITY;
|
|
293
|
+
if (index.data[0] < 2097152) return (index.data[0] * 4294967296 + index.data[1]) * 2 ** -1074;
|
|
294
|
+
const postIndexHigh = index.data[0] - 2097152;
|
|
295
|
+
const exponent = -1021 + (postIndexHigh >> 20);
|
|
296
|
+
return (1 + ((postIndexHigh & 1048575) * 2 ** 32 + index.data[1]) * Number.EPSILON) * 2 ** exponent;
|
|
399
297
|
}
|
|
400
298
|
/**
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
return tsplus_module_1.haltNow(new Error("fc.doubleNext constraints." + label + " must be a 32-bit float"), fileName_1 + ":403:22");
|
|
409
|
-
}
|
|
410
|
-
return tsplus_module_1.succeedNow(doubleToIndex(d), fileName_1 + ":405:23");
|
|
299
|
+
* Same as {@link doubleToIndex} except it throws in case of invalid double
|
|
300
|
+
*
|
|
301
|
+
* @internal
|
|
302
|
+
*/
|
|
303
|
+
function safeDoubleToIndex(d, label) {
|
|
304
|
+
if (Number.isNaN(d)) return tsplus_module_1.haltNow(/* @__PURE__ */ new Error("fc.doubleNext constraints." + label + " must be a 32-bit float"), fileName_1 + ":403:22");
|
|
305
|
+
return tsplus_module_1.succeedNow(doubleToIndex(d), fileName_1 + ":405:23");
|
|
411
306
|
}
|
|
412
|
-
const EPSILON =
|
|
413
|
-
const MAX_VALUE = (2 - EPSILON) *
|
|
414
|
-
const MIN_VALUE =
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
let y = x * (x < 0 ? 1 - EPSILON / 2 : 1 + EPSILON);
|
|
429
|
-
if (y === x) {
|
|
430
|
-
y = MIN_VALUE * EPSILON > 0 ? x + MIN_VALUE * EPSILON : x + MIN_VALUE;
|
|
431
|
-
}
|
|
432
|
-
if (y === +1 / 0) {
|
|
433
|
-
y = +MAX_VALUE;
|
|
434
|
-
}
|
|
435
|
-
const b = x + (y - x) / 2;
|
|
436
|
-
if (x < b && b < y) {
|
|
437
|
-
y = b;
|
|
438
|
-
}
|
|
439
|
-
const c = (y + x) / 2;
|
|
440
|
-
if (x < c && c < y) {
|
|
441
|
-
y = c;
|
|
442
|
-
}
|
|
443
|
-
return y === 0 ? -0 : y;
|
|
307
|
+
const EPSILON = Math.pow(2, -52);
|
|
308
|
+
const MAX_VALUE = (2 - EPSILON) * Math.pow(2, 1023);
|
|
309
|
+
const MIN_VALUE = Math.pow(2, -1022);
|
|
310
|
+
function nextUp(x) {
|
|
311
|
+
if (x !== x) return x;
|
|
312
|
+
if (x === -Infinity) return -MAX_VALUE;
|
|
313
|
+
if (x === Infinity) return Infinity;
|
|
314
|
+
if (x === +MAX_VALUE) return Infinity;
|
|
315
|
+
let y = x * (x < 0 ? 1 - EPSILON / 2 : 1 + EPSILON);
|
|
316
|
+
if (y === x) y = MIN_VALUE * EPSILON > 0 ? x + MIN_VALUE * EPSILON : x + MIN_VALUE;
|
|
317
|
+
if (y === Infinity) y = +MAX_VALUE;
|
|
318
|
+
const b = x + (y - x) / 2;
|
|
319
|
+
if (x < b && b < y) y = b;
|
|
320
|
+
const c = (y + x) / 2;
|
|
321
|
+
if (x < c && c < y) y = c;
|
|
322
|
+
return y === 0 ? -0 : y;
|
|
444
323
|
}
|
|
445
|
-
|
|
446
|
-
|
|
324
|
+
function nextAfter(x, y) {
|
|
325
|
+
return y < x ? -nextUp(-x) : y > x ? nextUp(x) : x !== x ? x : y;
|
|
447
326
|
}
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
327
|
+
function computeBiasedRanges(min, max, biasedRanges) {
|
|
328
|
+
if (biasedRanges != null) return biasedRanges;
|
|
329
|
+
if (isEqual64(min, max)) return [{
|
|
330
|
+
min,
|
|
331
|
+
max
|
|
332
|
+
}];
|
|
333
|
+
const minStrictlySmallerThanZero = isStrictlyNegative64(min);
|
|
334
|
+
const maxStrictlyGreaterThanZero = isStrictlyPositive64(max);
|
|
335
|
+
if (minStrictlySmallerThanZero && maxStrictlyGreaterThanZero) {
|
|
336
|
+
const logMin = logLike64(min);
|
|
337
|
+
const logMax = logLike64(max);
|
|
338
|
+
return [
|
|
339
|
+
{
|
|
340
|
+
min: logMin,
|
|
341
|
+
max: logMax
|
|
342
|
+
},
|
|
343
|
+
{
|
|
344
|
+
min: substract64(max, logMax),
|
|
345
|
+
max
|
|
346
|
+
},
|
|
347
|
+
{
|
|
348
|
+
min,
|
|
349
|
+
max: substract64(min, logMin)
|
|
350
|
+
}
|
|
351
|
+
];
|
|
352
|
+
} else {
|
|
353
|
+
const logGap = logLike64(substract64(max, min));
|
|
354
|
+
const closeToMin = {
|
|
355
|
+
min,
|
|
356
|
+
max: add64(min, logGap)
|
|
357
|
+
};
|
|
358
|
+
const closeToMax = {
|
|
359
|
+
min: substract64(max, logGap),
|
|
360
|
+
max
|
|
361
|
+
};
|
|
362
|
+
return minStrictlySmallerThanZero ? [closeToMax, closeToMin] : [closeToMin, closeToMax];
|
|
363
|
+
}
|
|
485
364
|
}
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
}
|
|
498
|
-
const id = yield* _(tsplus_module_2.nextIntBetween(-2 * (ranges.length - 1), ranges.length - 2, fileName_1 + ":504:46"), fileName_1 + ":504:24");
|
|
499
|
-
return id < 0 ? ranges[0] : ranges[id + 1];
|
|
500
|
-
}, fileName_1 + ":496:16");
|
|
365
|
+
function computeArrayInt64GenerateRange(min, max, biasFactor, biasedRanges) {
|
|
366
|
+
return tsplus_module_1.gen(function* (_) {
|
|
367
|
+
if (biasFactor === void 0 || (yield* _(tsplus_module_2.nextIntBetween(1, biasFactor, fileName_1 + ":497:68"), fileName_1 + ":497:46")) !== 1) return {
|
|
368
|
+
min,
|
|
369
|
+
max
|
|
370
|
+
};
|
|
371
|
+
const ranges = computeBiasedRanges(min, max, biasedRanges);
|
|
372
|
+
if (ranges.length === 1) return ranges[0];
|
|
373
|
+
const id = yield* _(tsplus_module_2.nextIntBetween(-2 * (ranges.length - 1), ranges.length - 2, fileName_1 + ":504:46"), fileName_1 + ":504:24");
|
|
374
|
+
return id < 0 ? ranges[0] : ranges[id + 1];
|
|
375
|
+
}, fileName_1 + ":496:16");
|
|
501
376
|
}
|
|
502
|
-
|
|
503
|
-
|
|
377
|
+
function clamp(n, min, max) {
|
|
378
|
+
return n < min ? min : n > max ? max : n;
|
|
504
379
|
}
|
|
380
|
+
//#endregion
|
|
381
|
+
export { EPSILON_32, MAX_VALUE_32, MIN_VALUE_32, Unit64, Zero64, add64, clamp, clone64, computeArrayInt64GenerateRange, computeBiasedRanges, decomposeDouble, decomposeFloat, doubleToIndex, floatToIndex, halve64, indexInFloatFromDecomp, indexToDouble, indexToFloat, isEqual64, isStrictlyNegative64, isStrictlyPositive64, isStrictlySmaller64, isZero64, logLike64, negative64, nextAfter, nextUp, safeDoubleToIndex, safeFloatToIndex, substract64 };
|
|
382
|
+
|
|
505
383
|
//# sourceMappingURL=math.mjs.map
|