Releases: OldCrow/libstats
v1.1.8
v1.1.7
1.1.7 (2026-05-06)
🐛 Bug Fixes
- audit and correct eight CMake build system issues (2135ccf)
- correct AVX-512 detection on MSVC and GCC/Clang (24c355b), closes #include
- correct GTest detection on Windows; add FetchContent fallback (2ee131c)
- default to AppleClang on macOS; fix Phase 1 correctness bugs (d50b0f1)
- label test_math_comprehensive as timing; fix coverage lcov --ignore-errors (6791b3d)
- suppress unused-variable warning in test_simd_policy Release build (8359ca4)
📚 Documentation
- add session-start architecture and build routing to WARP (bbf78b0)
👷 CI/CD
v1.1.6 — Catalina compatibility fixes and dispatcher policy alignment
Patch release focused on Catalina compatibility and test-policy correctness. No API changes and no breaking behavior intended.
Fixed
• Catalina fallback path in src/exponential.cpp now uses argument-aware wrappers so modern toolchains keep std::ranges::* and older libc++ safely uses iterator-based std::all_of / std::sort.
• run_all_tests now conditionally depends on test_work_stealing_pool only when that target is available (matches / gating).
• run_tests now escapes CTest regex pipes correctly so shell parsing does not break test filtering.
• tests/test_performance_dispatcher.cpp edge-case expectation now follows getParallelThreshold(...) policy instead of hardcoding parallel execution for huge UNIFORM/PDF batches.
Release metadata
• Version bumped to 1.1.6 in project and public header version constants.
• README version badge/release link updated.
• Changelog updated with 1.1.6 notes.
Validation
• Reconfigured and rebuilt in Catalina-targeted build dir.
• run_all_tests: 39/39 passed.
v1.1.5
v1.1.4 — SIMD Guard and Build Wiring Hardening
This patch release hardens SIMD build/runtime wiring to prevent architecture- and toolchain-specific breakage.
• Removed per-file SIMD target pragmas from SIMD translation units and standardized on CMake per-source SIMD flags as the single source of truth.
• Fixed GCC pragma scope symmetry in cpu_detection.cpp so push_options/pop_options are consistently x86/x64-gated.
• Hardened SIMD dependency normalization so AVX-512 -> AVX2 -> AVX source/definition dependencies are enforced consistently, including override flows.
v1.1.3 — Durable SIMD detection and embedded build fixes
v1.1.3 is a patch release focused on build/runtime stability for downstream consumers.
• Guard x86-only SIMD target pragmas in CPU detection so ARM/aarch64 builds no longer fail on invalid no-avx* target attributes.
• Use unaligned SIMD probe stores (storeu) to avoid alignment-related false negatives/crashes in runtime feature checks.
• Enforce AVX/AVX2 consistency so AVX2 paths always resolve required AVX helper symbols.
• Add LIBSTATS_BUILD_EXAMPLES with embedded-safe defaults (OFF for subproject/FetchContent usage), preventing unintended example builds in consumer workflows.
No API changes; this is a stability-focused patch release.
v1.1.2: Fix Windows dynamic test runtime paths
Patch release focused on Windows test/runtime reliability.
• Dynamic test targets now copy stats.dll next to each test executable after build, fixing loader errors (0xc0000135) when PATH is not preconfigured.
• Test executable outputs are now separated by configuration (tests/Debug, tests/Release, etc.), preventing stale Debug/Release collisions in Visual Studio multi-config builds.
• CTest registration now uses $<TARGET_FILE:...> so tests resolve to the correct per-configuration binary.
libstats v1.1.1: Fix Windows include shim for FetchContent/subdirectory builds
Patch release focused on Windows build reliability when libstats is consumed as a dependency.
• Build-tree include shim generation now copies headers into include_shim/libstats instead of creating a symlink.
• Fixes Windows environments where symlink traversal can fail and produce missing-header errors during FetchContent/subdirectory builds.
• No functional API changes; this is a compatibility/build fix release.
v1.1.0
v1.1.0 replaces the heuristic-based dispatch threshold system with a constexpr lookup table derived from 6,912 empirical measurements across four SIMD architectures (NEON, AVX, AVX2, AVX-512). The previous dispatcher used unrelated constants as placeholder thresholds and applied inverted refinement multipliers that selected parallel execution prematurely — in some cases by four orders of magnitude.
Each threshold now traces directly to a profiling run, and architectures are independent: adding or tuning one does not affect the others.
This release also fixes the MSVC build to propagate detected AVX-512 support to all translation units (previously hardcoded to /arch:AVX2), hardens the Student-T MLE optimizer against Newton-Raphson divergence for large ν, and corrects a std::vector data race in the thread-safety test.
v1.0.0
[1.0.0] - 2026-04-11
- Dispatch metadata (
getDistributionSpecificParallelThreshold) now covers all
9 distributions with explicit cases;distributionTypeToStringlikewise complete - Documentation and example surface aligned with the current 9-distribution library
distribution_families_demo.cppadded; per-distribution benchmark files removed
from the examples build- Explanatory comments added to Gamma, Beta, and Student's t CDF batch
implementations documenting why scalar special functions cannot be vectorized
Validation (all four test machines, 54/54 SIMD tests) (plus automated CI/CD)
| Machine | SIMD | Correctness | simd_verification | Speedup |
|---|---|---|---|---|
| Ivy Bridge (2012 MBP) | AVX | 34/34 ✅ | 54/54 ✅ | 4.10x |
| Kaby Lake (2017 MBP) | AVX2 | 33/33 ✅ | 54/54 ✅ | 3.49x |
| Mac Mini M1 | NEON | 33/33 ✅ | 54/54 ✅ | 2.31x |
| Asus TUF A16 (Windows) | AVX-512/MSVC | 33/33 ✅ | 54/54 ✅ | 1.64x |