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

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

Build:
Build:
LAST BUILD BRANCH: main
DEFAULT BRANCH: master
Ran 25 Jun 2026 10:38PM UTC
Jobs 1
Files 683
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

25 Jun 2026 09:57PM UTC coverage: 84.599% (-0.08%) from 84.681%
28203072856

push

github

web-flow
feat(efloat): implement lossless bit-level ieee-754 conversions (#1105)

* feat(efloat): implement lossless bit-level ieee-754 conversions (#1093)

Rewrite convert_to_ieee754() inside efloat_impl.hpp to perform correct,
lossless, bit-level conversions to float and double. It directly packs sign,
exponent, and rounded significand bits into C++20 sw::bit_cast layouts,
handling normal/subnormal ranges, directed rounding, and overflow thresholds.

Replace sw::universal::sign() with std::signbit() inside convert_ieee754()
to ensure that the sign of negative zero (-0.0) is preserved correctly upon
construction rather than being silently hardcoded to positive.

Create lossless.cpp inside elastic/efloat/conversion/ to rigorously verify the
conversions, testing identity double/float preservation, special IEEE values,
smallest subnormals, overflow and underflow boundaries, and directed
rounding behaviors under ties-to-even and infinity rounding.

Resolves #1093
Relates to Epic #1101, PR #1104

* fix(efloat): resolve CodeRabbit review comments on lossless conversions

1. Fix shift-by-64 UB: change subnormal underflow cutoff from sub_shift > K
   to sub_shift >= K in both float and double branches, preventing eff_shift from
   reaching 64 inside bitwise operations.

2. Fix full-underflow rounding: specifically handle eff_shift >= 64 (full underflow)
   rounding-up decisions, allowing directed rounding to correctly produce the
   smallest subnormal (1ULL << 63) instead of forcing +0.0f.

3. Fix halfway-tie test pattern: use limb configuration { 0x80000080, 0 }
   inside lossless.cpp to test true guard-bit ties (guard=1, sticky=0) at the 40th
   bit, successfully exercising RoundToNearest ties-to-even.

4. Include <bit> directly in lossless.cpp to ensure std::bit_cast portability.

Resolves #1093, PR #1105

128 of 203 new or added lines in 1 file covered. (63.05%)

9 existing lines in 2 files now uncovered.

48521 of 57354 relevant lines covered (84.6%)

6772651.06 hits per line

Uncovered Changes

Lines Coverage ∆ File
75
83.44
-6.18% include/sw/universal/number/efloat/efloat_impl.hpp

Coverage Regressions

Lines Coverage ∆ File
8
93.95
-0.47% include/sw/universal/number/cfloat/cfloat_impl.hpp
1
31.07
-0.36% include/sw/universal/verification/test_suite_randoms.hpp
Jobs
ID Job ID Ran Files Coverage
1 28203072856.1 25 Jun 2026 10:38PM UTC 683
84.6
GitHub Action Run
Source Files on build 28203072856
  • Tree
  • List 683
  • Changed 3
  • Source Changed 1
  • Coverage Changed 3
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #28203072856
  • be1d1f83 on github
  • Prev Build on main (#28183136515)
  • Next Build on main (#28213374227)
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