From 45b1e820a359cb30bf16425a411cd64892922d46 Mon Sep 17 00:00:00 2001 From: Alexander Nesterov Date: Thu, 6 Nov 2025 18:25:27 +0100 Subject: [PATCH] ensure deterministic test shuffle order across MPI ranks --- modules/runners/src/runners.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/modules/runners/src/runners.cpp b/modules/runners/src/runners.cpp index e1385287..df735d8e 100644 --- a/modules/runners/src/runners.cpp +++ b/modules/runners/src/runners.cpp @@ -3,10 +3,13 @@ #include #include +#include +#include #include #include #include #include +#include #include #include @@ -88,6 +91,26 @@ int Init(int argc, char **argv) { ::testing::InitGoogleTest(&argc, argv); + // Ensure consistent GoogleTest shuffle order across all MPI ranks. + unsigned int seed = 0; + int rank_for_seed = -1; + MPI_Comm_rank(MPI_COMM_WORLD, &rank_for_seed); + + if (rank_for_seed == 0) { + try { + seed = std::random_device{}(); + } catch (...) { + seed = 0; + } + if (seed == 0) { + const auto now = static_cast(std::chrono::steady_clock::now().time_since_epoch().count()); + seed = static_cast(((now & 0x7fffffffULL) | 1ULL)); + } + } + + MPI_Bcast(&seed, 1, MPI_UNSIGNED, 0, MPI_COMM_WORLD); + ::testing::GTEST_FLAG(random_seed) = static_cast(seed); + auto &listeners = ::testing::UnitTest::GetInstance()->listeners(); int rank = -1; MPI_Comm_rank(MPI_COMM_WORLD, &rank);