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

stillwater-sc / universal / 34757333587
86%
master: 84%

Build:
Build:
LAST BUILD BRANCH: main
DEFAULT BRANCH: master
Ran 13 Sep 2026 01:10PM UTC
Jobs 1
Files 653
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

13 Sep 2026 12:31PM UTC coverage: 85.679% (+0.03%) from 85.647%
34757333587

push

github

web-flow
fix(headers): qd/qd_cascade cores link; to_hex(dd_cascade) no longer recurses (#1334) (#1464)

* fix(headers): qd and qd_cascade cores define the ldexp that ulp() calls (#1462)

Both impls declare `inline T ldexp(const T&, int);` and call it from ulp(), but
only math/functions/numerics.hpp defines it, and only the mathlib includes that.
So a translation unit that includes core.hpp alone -- the whole point of #1334 --
fails to LINK the moment it calls ulp():

    undefined reference to `sw::universal::ldexp(sw::universal::qd_cascade const&, int)'

-fsyntax-only is clean, which is why the group-4 gates missed it. -Wall is not:
"inline function ... used but never defined", in every translation unit that
includes either core. Of the 28 number/*/core.hpp, compiled standalone under
-Wall -Wpedantic on gcc 13.3 and clang, only these two warn. dd declares ldexp
the same way but its core never calls it.

Each core now includes its own math/functions/numerics.hpp -- copysign, frexp,
ldexp: pure computation, no I/O -- after numeric_limits.hpp, because ldexp
static_asserts on numeric_limits<T>::radix. ereal's core does the same (#1461).

    qd/core.hpp          73,779 lines / 356 headers / 0 I/O-family
    qd_cascade/core.hpp  75,509 lines / 360 headers / 0 I/O-family

Declaring copysign/frexp earlier in the translation unit could in principle
re-bind a non-template call in the text layers -- qd_cascade's to_triple() calls
frexp(v, &e) before the mathlib is included. It does not: qd and qd_cascade
to_triple, to_binary, operator<<, ulp, frexp, copysign, ldexp, sqrt and exp over
400 values render 502,180 bytes byte-identical to main, gcc and clang.

New regression tests, qd/api/core_only.cpp and qd_cascade/api/core_only.cpp,
include core.hpp and no other header of their type and build a real
executable, so the link is the check. Both fail on main (at compile time:
without the numerics header, copysign(qd, qd) falls through to
std::copysign(double, double)) and pas... (continued)

43243 of 50471 relevant lines covered (85.68%)

7167918.9 hits per line

Coverage Regressions

Lines Coverage ∆ File
1
31.07
-0.36% include/sw/universal/verification/test_suite_randoms.hpp
Jobs
ID Job ID Ran Files Coverage
1 34757333587.1 13 Sep 2026 01:10PM UTC 653
85.68
GitHub Action Run
Source Files on build 34757333587
  • Tree
  • List 653
  • Changed 8
  • Source Changed 1
  • Coverage Changed 8
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #34757333587
  • 8f7c9223 on github
  • Prev Build on main (#34734747263)
  • Next Build on main (#34759494934)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc