[16614] | 1 | [cmdletbinding()]
|
---|
| 2 | param(
|
---|
[16618] | 3 | [int] $WaitToStep = 200,
|
---|
| 4 | [parameter(Position=0)][string] $BenchName = "Pagie_1",
|
---|
[16614] | 5 | [int] $PeelCnt = 3,
|
---|
| 6 | [int] $EvalCnt = 3,
|
---|
| 7 | [ValidateSet("method1","method2", "method3")][string] $InitMethod = "method1",
|
---|
| 8 | [ValidateSet("method1","method2", "method3")][string] $GrowMethod = "method1",
|
---|
[16617] | 9 | [switch] $NoClear,
|
---|
[16618] | 10 | [switch] $UseExisting,
|
---|
[16666] | 11 | [switch] $i386,
|
---|
| 12 | [int]$MaxSecondsTimeout = 6000
|
---|
[16533] | 13 | )
|
---|
| 14 |
|
---|
[16617] | 15 | $GenerateNew = -not $UseExisting.IsPresent
|
---|
[16533] | 16 |
|
---|
[16617] | 17 | $LogFolder = Join-Path -Path $(Resolve-Path $PSScriptRoot) -ChildPath "tmplog"
|
---|
[16533] | 18 |
|
---|
[16618] | 19 | $CLog = Join-Path -Path $LogFolder -ChildPath "$($BenchName)_CGen.log"
|
---|
| 20 | $GoLog = Join-Path -Path $LogFolder -ChildPath "$($BenchName)_GoOut.log"
|
---|
[16614] | 21 |
|
---|
[16618] | 22 | $CLogError = Join-Path -Path $LogFolder -ChildPath "$($BenchName)_CGen.err"
|
---|
| 23 | $GoLogError = Join-Path -Path $LogFolder -ChildPath "$($BenchName)_GoOut.err"
|
---|
[16617] | 24 |
|
---|
[16666] | 25 | if($i386.IsPresent) {
|
---|
| 26 | $CExecutable = Join-Path -Path $(Resolve-Path $PSScriptRoot) -ChildPath 'src\go-pge\testmulti32.exe'
|
---|
| 27 | $GoExecutable = Join-Path -Path $(Resolve-Path $PSScriptRoot) -ChildPath 'src\go-pge\go-pge32.exe'
|
---|
| 28 | } else {
|
---|
| 29 | $CExecutable = Join-Path -Path $(Resolve-Path $PSScriptRoot) -ChildPath 'src\go-pge\testmulti.exe'
|
---|
| 30 | $GoExecutable = Join-Path -Path $(Resolve-Path $PSScriptRoot) -ChildPath 'src\go-pge\go-pge.exe'
|
---|
| 31 | }
|
---|
[16533] | 32 |
|
---|
[16620] | 33 | $BenchData = Join-Path -Path $(Resolve-Path $PSScriptRoot) -ChildPath 'src\go-pge\data\benchmark'
|
---|
[16617] | 34 | $TestDataFile = Join-Path -Path $BenchData -ChildPath "$($BenchName).trn"
|
---|
| 35 | $TrainDataFile = Join-Path -Path $BenchData -ChildPath "$($BenchName).tst"
|
---|
| 36 |
|
---|
[16620] | 37 | $ConfigData = Join-Path -Path $(Resolve-Path $PSScriptRoot) -ChildPath 'src\go-pge\config\prob\bench'
|
---|
[16617] | 38 | $ConfigDataFile = Join-Path -Path $ConfigData -ChildPath "$($BenchName).cfg"
|
---|
| 39 |
|
---|
| 40 | if(-not $(Test-Path -Path $TestDataFile -PathType Leaf) -or -not $(Test-Path -Path $TrainDataFile -PathType Leaf)) {
|
---|
| 41 | Write-Error "Train/test file does't exist for benchmark: $TestDataFile"
|
---|
| 42 | exit 4
|
---|
| 43 | }
|
---|
| 44 | if(-not $(Test-Path -Path $ConfigDataFile -PathType Leaf)) {
|
---|
| 45 | Write-Error "Configfile doesn't exist for benchmark: $ConfigDataFile"
|
---|
| 46 | exit 4
|
---|
| 47 | }
|
---|
| 48 |
|
---|
| 49 | if($NoClear.IsPresent) {
|
---|
| 50 | $Clear = $false
|
---|
| 51 | } else {
|
---|
| 52 | $Clear = $GenerateNew
|
---|
| 53 | }
|
---|
| 54 |
|
---|
[16618] | 55 | $env:GOGC="off"
|
---|
| 56 | $env:GODEBUG="cgocheck=0"
|
---|
| 57 | $env:CGO_ENABLED=1
|
---|
[16617] | 58 |
|
---|
[16618] | 59 | if(-not $(Test-Path $LogFolder -Type Container)) {
|
---|
| 60 | New-Item -Path $LogFolder -ItemType Directory -Force
|
---|
| 61 | }
|
---|
| 62 |
|
---|
| 63 | if($GenerateNew -or -not $(Test-Path -Path $CLog)) {
|
---|
[16614] | 64 | if(Test-Path $CLog -Type Leaf) {
|
---|
| 65 | Remove-Item -Path $CLog
|
---|
| 66 | }
|
---|
[16618] | 67 | if(Test-Path $CLogError -Type Leaf) {
|
---|
| 68 | Remove-Item -Path $CLogError
|
---|
| 69 | }
|
---|
[16620] | 70 | $CGenProc = Start-Process -FilePath $CExecutable -ArgumentList "$BenchName -evals=$($EvalCnt) -peel=$($PeelCnt) -iter=$($WaitToStep) -init=$($InitMethod) -grow=$($GrowMethod)" -RedirectStandardOutput $CLog -RedirectStandardError $CLogError -WorkingDirectory $(Split-Path -Path $GoExecutable -Parent) -PassThru
|
---|
[16533] | 71 | $StepReached = $false
|
---|
[16617] | 72 | $LastLogLength = 0
|
---|
| 73 | $Timeout = $MaxSecondsTimeout
|
---|
[16533] | 74 | while(-not $StepReached) {
|
---|
| 75 | $CGenCont = Get-Content $CLog
|
---|
| 76 | if($CGenCont | Select-String -Pattern "\*+ StepW: $WaitToStep \*+") {
|
---|
| 77 | $StepReached = $true
|
---|
| 78 | }
|
---|
[16618] | 79 | if(-not $StepReached -and $LastLogLength -eq $CGenCont.Length) {
|
---|
[16617] | 80 | $Timeout--
|
---|
| 81 | } else {
|
---|
| 82 | $Timeout = $MaxSecondsTimeout
|
---|
| 83 | }
|
---|
| 84 | if($Timeout -le 0) {
|
---|
| 85 | $CGenProc | Stop-Process -ErrorAction SilentlyContinue -Force
|
---|
| 86 | Write-Error "C-data generation timed out!"
|
---|
| 87 | exit 2
|
---|
| 88 | }
|
---|
[16618] | 89 | $LastLogLength = $CGenCont.Length
|
---|
[16533] | 90 | Start-Sleep -Seconds 1
|
---|
| 91 | }
|
---|
| 92 | $CGenProc | Stop-Process -ErrorAction SilentlyContinue
|
---|
[16618] | 93 | }
|
---|
| 94 |
|
---|
| 95 | if($GenerateNew -or -not $(Test-Path -Path $GoLog)) {
|
---|
| 96 | if(Test-Path $GoLogError -Type Leaf) {
|
---|
| 97 | Remove-Item -Path $GoLogError
|
---|
| 98 | }
|
---|
| 99 | if(Test-Path $GoLog -Type Leaf) {
|
---|
| 100 | Remove-Item -Path $GoLog
|
---|
| 101 | }
|
---|
[16614] | 102 | $GoGenProc = Start-Process -FilePath $GoExecutable -ArgumentList "-pcfg=prob/bench/$($BenchName).cfg -evals=$($EvalCnt) -peel=$($PeelCnt) -iter=$($WaitToStep) -init=$($InitMethod) -grow=$($GrowMethod)" -RedirectStandardOutput $GoLog -RedirectStandardError $GoLogError -WorkingDirectory $(Split-Path -Path $GoExecutable -Parent) -PassThru
|
---|
[16533] | 103 | $StepReached = $false
|
---|
[16617] | 104 | $Timeout = $MaxSecondsTimeout
|
---|
| 105 | $LastLogLength = 0
|
---|
[16533] | 106 | while(-not $StepReached) {
|
---|
| 107 | $GoGenCont = Get-Content $GoLog
|
---|
| 108 | if($GoGenCont | Select-String -Pattern "PS\.step\(\)\s+$($WaitToStep)") {
|
---|
| 109 | $StepReached = $true
|
---|
| 110 | }
|
---|
[16617] | 111 | if($LastLogLength -eq $CGenCont.Length) {
|
---|
| 112 | $Timeout--
|
---|
| 113 | } else {
|
---|
| 114 | $Timeout = $MaxSecondsTimeout
|
---|
| 115 | }
|
---|
[16618] | 116 | if(-not $StepReached -and $Timeout -le 0) {
|
---|
[16617] | 117 | $GoGenProc | Stop-Process -ErrorAction SilentlyContinue -Force
|
---|
| 118 | Write-Error "Go-data generation timed out!"
|
---|
| 119 | exit 3
|
---|
| 120 | }
|
---|
[16618] | 121 | $LastLogLength = $CGenCont.Length
|
---|
[16533] | 122 | Start-Sleep -Seconds 1
|
---|
| 123 | }
|
---|
| 124 | $GoGenProc | Stop-Process -ErrorAction SilentlyContinue
|
---|
| 125 | }
|
---|
| 126 |
|
---|
| 127 | # Read Result
|
---|
| 128 |
|
---|
| 129 | function Get-CSteps {
|
---|
| 130 | param([Object[]] $Content)
|
---|
| 131 | $ValueList = @{}
|
---|
| 132 | $CurrentStep = 0
|
---|
| 133 | foreach($Line in $Content) {
|
---|
| 134 | if($Line -match "\*+ StepW: (\d+) \*+") {
|
---|
| 135 | [int]$CurrentStep = $Matches[1]
|
---|
| 136 | $ValueList[$CurrentStep] = $(New-Object -TypeName System.Collections.ArrayList)
|
---|
[16614] | 137 | } elseif($Line -match "push\/pop \(\d+\,\d+\) (.+)") {
|
---|
| 138 | $ValueList[$CurrentStep].Add($Matches[1].Trim().Replace('(', '').Replace(')', '').Replace(' ', '')) | Out-Null
|
---|
[16533] | 139 | }
|
---|
| 140 | }
|
---|
| 141 | return $ValueList
|
---|
| 142 | }
|
---|
| 143 |
|
---|
| 144 | function Get-GoSteps {
|
---|
| 145 | param([Object[]] $Content)
|
---|
| 146 | $ValueList = @{}
|
---|
| 147 | $CurrentStep = 0
|
---|
| 148 | foreach($Line in $Content) {
|
---|
| 149 | if($Line -match "PS\.step\(\)\s+(\d+)") {
|
---|
| 150 | [int]$CurrentStep = $Matches[1]
|
---|
| 151 | $ValueList[$CurrentStep] = $(New-Object -TypeName System.Collections.ArrayList)
|
---|
| 152 | } elseif($Line -match "pop\/push\(\d+\,\d+\)\: (.+)") {
|
---|
[16614] | 153 | $ValueList[$CurrentStep].Add($Matches[1].Trim().Replace('(', '').Replace(')', '').Replace(' ', '')) | Out-Null
|
---|
[16533] | 154 | }
|
---|
| 155 | }
|
---|
| 156 | return $ValueList
|
---|
| 157 | }
|
---|
| 158 |
|
---|
| 159 | function Compare-Results {
|
---|
| 160 | param(
|
---|
| 161 | [string]$First,
|
---|
| 162 | [string]$Second
|
---|
| 163 | )
|
---|
[16614] | 164 | $FirstChars = $First.Trim().ToUpper().ToCharArray() | Sort-Object
|
---|
| 165 | $SecondChars = $Second.Trim().ToUpper().ToCharArray() | Sort-Object
|
---|
[16533] | 166 |
|
---|
| 167 | [System.Collections.ArrayList]$LeftChars = $SecondChars.Clone()
|
---|
| 168 | $FirstCharNr = 0
|
---|
| 169 | foreach($FirstChar in $FirstChars) {
|
---|
| 170 | $SecondChar = $SecondChars[$FirstCharNr]
|
---|
| 171 | if($FirstChar -eq $SecondChar) {
|
---|
| 172 | $LeftChars.Remove($FirstChar)
|
---|
| 173 | } else {
|
---|
| 174 | return $false
|
---|
| 175 | }
|
---|
| 176 | $FirstCharNr++
|
---|
| 177 | }
|
---|
| 178 | return [bool]($LeftChars.Count -eq 0)
|
---|
| 179 | }
|
---|
| 180 |
|
---|
| 181 | $CContent = Get-Content -Path $CLog
|
---|
| 182 | $GoContent = Get-Content -Path $GoLog
|
---|
| 183 |
|
---|
| 184 | $ParseC = Get-CSteps -Content $CContent
|
---|
| 185 | $ParseGo = Get-GoSteps -Content $GoContent
|
---|
| 186 |
|
---|
[16617] | 187 | for($StepNr = 1; $StepNr -le $WaitToStep; $StepNr++) {
|
---|
[16533] | 188 | $GoResult = $ParseGo[$StepNr]
|
---|
[16614] | 189 | [System.Collections.ArrayList]$CResult = $ParseC[$StepNr]
|
---|
[16617] | 190 | if($null -eq $GoResult -or $null -eq $CResult) {
|
---|
| 191 | $StepResult = $false
|
---|
| 192 | } else {
|
---|
| 193 | $StepResult = $CResult.Count -eq $GoResult.Count
|
---|
[16533] | 194 | }
|
---|
[16617] | 195 | if($StepResult) {
|
---|
| 196 | foreach($GoRes in $GoResult) { # Step Results
|
---|
| 197 | $State = $false
|
---|
| 198 | foreach($CRes in $CResult.Clone()) { # Compare every Result with every Step Result
|
---|
| 199 | Write-Debug "$($GoRes) with $($CRes)"
|
---|
| 200 | if(Compare-Results -First $GoRes -Second $CRes) {
|
---|
| 201 | $State = $true
|
---|
| 202 | $CResult.Remove($CRes)
|
---|
| 203 | break
|
---|
| 204 | }
|
---|
[16533] | 205 | }
|
---|
[16617] | 206 | if(-not $State) {
|
---|
| 207 | $StepResult = $false
|
---|
| 208 | }
|
---|
[16533] | 209 | }
|
---|
| 210 | }
|
---|
| 211 |
|
---|
| 212 | if($StepResult) {
|
---|
[16614] | 213 | Write-Output "$StepNr OK"
|
---|
[16533] | 214 | } else {
|
---|
| 215 | Write-Warning "$StepNr failed!"
|
---|
| 216 | }
|
---|
| 217 | }
|
---|
[16614] | 218 |
|
---|
| 219 | if($Clear) {
|
---|
| 220 | if(Test-Path $GoLog -Type Leaf) {
|
---|
| 221 | Remove-Item -Path $GoLog
|
---|
| 222 | }
|
---|
| 223 | if(Test-Path $CLog -Type Leaf) {
|
---|
| 224 | Remove-Item -Path $CLog
|
---|
| 225 | }
|
---|
| 226 | if(Test-Path $GoLogError -Type Leaf) {
|
---|
| 227 | Remove-Item -Path $GoLogError
|
---|
| 228 | }
|
---|
| 229 | if(Test-Path $CLogError -Type Leaf) {
|
---|
| 230 | Remove-Item -Path $CLogError
|
---|
| 231 | }
|
---|
| 232 | }
|
---|