From 07508ba3437afaeeb3c580952a99814a56485138 Mon Sep 17 00:00:00 2001 From: Artur Mukhamadiev Date: Wed, 4 Jun 2025 20:50:26 +0300 Subject: [PATCH] [gtest][tsan] init :Release Notes: Trying to find sanitizer problem :Detailed Notes: - :Testing Performed: - :QA Notes: - :Issues Addressed: - --- .gitignore | 2 ++ CMakeLists.txt | 15 +++++++++++++++ CMakeUserPresets.json | 9 +++++++++ compile_commands.json | 1 + conanfile.txt | 8 ++++++++ main.cc | 34 ++++++++++++++++++++++++++++++++++ 6 files changed, 69 insertions(+) create mode 100644 .gitignore create mode 100644 CMakeLists.txt create mode 100644 CMakeUserPresets.json create mode 120000 compile_commands.json create mode 100644 conanfile.txt create mode 100644 main.cc diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9785597 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +build +.cache diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..03432ec --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,15 @@ +cmake_minimum_required(VERSION 4.0) +project(ltest) +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) + +find_package(GTest REQUIRED) +find_package(readerwriterqueue) + +add_executable(${PROJECT_NAME} main.cc) +target_link_options(${PROJECT_NAME} PRIVATE -fsanitize=thread) +target_compile_options(${PROJECT_NAME} PRIVATE -fsanitize=thread -std=c++20) + +target_link_libraries(${PROJECT_NAME} PRIVATE + readerwriterqueue::readerwriterqueue + gtest::gtest +) diff --git a/CMakeUserPresets.json b/CMakeUserPresets.json new file mode 100644 index 0000000..71aeace --- /dev/null +++ b/CMakeUserPresets.json @@ -0,0 +1,9 @@ +{ + "version": 4, + "vendor": { + "conan": {} + }, + "include": [ + "build/Release/generators/CMakePresets.json" + ] +} \ No newline at end of file diff --git a/compile_commands.json b/compile_commands.json new file mode 120000 index 0000000..195eeaf --- /dev/null +++ b/compile_commands.json @@ -0,0 +1 @@ +build/Release/compile_commands.json \ No newline at end of file diff --git a/conanfile.txt b/conanfile.txt new file mode 100644 index 0000000..ad46a3e --- /dev/null +++ b/conanfile.txt @@ -0,0 +1,8 @@ +[requires] +readerwriterqueue/1.0.6 +gtest/1.16.0 +[generators] +CMakeDeps +CMakeToolchain +[layout] +cmake_layout \ No newline at end of file diff --git a/main.cc b/main.cc new file mode 100644 index 0000000..6dd86b6 --- /dev/null +++ b/main.cc @@ -0,0 +1,34 @@ +#include +#include +#include + +static constexpr size_t repeat = 1 << 20; + +void producer(moodycamel::ReaderWriterQueue& queue) { + for(int i = 0; i < repeat; ++i) { + while(!queue.try_enqueue(i)) { std::this_thread::yield(); } + } +} + +void consumer(moodycamel::ReaderWriterQueue& queue) { + size_t counter = 0; + int val = 0; + while(counter < repeat) { + while(!queue.try_dequeue(val)) { + std::this_thread::yield(); + } + ++counter; + } +} + +TEST(BASIC, rwq) { + moodycamel::ReaderWriterQueue queue; + std::jthread t1{&producer, std::ref(queue)}; + std::jthread t2{&consumer, std::ref(queue)}; +} + +int main(int argc, char** argv) +{ + testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} \ No newline at end of file