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

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

Build:
Build:
LAST BUILD BRANCH: fix/issue-1002-ereal-highprec-constants
DEFAULT BRANCH: master
Ran 11 May 2026 02:48AM UTC
Jobs 1
Files 648
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

11 May 2026 02:21AM UTC coverage: 83.944% (+0.007%) from 83.937%
25646959884

push

github

web-flow
feat(einteger): partial constexpr support (API surface) (#826)

* feat(einteger): partial constexpr support (API surface)

Promote the einteger type's user-facing surface to constexpr where
C++20's transient-allocation rule permits.  einteger carries a
std::vector<BlockType> _block member, so any non-empty digit storage
disqualifies the object from being a constexpr variable.  Mirrors
the partial-constexpr playbook from PR #820 (unum), #821 (valid),
#824 (edecimal), and #825 (efloat).

Promoted (this PR)

  * default constructor: constexpr / noexcept.  einteger's default
    ctor was already empty-vector-initialized (no push_back), so no
    is_constant_evaluated() dispatch is needed -- iszero() recognizes
    the empty state via the size() == 0 branch
  * defaulted copy / move ctor + assignment operators marked constexpr
  * read-only selectors marked constexpr:
      iszero, isone, isodd, iseven, ispos, isneg, sign, scale,
      test, block, limbs, nbits, findMsb
  * modifiers marked constexpr:
      clear, setzero, setsign
    (vector::clear is constexpr in C++20; on the empty constant-
    evaluated state these are trivially constexpr-clean)
  * free comparison operators (type vs type) marked constexpr:
      ==, !=, <, <=, >, >=
    These are pure reads of the digit vector.  operator== rewritten
    to use index-based access instead of iterator pairs (semantically
    identical, slightly easier on constant evaluators)
  * matching friend declaration of operator== updated to constexpr

Drive-by fix in operator<: guard against UINT_MAX underflow

  Original code had `for (unsigned b = ll - 1; b > 0; --b)` which,
  if ll == 0, computed `0 - 1` as UINT_MAX and then iterated forever
  reading out-of-bounds blocks (which return 0).  Pre-existing latent
  bug never triggered because the runtime path always had at least
  one limb after a setbits-driven assignment.  Exposed by the
  constexpr smoke test that compares two empty default-constructed
  einte... (continued)

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

45884 of 54660 relevant lines covered (83.94%)

6481038.2 hits per line

Jobs
ID Job ID Ran Files Coverage
1 25646959884.1 11 May 2026 02:48AM UTC 648
83.94
GitHub Action Run
Source Files on build 25646959884
  • Tree
  • List 648
  • Changed 2
  • Source Changed 1
  • Coverage Changed 2
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #25646959884
  • 14edca83 on github
  • Prev Build on main (#25645160577)
  • Next Build on main (#25665656693)
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