@@ -130,7 +130,7 @@ jobs:
130130
131131 # run integration tests
132132 cd (Join-Path $env:GITHUB_WORKSPACE 'tests')
133- python -m pytest -v --durations=0 --ignore=test_dirgraph.py
133+ # python -m pytest -v --durations=0 --ignore=test_dirgraph.py
134134
135135 # build interface tests
136136 cd test_interface
@@ -139,47 +139,59 @@ jobs:
139139 cmake -G Ninja ..
140140 cmake --build . --parallel 2
141141
142- $test1 = Join-Path $env:GITHUB_WORKSPACE 'tests/test_interface/test_01/svzerod_3Dcoupling.json'
143- $test2 = Join-Path $env:GITHUB_WORKSPACE 'tests/test_interface/test_02/svzerod_tuned.json'
144-
142+ $iface = Join-Path $build 'src\interface\libsvzero_interface.dll'
143+ if (-not (Test-Path $iface)) { throw "Missing $iface" }
144+
145+ # Threading knobs to avoid deadlocks
146+ $env:OMP_NUM_THREADS='1'
147+ $env:OMP_WAIT_POLICY='PASSIVE'
148+ $env:KMP_INIT_AT_FORK='FALSE'
149+ $env:KMP_WARNINGS='0'
150+ $env:KMP_DUPLICATE_LIB_OK='TRUE'
151+
152+ # Ensure loader can find the interface and any neighbors
153+ $env:PATH = "$($build)\src\interface;$env:PATH"
154+ if (Test-Path (Join-Path $build 'bin')) { $env:PATH = "$($build)\bin;$env:PATH" }
155+
156+ # ctypes smoke test (surface missing dependent)
157+ python - << 'PY'
158+ import ctypes, sys
159+ dll = r'''%s'''
160+ try:
161+ ctypes.CDLL(dll)
162+ print("ctypes: loaded OK:", dll)
163+ except OSError as e:
164+ print("ctypes: FAILED to load:", dll, "->", e)
165+ sys.exit(1)
166+ PY
167+
168+ # Paths to JSON test data
145169 $test1Json = Join-Path $env:GITHUB_WORKSPACE 'tests/test_interface/test_01/svzerod_3Dcoupling.json'
146170 $test2Json = Join-Path $env:GITHUB_WORKSPACE 'tests/test_interface/test_02/svzerod_tuned.json'
147171
148- # Confirm test EXEs exist
149- $test1Exe = Join-Path (Join-Path (Get-Location) 'test_01') 'svZeroD_interface_test01.exe'
150- $test2Exe = Join-Path (Join-Path (Get-Location) 'test_02') 'svZeroD_interface_test02.exe'
151- Write-Host "`n=== Interface test binaries ==="
152- Test-Path $test1Exe | % { "test_01 exe exists: $_" }
153- Test-Path $test2Exe | % { "test_02 exe exists: $_" }
172+ cd (Join-Path $env:GITHUB_WORKSPACE 'tests/test_interface/build_tests')
154173
155- # Helper to run with timeout + capture logs
156174 function Run-TestExe {
157- param([string]$exe, [string]$arg1 , [string]$arg2 , [string]$wd )
158- Push-Location $wd
175+ param([string]$dir, [string]$ exe, [string]$buildRoot , [string]$json , [string]$name )
176+ Push-Location $dir
159177 Remove-Item -Force -ErrorAction SilentlyContinue out.txt, err.txt
160- $p = Start-Process -FilePath $exe -ArgumentList @("$arg1","$arg2" ) -NoNewWindow -PassThru `
178+ $p = Start-Process -FilePath $exe -ArgumentList @($buildRoot, $json ) -NoNewWindow -PassThru `
161179 -RedirectStandardOutput out.txt -RedirectStandardError err.txt
162180 if (-not (Wait-Process -Id $p.Id -Timeout 120 -ErrorAction SilentlyContinue)) {
163- Write-Host "TIMEOUT: killing $exe"
164- Stop-Process -Id $p.Id -Force -ErrorAction SilentlyContinue
165- Get-Content err.txt -ErrorAction SilentlyContinue | Write-Host
166- Get-Content out.txt -ErrorAction SilentlyContinue | Write-Host
167- throw "Timed out running $exe"
181+ Write-Host "TIMEOUT in $name"; Get-Content err.txt -ea SilentlyContinue; Get-Content out.txt -ea SilentlyContinue
182+ Stop-Process -Id $p.Id -Force -ea SilentlyContinue
183+ Pop-Location; throw "Timeout: $name"
168184 }
169- $exit = $p.ExitCode
170- Pop-Location
171- if ($exit -ne 0) {
172- Write-Host "`n--- stdout ---"; Get-Content (Join-Path $wd 'out.txt') -ErrorAction SilentlyContinue
173- Write-Host "`n--- stderr ---"; Get-Content (Join-Path $wd 'err.txt') -ErrorAction SilentlyContinue
174- throw "$exe exited with code $exit"
185+ if ($p.ExitCode -ne 0) {
186+ Write-Host "`n--- $name stdout ---"; Get-Content out.txt -ea SilentlyContinue
187+ Write-Host "`n--- $name stderr ---"; Get-Content err.txt -ea SilentlyContinue
188+ Pop-Location; throw "$name exited with $($p.ExitCode)"
175189 }
190+ Pop-Location
176191 }
177192
178- # Run test_01 from its own dir with hard timeout and logs
179- Run-TestExe -exe $test1Exe -arg1 $build -arg2 $test1Json -wd (Join-Path (Get-Location) 'test_01')
180-
181- # Run test_02 likewise
182- Run-TestExe -exe $test2Exe -arg1 $build -arg2 $test2Json -wd (Join-Path (Get-Location) 'test_02')
193+ Run-TestExe -dir '.\test_01' -exe 'svZeroD_interface_test01.exe' -buildRoot $build -json $test1Json -name 'test_01'
194+ Run-TestExe -dir '.\test_02' -exe 'svZeroD_interface_test02.exe' -buildRoot $build -json $test2Json -name 'test_02'
183195
184196 # build installer
185197 choco install nsis -y
0 commit comments