Read-only mirrors. Development, issues and pull requests are on GitHub.

summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMartin Hořeňovský2023-12-10 21:37:12 +0100
committerMartin Hořeňovský2023-12-10 21:37:12 +0100
commitb7d70ddcd609a798048f055cf8f5b6803ac06e52 (patch)
tree75f8d672977915efe8fa5334dc9bf9529d1874b0
parenta6f22c51699b78116cac54a4ac95bbed710efbd4 (diff)
downloadcatch3-b7d70ddcd609a798048f055cf8f5b6803ac06e52.tar.gz
Ensure we always read 32 bit seed from std::random_device
-rw-r--r--src/catch2/benchmark/detail/catch_stats.cpp3
-rw-r--r--src/catch2/internal/catch_random_seed_generation.cpp9
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");