Skip collection zoom when manual camera is already at maximum distance
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
param([Parameter(Mandatory)][string]$EvidenceDir,[Parameter(Mandatory)][string]$EnteredFixture,[Parameter(Mandatory)][string]$CollectedFixture,[string]$ProgressionSource=(Join-Path $PSScriptRoot 'exercise-final-progression.ps1'))
|
||||
$ErrorActionPreference='Stop'
|
||||
New-Item -ItemType Directory $EvidenceDir -Force|Out-Null
|
||||
$checks=[Collections.Generic.List[object]]::new();$script:inputs=[Collections.Generic.List[object]]::new()
|
||||
function Record($Id,$Pass,$Actual){$checks.Add(@{id=$Id;passed=[bool]$Pass;actual=$Actual})}
|
||||
function Clone($Value){return $Value|ConvertTo-Json -Depth 30|ConvertFrom-Json}
|
||||
function Load($Path,$Name){
|
||||
$a=[Management.Automation.Language.Parser]::ParseFile($Path,[ref]$null,[ref]$null)
|
||||
$f=$a.Find({param($n)$n-is[Management.Automation.Language.FunctionDefinitionAst]-and$n.Name-eq$Name},$true)
|
||||
if(!$f){throw "Missing production function $Name"}
|
||||
$body=$f.Extent.Text.Replace("function $Name","function global:$Name").Replace('$PSScriptRoot',"'$PSScriptRoot'")
|
||||
. ([scriptblock]::Create($body))
|
||||
Record "$Name-production-body" ((Get-Command $Name).ScriptBlock.Ast.Extent.Text-ceq$body) $Path
|
||||
}
|
||||
function Check($Id,$Pass,$Actual){if(!$Pass){throw "$Id : $Actual"}}
|
||||
function Start-Sleep {}
|
||||
function pwsh {$script:inputs.Add('native-pinch-leaf');$global:LASTEXITCODE=0}
|
||||
function Step {}
|
||||
function global:MergeReal {throw 'Unexpected merge after complete direct collection'}
|
||||
$commands=[Collections.Generic.List[object]]::new()
|
||||
$entered=Get-Content $EnteredFixture -Raw|ConvertFrom-Json
|
||||
$collected=Get-Content $CollectedFixture -Raw|ConvertFrom-Json
|
||||
$script:current=$null;$script:noIncrease=$false
|
||||
function Save([string]$Name){
|
||||
if($Name-eq'stage-16-count-initial'){return Clone $entered}
|
||||
if($Name-eq'stage-16-zoom-out-state'-and!$script:noIncrease){(Board $script:current 16).camera.distance=15}
|
||||
return Clone $script:current
|
||||
}
|
||||
try{
|
||||
Load (Join-Path $PSScriptRoot 'final-common.ps1') Same
|
||||
foreach($n in @('Board','Counts','ZoomOut','Collect')){Load $ProgressionSource $n}
|
||||
Record 'actual-fixture-is-collected-six-at-maximum-distance' ((Board $collected 16).camera.distance-eq15-and(Board $collected 16).groups.Count-eq1-and(Board $collected 16).collectedBallIds.Count-eq6-and(Board $collected 16).countedBallIds.Count-eq0) 'Root actual last native merge output; no fabricated completion'
|
||||
foreach($kind in @('actual-maximum','counterfactual-below-maximum','counterfactual-pinch-no-increase')){
|
||||
$script:current=Clone $collected;$script:inputs.Clear();$script:noIncrease=$kind-eq'counterfactual-pinch-no-increase'
|
||||
if($kind-ne'actual-maximum'){(Board $script:current 16).camera.distance=8}
|
||||
$before=Clone $script:current;$value=$null;$errorText=$null
|
||||
try{$value=Collect 16}catch{$errorText=$_.Exception.Message}
|
||||
if($kind-eq'actual-maximum'){
|
||||
$pass=!$errorText-and$script:inputs.Count-eq0-and(Same $value (Board $before 16))-and(Same $before $script:current)
|
||||
}elseif($kind-eq'counterfactual-below-maximum'){
|
||||
$expected=Clone $before;(Board $expected 16).camera=(Board $script:current 16).camera
|
||||
$pass=!$errorText-and$script:inputs.Count-eq5-and$value.camera.distance-gt8-and(Same $value (Board $script:current 16))-and(Same $expected $script:current)
|
||||
}else{$pass=$errorText-match'pinch-preserves-board'-and$null-eq$value-and$script:inputs.Count-eq5}
|
||||
Record "Collect-$kind" $pass @{error=$errorText;nativePinchLeaves=$script:inputs.Count;returnedBoard=$value;scope='Offline actual save replay; below15 input-leaf/camera controls counterfactual, no native success claim'}
|
||||
}
|
||||
}catch{Record 'evaluation' $false $_.Exception.Message}
|
||||
$passed=$checks.Count-gt0-and@($checks|Where-Object passed -ne $true).Count-eq0
|
||||
@{passed=$passed;scope='Production Collect/ZoomOut actual distance15 regression; mocked native leaves; initial entered and final collected saves replay completed actual work, not progression proof';progressionSha256=(Get-FileHash $ProgressionSource).Hash;fixtures=@($EnteredFixture,$CollectedFixture|ForEach-Object {@{path=$_;sha256=(Get-FileHash $_).Hash}});checks=$checks.ToArray()}|ConvertTo-Json -Depth 25|Set-Content (Join-Path $EvidenceDir 'collect-framing-result.json')
|
||||
if(!$passed){exit 1};exit 0
|
||||
Reference in New Issue
Block a user