• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

stillwater-sc / universal / 26265518834
84%
master: 84%

Build:
Build:
LAST BUILD BRANCH: main
DEFAULT BRANCH: master
Ran 22 May 2026 03:15AM UTC
Jobs 1
Files 651
Run time 2min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

22 May 2026 02:48AM UTC coverage: 84.247% (+0.01%) from 84.234%
26265518834

push

github

web-flow
perf(elreal): Phase K.2 -- tagged-union generator (variant) replaces std::function (#916)

* fix(cmake): support FetchContent in dependent repo workflows

* perf(elreal): Phase K.2 -- tagged-union generator (variant) replaces std::function

Phase K.2 of follow-up epic #903. The Phase I baseline identified the
per-op std::function heap allocation (~216-byte capture per binary op)
as a major cost. K.1 (#912) closed the _components vector alloc; this
PR closes the _generator function-object alloc.

Design (#905 K.2 + K.3 combined)
--------------------------------

elreal's _generator field migrates from
`std::function<double(std::size_t)>` to a `std::variant` of small POD
shapes:

  gen_unary_linear      (1 handle + 1 double = 24 bytes)
    coeff * a.at(1) at depth 1; covers all 19 math functions
  gen_binary_linear     (2 handles + 3 doubles = 56 bytes)
    c0 + ca*a.at(1) + cb*b.at(1); covers +, -, *, pow, atan2
  gen_sqrt              (1 handle + 1 double + 1 size_t = 32 bytes)
    sqrt-specific EFT residual
  gen_unary_neg         (1 handle = 16 bytes)
    trampoline through wrapped.at(k)
  gen_rational_residual (3 doubles = 24 bytes)
    elreal(p, q) constructor residual
  std::monostate        (0 bytes)
    default; depth-0-only result

Operand captures are std::shared_ptr<const elreal> (16 bytes each) so
the variant fits comfortably inline. No std::function, no heap
allocation per generator state.

Files
-----

- include/sw/universal/number/elreal/elreal_data.hpp -- NEW. Variant
  alternative types + lazy_generator alias + evaluate_generator
  forward declaration.
- include/sw/universal/number/elreal/elreal_impl.hpp -- _generator
  migrated. All ~25 operator/math function generators rewritten as
  variant emplacements. at() walks via evaluate_generator. The
  evaluator is defined after the class so each alternative can call
  elreal::at() on its operand handle.
- docs/algorithmic-details/elreal-performance-baseline.md -- K.2
  numbers added. K.1 n... (continued)

46950 of 55729 relevant lines covered (84.25%)

5286387.77 hits per line

Coverage Regressions

Lines Coverage ∆ File
3
81.25
0.0% include/sw/universal/number/posit1/specialized/posit_16_1.hpp
2
89.78
0.0% include/sw/universal/number/posito/posito_impl.hpp
1
34.64
-0.36% include/sw/universal/verification/test_suite_randoms.hpp
Jobs
ID Job ID Ran Files Coverage
1 26265518834.1 22 May 2026 03:15AM UTC 651
84.25
GitHub Action Run
Source Files on build 26265518834
  • Tree
  • List 651
  • Changed 4
  • Source Changed 0
  • Coverage Changed 4
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #26265518834
  • e666ed55 on github
  • Prev Build on main (#26259402148)
  • Next Build on main (#26266962442)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc