test(hex8): await every worker before first paired linear call

This commit is contained in:
KOKO\Mimi
2026-10-14 17:50:11 +09:00
parent 6bc5cd3932
commit a08df0f87e
@@ -3,6 +3,7 @@
#include <gtest/gtest.h> #include <gtest/gtest.h>
#include <array> #include <array>
#include <atomic>
#include <cfenv> #include <cfenv>
#include <cmath> #include <cmath>
#include <cstdint> #include <cstdint>
@@ -10,6 +11,7 @@
#include <future> #include <future>
#include <limits> #include <limits>
#include <random> #include <random>
#include <thread>
#include <utility> #include <utility>
#include <vector> #include <vector>
@@ -146,13 +148,17 @@ TEST(Hex8HighLow, ConcurrentFirstLinearTrialsAcrossCopiesAndMoveKeepBits) {
ASSERT_TRUE(expected_b.HasValue()); ASSERT_TRUE(expected_b.HasValue());
std::promise<void> start; std::promise<void> start;
const auto signal = start.get_future().share(); const auto signal = start.get_future().share();
std::atomic<std::size_t> arrived{0U};
std::array<std::future<fesa::Result<fesa::Hex8HighLowResponse>>, 4> calls; std::array<std::future<fesa::Result<fesa::Hex8HighLowResponse>>, 4> calls;
for (std::size_t i = 0; i < calls.size(); ++i) for (std::size_t i = 0; i < calls.size(); ++i)
calls[i] = std::async(std::launch::async, [&, i] { calls[i] = std::async(std::launch::async, [&, i] {
arrived.fetch_add(1U, std::memory_order_release);
signal.wait(); signal.wait();
return (i % 2U == 0U ? element : moved) return (i % 2U == 0U ? element : moved)
.EvaluateLinearHighLow(high, i < 2U ? low_a : low_b); .EvaluateLinearHighLow(high, i < 2U ? low_a : low_b);
}); });
while (arrived.load(std::memory_order_acquire) != calls.size())
std::this_thread::yield();
start.set_value(); start.set_value();
for (std::size_t i = 0; i < calls.size(); ++i) { for (std::size_t i = 0; i < calls.size(); ++i) {
const auto response = calls[i].get(); const auto response = calls[i].get();