diff options
| author | Martin Hořeňovský | 2023-12-10 21:37:12 +0100 |
|---|---|---|
| committer | Martin Hořeňovský | 2023-12-10 21:37:12 +0100 |
| commit | b7d70ddcd609a798048f055cf8f5b6803ac06e52 (patch) | |
| tree | 75f8d672977915efe8fa5334dc9bf9529d1874b0 /src/catch2 | |
| parent | a6f22c51699b78116cac54a4ac95bbed710efbd4 (diff) | |
| download | catch3-b7d70ddcd609a798048f055cf8f5b6803ac06e52.tar.gz | |
Ensure we always read 32 bit seed from std::random_device
Diffstat (limited to 'src/catch2')
| -rw-r--r-- | src/catch2/benchmark/detail/catch_stats.cpp | 3 | ||||
| -rw-r--r-- | src/catch2/internal/catch_random_seed_generation.cpp | 9 |
2 files changed, 6 insertions, 6 deletions
diff --git a/src/catch2/benchmark/detail/catch_stats.cpp b/src/catch2/benchmark/detail/catch_stats.cpp index a56edfc0..2dd2d864 100644 --- a/src/catch2/benchmark/detail/catch_stats.cpp +++ b/src/catch2/benchmark/detail/catch_stats.cpp @@ -355,8 +355,6 @@ namespace Catch { unsigned int n_resamples, double* first, double* last) { - auto n = static_cast<int>(last - first); // seriously, one can't use integral types without hell in C++ - auto mean = &Detail::mean; auto stddev = &standard_deviation; @@ -389,6 +387,7 @@ namespace Catch { auto stddev_estimate = Estimate(stddev); #endif // CATCH_USE_ASYNC + auto n = static_cast<int>(last - first); // seriously, one can't use integral types without hell in C++ double outlier_variance = Detail::outlier_variance(mean_estimate, stddev_estimate, n); return { mean_estimate, stddev_estimate, outlier_variance }; diff --git a/src/catch2/internal/catch_random_seed_generation.cpp b/src/catch2/internal/catch_random_seed_generation.cpp index 40c468cb..fdc3fa19 100644 --- a/src/catch2/internal/catch_random_seed_generation.cpp +++ b/src/catch2/internal/catch_random_seed_generation.cpp @@ -9,6 +9,7 @@ #include <catch2/internal/catch_random_seed_generation.hpp> #include <catch2/internal/catch_enforce.hpp> +#include <catch2/internal/catch_random_integer_helpers.hpp> #include <ctime> #include <random> @@ -21,10 +22,10 @@ namespace Catch { return static_cast<std::uint32_t>( std::time( nullptr ) ); case GenerateFrom::Default: - case GenerateFrom::RandomDevice: - // In theory, a platform could have random_device that returns just - // 16 bits. That is still some randomness, so we don't care too much - return static_cast<std::uint32_t>( std::random_device{}() ); + case GenerateFrom::RandomDevice: { + std::random_device rd; + return Detail::fillBitsFrom<std::uint32_t>( rd ); + } default: CATCH_ERROR("Unknown generation method"); |