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

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

Build:
Build:
LAST BUILD BRANCH: main
DEFAULT BRANCH: master
Ran 17 May 2026 11:55PM UTC
Jobs 1
Files 652
Run time 1min
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

17 May 2026 11:27PM UTC coverage: 84.166% (+0.01%) from 84.155%
26005819991

push

github

web-flow
fix(einteger): operator>>= leaves spurious limb past the shift boundary (#864)

operator>>=(int shift) had two latent bugs in the block-shift branch:

1. The inline zeroing inside the copy loop (`_block[i+blockShift] = 0`)
   only covered positions [blockShift, MSU].  When blockShift was bigger
   than (MSU+1)/2 -- i.e., the shift covered more than half the limb
   vector -- positions (MSU-blockShift, blockShift) were never touched
   and the original limb value leaked into the result.  Manifested
   visibly with uint8_t blocks, where any value above ~half a uint64_t
   needed enough limbs to trigger the gap.  Split the loop into a copy
   pass and an explicit zero pass that covers all the high positions
   uniformly.

2. The early-exit `if (shift > nbits())` missed the boundary case
   `shift == nbits()`.  At that boundary every significant bit shifts
   out, so the result must be zero, but the path fell through to the
   block-shift branch where `MSU < blockShift` skipped the inner copy
   loop and left the limbs untouched.  Tightened to `>=`.

New regression test `elastic/einteger/api/shift.cpp`:
- 15-byte payload (from issue #842's reproducer) shifted right by 64,
  24, and 17 across uint8_t / uint16_t / uint32_t block widths.
- shift == nbits and shift > nbits boundaries.
- The unaligned >> 17 case cross-checks against an independent
  integer<2048> reference computed via *= 256 + += digit, so the
  expected value isn't sampled from the implementation under test.

Resolves #862

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

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

10 existing lines in 2 files now uncovered.

46750 of 55545 relevant lines covered (84.17%)

6418665.88 hits per line

Coverage Regressions

Lines Coverage ∆ File
8
93.63
-0.47% include/sw/universal/number/cfloat/cfloat_impl.hpp
2
89.78
0.55% include/sw/universal/number/posito/posito_impl.hpp
Jobs
ID Job ID Ran Files Coverage
1 26005819991.1 17 May 2026 11:55PM UTC 652
84.17
GitHub Action Run
Source Files on build 26005819991
  • Tree
  • List 652
  • Changed 4
  • Source Changed 1
  • Coverage Changed 4
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #26005819991
  • 842e3816 on github
  • Prev Build on main (#26004245518)
  • Next Build on main (#26010460064)
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