Skip to content

Commit 8c71c52

Browse files
HanSur94claude
andcommitted
fix: DataSource abstract method for Octave, resilient test runner
- Replace methods (Abstract) with runtime error (Octave doesn't support Abstract methods block) - Make CI test runner resilient to Octave cleanup crashes: save results to file before potential crash, check results from shell Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 1102c04 commit 8c71c52

2 files changed

Lines changed: 28 additions & 3 deletions

File tree

.github/workflows/tests.yml

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,30 @@ jobs:
7575

7676
- name: Run tests
7777
run: |
78-
xvfb-run octave --eval "cd('tests'); r = run_all_tests(); if r.failed > 0; exit(1); end"
78+
# Octave 8.x has a known crash during handle class cleanup
79+
# (break_closure_cycles: invalid object). Run tests and capture
80+
# the results file before any potential crash.
81+
xvfb-run octave --eval "
82+
cd('tests');
83+
r = run_all_tests();
84+
fid = fopen('/tmp/test-results.txt', 'w');
85+
fprintf(fid, '%d %d\n', r.passed, r.failed);
86+
fclose(fid);
87+
if r.failed > 0; exit(1); end
88+
" || true
89+
# Check results even if Octave crashed during cleanup
90+
if [ -f /tmp/test-results.txt ]; then
91+
read passed failed < /tmp/test-results.txt
92+
echo "Results: $passed passed, $failed failed"
93+
if [ "$failed" -gt 0 ]; then
94+
echo "::error::$failed test(s) failed"
95+
exit 1
96+
fi
97+
echo "All $passed tests passed (Octave may have crashed during cleanup — known bug)"
98+
else
99+
echo "::error::Octave crashed before completing tests"
100+
exit 1
101+
fi
79102
80103
mex-build-macos:
81104
name: MEX Build (macOS)

libs/EventDetection/DataSource.m

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@
88
% .stateY — 1xK state values (empty if none)
99
% .changed — logical, true if new data since last call
1010

11-
methods (Abstract)
12-
result = fetchNew(obj)
11+
methods
12+
function result = fetchNew(obj) %#ok<STOUT>
13+
error('DataSource:abstract', 'fetchNew must be implemented by subclass');
14+
end
1315
end
1416

1517
methods (Static)

0 commit comments

Comments
 (0)