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

stillwater-sc / universal / 27021302154
85%
master: 84%

Build:
Build:
LAST BUILD BRANCH: main
DEFAULT BRANCH: master
Ran 05 Jun 2026 03:20PM UTC
Jobs 1
Files 674
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

05 Jun 2026 02:37PM UTC coverage: 84.529% (-0.03%) from 84.558%
27021302154

push

github

web-flow
fix(elreal): addRec_step emits the canonical 0-overlap form (#1057) (#1064)

add()'s streaming addRec_step could emit a VALUE-CORRECT but NON-canonical (0-overlap-
violating) expansion. Root cause (instrumented): the gs-empty / fs-empty re-injection
path (FCL.hs `addRec fs [] (e:es) bound = e:...`) emitted the workspace head `e`
unconditionally. But a prior twoSum merge can LOWER e's exponent toward an un-merged
operand block -- e.g. a1@146 + residual -> @142 while the canonical a2@91 is now only
51 < k below it -- and a carry can push the operand one bit higher still. Emitting e
then leaves an adjacent pair closer than k.

Fix: before emitting the workspace head, fold any remaining operand block whose exponent
is >= head.exponent() - k into the workspace via priestAdd (which renormalises). The
">=" accounts for the +1 carry a same-exponent merge can produce. Applied symmetrically
to the gs-empty and fs-empty paths.

This is the root of both #1057's exact-cancellation symptom (asin+acos) AND the #1061
streaming-infSum blocker (repeated add composition). It also subsumes the leading-pair
overlap class (#1044) in the streaming path.

Validation:
- minimal repro: add gives canonical (...,87,...) matching priestRenorm
- 1,000,000 randomized single-adds: 0 0-overlap violations (asserts ON), value exact
- left-fold composition n=3..20: 0 violations, value == eager sum()
- full elreal suite (34 tests) PASS on gcc AND clang; no regressions
- regression test added to el_arith_add_renormalization (minimal repro + 50k fuzz vs the
  exact-dyadic oracle), passes gcc + clang

Resolves #1057

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

10 of 10 new or added lines in 1 file covered. (100.0%)

20 existing lines in 3 files now uncovered.

47611 of 56325 relevant lines covered (84.53%)

6031922.74 hits per line

Coverage Regressions

Lines Coverage ∆ File
10
31.43
-3.57% include/sw/universal/verification/test_suite_randoms.hpp
8
93.95
-0.47% include/sw/universal/number/cfloat/cfloat_impl.hpp
2
89.78
0.0% include/sw/universal/number/posito/posito_impl.hpp
Jobs
ID Job ID Ran Files Coverage
1 27021302154.1 05 Jun 2026 03:20PM UTC 674
84.53
GitHub Action Run
Source Files on build 27021302154
  • Tree
  • List 674
  • Changed 4
  • Source Changed 1
  • Coverage Changed 4
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #27021302154
  • 9374c4a2 on github
  • Prev Build on main (#26991696085)
  • Next Build on main (#27026597449)
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