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

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

Build:
Build:
LAST BUILD BRANCH: fix/issue-1002-ereal-highprec-constants
DEFAULT BRANCH: master
Ran 10 May 2026 11:11PM 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

10 May 2026 10:44PM UTC coverage: 83.933% (-0.02%) from 83.949%
25641836814

push

github

web-flow
feat(edecimal): partial constexpr support (API surface) (#824)

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

Promoted (this PR)

  * default constructor: constexpr / noexcept; uses
    std::is_constant_evaluated() to keep parallel invariants -- empty
    vector at constant evaluation (canonical constexpr zero, recognized
    by iszero() via the size() == 0 branch); push_back(0) at runtime to
    preserve the historical "size() == 1, [0] == 0" representation that
    comparison and arithmetic operators rely on
  * defaulted copy / move ctor + assignment operators marked constexpr
    (std::vector copy/move is constexpr in C++20 on empty source)
  * iszero() constexpr (range-for over the digit vector; trivially true
    on the empty constant-evaluated state)
  * sign-only selectors: sign(), isneg(), ispos() constexpr (read only
    the bool member)
  * sign-only modifiers: setsign(), setneg(), setpos() constexpr (write
    only the bool member)

Constexpr-callable surface today (gcc + clang, C++20)

  * Default ctor and selectors at constant evaluation
  * Sign modifier round-trips at constant evaluation
  * Copy and copy-assignment at constant evaluation (when source is the
    empty default-constructed state)

Limited at constant evaluation today (heap-escape boundary)

  * setzero / setdigit / setbits          (call push_back)
  * native-type ctors and operator=       (convert_integer / convert_ieee754)
  * compound arithmetic (+= -= *= /= %=)  (mutate the digit vector)
  * unary -, ++, --                       (allocate temporary edecimals)
  * conversion-out (operator double etc.) (iterate the digit vector)
  * comparison operators (==, <, ...)     (read the digit vector)
... (continued)

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

10 existing lines in 2 files now uncovered.

45870 of 54651 relevant lines covered (83.93%)

6482138.24 hits per line

Coverage Regressions

Lines Coverage ∆ File
8
93.48
-0.48% include/sw/universal/number/cfloat/cfloat_impl.hpp
2
89.8
-0.57% include/sw/universal/number/posito/posito_impl.hpp
Jobs
ID Job ID Ran Files Coverage
1 25641836814.1 10 May 2026 11:11PM UTC 648
83.93
GitHub Action Run
Source Files on build 25641836814
  • Tree
  • List 648
  • Changed 3
  • Source Changed 1
  • Coverage Changed 3
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #25641836814
  • 78e97377 on github
  • Prev Build on main (#25409308132)
  • Next Build on main (#25645160577)
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