+TEST(Baton, timed_wait_system_clock_multi_poster) {
+ run_timed_wait_regular_test<std::atomic, std::chrono::system_clock, false>();
+ run_timed_wait_regular_test<
+ EmulatedFutexAtomic,
+ std::chrono::system_clock,
+ false>();
+ run_timed_wait_regular_test<
+ DeterministicAtomic,
+ std::chrono::system_clock,
+ false>();
+}
+
+// Timed wait basic steady clock tests
+
+TEST(Baton, timed_wait_basic_steady_clock_single_poster) {
+ run_basic_timed_wait_tests<std::atomic, std::chrono::steady_clock, true>();
+ run_basic_timed_wait_tests<
+ EmulatedFutexAtomic,
+ std::chrono::steady_clock,
+ true>();
+ run_basic_timed_wait_tests<
+ DeterministicAtomic,
+ std::chrono::steady_clock,
+ true>();
+}
+
+TEST(Baton, timed_wait_basic_steady_clock_multi_poster) {
+ run_basic_timed_wait_tests<std::atomic, std::chrono::steady_clock, false>();
+ run_basic_timed_wait_tests<
+ EmulatedFutexAtomic,
+ std::chrono::steady_clock,
+ false>();
+ run_basic_timed_wait_tests<
+ DeterministicAtomic,
+ std::chrono::steady_clock,
+ false>();
+}
+
+// Timed wait timeout steady clock tests
+
+TEST(Baton, timed_wait_timeout_steady_clock_single_poster) {
+ run_timed_wait_tmo_tests<std::atomic, std::chrono::steady_clock, true>();
+ run_timed_wait_tmo_tests<
+ EmulatedFutexAtomic,
+ std::chrono::steady_clock,
+ true>();
+ run_timed_wait_tmo_tests<
+ DeterministicAtomic,
+ std::chrono::steady_clock,
+ true>();
+}
+
+TEST(Baton, timed_wait_timeout_steady_clock_multi_poster) {
+ run_timed_wait_tmo_tests<std::atomic, std::chrono::steady_clock, false>();
+ run_timed_wait_tmo_tests<
+ EmulatedFutexAtomic,
+ std::chrono::steady_clock,
+ false>();
+ run_timed_wait_tmo_tests<
+ DeterministicAtomic,
+ std::chrono::steady_clock,
+ false>();
+}
+
+// Timed wait regular steady clock tests
+
+TEST(Baton, timed_wait_steady_clock_single_poster) {
+ run_timed_wait_regular_test<std::atomic, std::chrono::steady_clock, true>();
+ run_timed_wait_regular_test<
+ EmulatedFutexAtomic,
+ std::chrono::steady_clock,
+ true>();
+ run_timed_wait_regular_test<
+ DeterministicAtomic,
+ std::chrono::steady_clock,
+ true>();
+}
+
+TEST(Baton, timed_wait_steady_clock_multi_poster) {
+ run_timed_wait_regular_test<std::atomic, std::chrono::steady_clock, false>();
+ run_timed_wait_regular_test<
+ EmulatedFutexAtomic,
+ std::chrono::steady_clock,
+ false>();
+ run_timed_wait_regular_test<
+ DeterministicAtomic,
+ std::chrono::steady_clock,
+ false>();
+}
+
+/// Try wait tests
+
+TEST(Baton, try_wait_single_poster_blocking) {
+ run_try_wait_tests<std::atomic, true, true>();
+ run_try_wait_tests<EmulatedFutexAtomic, true, true>();
+ run_try_wait_tests<DeterministicAtomic, true, true>();
+}
+
+TEST(Baton, try_wait_single_poster_nonblocking) {
+ run_try_wait_tests<std::atomic, true, false>();
+ run_try_wait_tests<EmulatedFutexAtomic, true, false>();
+ run_try_wait_tests<DeterministicAtomic, true, false>();
+}
+
+TEST(Baton, try_wait_multi_poster_blocking) {
+ run_try_wait_tests<std::atomic, false, true>();
+ run_try_wait_tests<EmulatedFutexAtomic, false, true>();
+ run_try_wait_tests<DeterministicAtomic, false, true>();
+}
+
+TEST(Baton, try_wait_multi_poster_nonblocking) {
+ run_try_wait_tests<std::atomic, false, false>();
+ run_try_wait_tests<EmulatedFutexAtomic, false, false>();
+ run_try_wait_tests<DeterministicAtomic, false, false>();
+}
+
+/// Multi-producer tests
+
+TEST(Baton, multi_producer_single_poster_blocking) {
+ run_try_wait_tests<std::atomic, true, true>();
+ run_try_wait_tests<EmulatedFutexAtomic, true, true>();
+ run_try_wait_tests<DeterministicAtomic, true, true>();