test(fuse): let armed run on any execution context#367
Conversation
fuse::armed/inert only ever drove iterations through run_blocking (the built-in blocking_context), so they could not exercise operations that require a different execution context -- e.g. corosio::timeout, which needs an io_context. That left the test drivers out of step with the executor-generic run_async execution model. Add armed(run_one, fn): the caller supplies a runner that drives each iteration's task on a context it owns and returns any escaped exception as a std::exception_ptr (armed rethrows it from its own synchronous code). Returning rather than rethrowing is required because an exception escaping a run_async completion handler calls std::terminate. fuse stays io-agnostic -- the caller owns the drive loop and the concrete context.
|
An automated preview of the documentation is available at https://367.capy.prtest3.cppalliance.org/index.html If more commits are pushed to the pull request, the docs will rebuild at the same URL. 2026-07-22 18:02:07 UTC |
|
GCOVR code coverage report https://367.capy.prtest3.cppalliance.org/gcovr/index.html Build time: 2026-07-22 18:19:20 UTC |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## develop #367 +/- ##
===========================================
+ Coverage 98.18% 98.36% +0.18%
===========================================
Files 152 152
Lines 8246 8260 +14
===========================================
+ Hits 8096 8125 +29
+ Misses 150 135 -15
Flags with carried forward coverage won't be shown. Click here to find out more.
... and 2 files with indirect coverage changes Continue to review full report in Codecov by Harness.
🚀 New features to boost your workflow:
|
fuse::armed/inert only ever drove iterations through run_blocking (the built-in blocking_context), so they could not exercise operations that require a different execution context -- e.g. corosio::timeout, which needs an io_context. That left the test drivers out of step with the executor-generic run_async execution model.
Add armed(run_one, fn): the caller supplies a runner that drives each iteration's task on a context it owns and returns any escaped exception as a std::exception_ptr (armed rethrows it from its own synchronous code). Returning rather than rethrowing is required because an exception escaping a run_async completion handler calls std::terminate. fuse stays io-agnostic -- the caller owns the drive loop and the concrete context.