mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-11-04 14:09:33 +01:00 
			
		
		
		
	Rewrite multithreading test to not use jthreads
This commit is contained in:
		@@ -481,7 +481,7 @@ set_tests_properties(
 | 
			
		||||
 | 
			
		||||
add_executable(Multithreading ${TESTS_DIR}/X37-Multithreading.cpp)
 | 
			
		||||
target_link_libraries(Multithreading PRIVATE Catch2::Catch2WithMain)
 | 
			
		||||
target_compile_features(Multithreading PRIVATE cxx_std_20)
 | 
			
		||||
target_compile_features(Multithreading PRIVATE cxx_std_11)
 | 
			
		||||
add_test(
 | 
			
		||||
  NAME Reporters::Multithreading
 | 
			
		||||
  COMMAND ${CMAKE_COMMAND} -E env $<TARGET_FILE:Multithreading>
 | 
			
		||||
 
 | 
			
		||||
@@ -11,25 +11,27 @@
 | 
			
		||||
#include <catch2/benchmark/catch_benchmark.hpp>
 | 
			
		||||
 | 
			
		||||
#include <thread>
 | 
			
		||||
#include <stop_token>
 | 
			
		||||
#include <atomic>
 | 
			
		||||
 | 
			
		||||
TEST_CASE( "ThreadAssertionTest",
 | 
			
		||||
           "[Multithreading]" ) {
 | 
			
		||||
    std::atomic_bool should_stop = false;
 | 
			
		||||
    SECTION( "Basic" ) {
 | 
			
		||||
        std::jthread a([] (const std::stop_token& token) {
 | 
			
		||||
            while (!token.stop_requested()) {
 | 
			
		||||
        std::thread a([&should_stop] () {
 | 
			
		||||
            while (!should_stop) {
 | 
			
		||||
                FAIL_CHECK(false);
 | 
			
		||||
                CHECK(true);
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
        std::jthread b([] (const std::stop_token& token) {
 | 
			
		||||
            while (!token.stop_requested()) {
 | 
			
		||||
        std::thread b([&should_stop] () {
 | 
			
		||||
            while (!should_stop) {
 | 
			
		||||
                FAIL_CHECK(false);
 | 
			
		||||
                CHECK(true);
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
        std::this_thread::sleep_for( std::chrono::milliseconds( 1'000 ) );
 | 
			
		||||
        a.get_stop_source().request_stop();
 | 
			
		||||
        b.get_stop_source().request_stop();
 | 
			
		||||
        should_stop = true;
 | 
			
		||||
        a.join();
 | 
			
		||||
        b.join();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user