From 044bbb656c807d24db05f4be43d52ad353d4ee4e Mon Sep 17 00:00:00 2001 From: Arseniy Obolenskiy Date: Mon, 1 Sep 2025 06:41:29 +0200 Subject: [PATCH 1/2] Address clang-tidy-21 remarks --- .clang-tidy | 1 + modules/performance/include/performance.hpp | 7 ++++--- modules/performance/tests/perf_tests.cpp | 14 +++++++------- modules/task/include/task.hpp | 14 +++++++------- modules/util/include/func_test_util.hpp | 9 +++++---- modules/util/include/perf_test_util.hpp | 11 ++++++----- modules/util/include/util.hpp | 4 ++-- tasks/example_processes/tests/functional/main.cpp | 2 +- tasks/example_threads/tests/functional/main.cpp | 2 +- 9 files changed, 34 insertions(+), 30 deletions(-) diff --git a/.clang-tidy b/.clang-tidy index bc7c9c95c..9460b95e0 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -36,6 +36,7 @@ Checks: > -misc-non-private-member-variables-in-classes, -modernize-avoid-c-arrays, -modernize-use-trailing-return-type, + -portability-avoid-pragma-once, -portability-template-virtual-member-function, -readability-magic-numbers diff --git a/modules/performance/include/performance.hpp b/modules/performance/include/performance.hpp index c2fba94c9..8a378c838 100644 --- a/modules/performance/include/performance.hpp +++ b/modules/performance/include/performance.hpp @@ -30,7 +30,8 @@ struct PerfAttr { struct PerfResults { /// @brief Measured execution time in seconds. double time_sec = 0.0; - enum TypeOfRunning : uint8_t { kPipeline, kTaskRun, kNone } type_of_running = kNone; + enum class TypeOfRunning : uint8_t { kPipeline, kTaskRun, kNone }; + TypeOfRunning type_of_running = TypeOfRunning::kNone; constexpr static double kMaxTime = 10.0; }; @@ -116,10 +117,10 @@ class Perf { }; inline std::string GetStringParamName(PerfResults::TypeOfRunning type_of_running) { - if (type_of_running == PerfResults::kTaskRun) { + if (type_of_running == PerfResults::TypeOfRunning::kTaskRun) { return "task_run"; } - if (type_of_running == PerfResults::kPipeline) { + if (type_of_running == PerfResults::TypeOfRunning::kPipeline) { return "pipeline"; } return "none"; diff --git a/modules/performance/tests/perf_tests.cpp b/modules/performance/tests/perf_tests.cpp index 4d9e47bc2..f851a3c1a 100644 --- a/modules/performance/tests/perf_tests.cpp +++ b/modules/performance/tests/perf_tests.cpp @@ -175,8 +175,8 @@ TEST_P(GetStringParamNameParamTest, ReturnsExpectedString) { } INSTANTIATE_TEST_SUITE_P(ParamTests, GetStringParamNameParamTest, - ::testing::Values(ParamTestCase{PerfResults::kTaskRun, "task_run"}, - ParamTestCase{PerfResults::kPipeline, "pipeline"}, + ::testing::Values(ParamTestCase{PerfResults::TypeOfRunning::kTaskRun, "task_run"}, + ParamTestCase{PerfResults::TypeOfRunning::kPipeline, "pipeline"}, ParamTestCase{PerfResults::TypeOfRunning::kNone, "none"}), [](const ::testing::TestParamInfo& info) { return info.param.expected_output; @@ -360,12 +360,12 @@ TEST(PerfTest, PipelineRunAndTaskRun) { EXPECT_NO_THROW(perf.PipelineRun(attr)); auto res_pipeline = perf.GetPerfResults(); - EXPECT_EQ(res_pipeline.type_of_running, PerfResults::kPipeline); + EXPECT_EQ(res_pipeline.type_of_running, PerfResults::TypeOfRunning::kPipeline); EXPECT_GT(res_pipeline.time_sec, 0.0); EXPECT_NO_THROW(perf.TaskRun(attr)); auto res_taskrun = perf.GetPerfResults(); - EXPECT_EQ(res_taskrun.type_of_running, PerfResults::kTaskRun); + EXPECT_EQ(res_taskrun.type_of_running, PerfResults::TypeOfRunning::kTaskRun); EXPECT_GT(res_taskrun.time_sec, 0.0); } @@ -380,9 +380,9 @@ TEST(PerfTest, PrintPerfStatisticThrowsOnNone) { } TEST(PerfTest, GetStringParamNameTest) { - EXPECT_EQ(GetStringParamName(PerfResults::kTaskRun), "task_run"); - EXPECT_EQ(GetStringParamName(PerfResults::kPipeline), "pipeline"); - EXPECT_EQ(GetStringParamName(PerfResults::kNone), "none"); + EXPECT_EQ(GetStringParamName(PerfResults::TypeOfRunning::kTaskRun), "task_run"); + EXPECT_EQ(GetStringParamName(PerfResults::TypeOfRunning::kPipeline), "pipeline"); + EXPECT_EQ(GetStringParamName(PerfResults::TypeOfRunning::kNone), "none"); } TEST(TaskTest, Destructor_InvalidPipelineOrderTerminates_PartialPipeline) { diff --git a/modules/task/include/task.hpp b/modules/task/include/task.hpp index 9bb718119..b46cb58ad 100644 --- a/modules/task/include/task.hpp +++ b/modules/task/include/task.hpp @@ -20,7 +20,7 @@ namespace ppc::task { /// @brief Represents the type of task (parallelization technology). /// @details Used to select the implementation type in tests and execution logic. -enum TypeOfTask : uint8_t { +enum class TypeOfTask : uint8_t { /// Use all available implementations kALL, /// MPI (Message Passing Interface) @@ -57,7 +57,7 @@ inline std::string TypeOfTaskToString(TypeOfTask type) { } /// @brief Indicates whether a task is enabled or disabled. -enum StatusOfTask : uint8_t { +enum class StatusOfTask : uint8_t { /// Task is enabled and should be executed kEnabled, /// Task is disabled and will be skipped @@ -68,7 +68,7 @@ enum StatusOfTask : uint8_t { /// @param status_of_task Task status (enabled or disabled). /// @return "enabled" if the task is enabled, otherwise "disabled". inline std::string GetStringTaskStatus(StatusOfTask status_of_task) { - if (status_of_task == kDisabled) { + if (status_of_task == StatusOfTask::kDisabled) { return "disabled"; } return "enabled"; @@ -96,7 +96,7 @@ inline std::string GetStringTaskType(TypeOfTask type_of_task, const std::string return type_str + "_" + std::string((*list_settings)["tasks"][type_str]); } -enum StateOfTesting : uint8_t { kFunc, kPerf }; +enum class StateOfTesting : uint8_t { kFunc, kPerf }; template /// @brief Base abstract class representing a generic task with a defined pipeline. @@ -257,9 +257,9 @@ class Task { private: InType input_{}; OutType output_{}; - StateOfTesting state_of_testing_ = kFunc; - TypeOfTask type_of_task_ = kUnknown; - StatusOfTask status_of_task_ = kEnabled; + StateOfTesting state_of_testing_ = StateOfTesting::kFunc; + TypeOfTask type_of_task_ = TypeOfTask::kUnknown; + StatusOfTask status_of_task_ = StatusOfTask::kEnabled; std::chrono::high_resolution_clock::time_point tmp_time_point_; enum class PipelineStage : uint8_t { kNone, diff --git a/modules/util/include/func_test_util.hpp b/modules/util/include/func_test_util.hpp index 6c00316b0..2d7d59907 100644 --- a/modules/util/include/func_test_util.hpp +++ b/modules/util/include/func_test_util.hpp @@ -50,13 +50,14 @@ class BaseRunFuncTests : public ::testing::TestWithParam static std::string PrintFuncTestName(const GTestFuncParam& info) { RequireStaticInterface(); - TestType test_param = std::get(info.param); - return std::get(info.param) + "_" + Derived::PrintTestParam(test_param); + TestType test_param = std::get(ppc::util::GTestParamIndex::kTestParams)>(info.param); + return std::get(GTestParamIndex::kNameTest)>(info.param) + "_" + + Derived::PrintTestParam(test_param); } protected: void ExecuteTest(FuncTestParam test_param) { - const std::string& test_name = std::get(test_param); + const std::string& test_name = std::get(GTestParamIndex::kNameTest)>(test_param); ValidateTestName(test_name); @@ -90,7 +91,7 @@ class BaseRunFuncTests : public ::testing::TestWithParam& test_param) { - task_ = std::get(test_param)(GetTestInputData()); + task_ = std::get(GTestParamIndex::kTaskGetter)>(test_param)(GetTestInputData()); ExecuteTaskPipeline(); } diff --git a/modules/util/include/perf_test_util.hpp b/modules/util/include/perf_test_util.hpp index 16f66cfb1..6f38c12bc 100644 --- a/modules/util/include/perf_test_util.hpp +++ b/modules/util/include/perf_test_util.hpp @@ -35,8 +35,9 @@ class BaseRunPerfTests : public ::testing::TestWithParam>& info) { - return ppc::performance::GetStringParamName(std::get(info.param)) + "_" + - std::get(info.param); + return ppc::performance::GetStringParamName( + std::get(GTestParamIndex::kTestParams)>(info.param)) + + "_" + std::get(GTestParamIndex::kNameTest)>(info.param); } protected: @@ -67,9 +68,9 @@ class BaseRunPerfTests : public ::testing::TestWithParam& perf_test_param) { - auto task_getter = std::get(perf_test_param); - auto test_name = std::get(perf_test_param); - auto mode = std::get(perf_test_param); + auto task_getter = std::get(GTestParamIndex::kTaskGetter)>(perf_test_param); + auto test_name = std::get(GTestParamIndex::kNameTest)>(perf_test_param); + auto mode = std::get(GTestParamIndex::kTestParams)>(perf_test_param); ASSERT_FALSE(test_name.find("unknown") != std::string::npos); if (test_name.find("disabled") != std::string::npos) { diff --git a/modules/util/include/util.hpp b/modules/util/include/util.hpp index f8136a39a..a69d7afbe 100644 --- a/modules/util/include/util.hpp +++ b/modules/util/include/util.hpp @@ -53,7 +53,7 @@ class DestructorFailureFlag { inline static std::atomic failure_flag{false}; }; -enum GTestParamIndex : uint8_t { kTaskGetter, kNameTest, kTestParams }; +enum class GTestParamIndex : uint8_t { kTaskGetter, kNameTest, kTestParams }; std::string GetAbsoluteTaskPath(const std::string& id_path, const std::string& relative_path); int GetNumThreads(); @@ -70,7 +70,7 @@ std::string GetNamespace() { std::free}; name = (status == 0) ? demangled.get() : name; #endif -#if defined(_MSC_VER) +#ifdef _MSC_VER const std::string prefixes[] = {"class ", "struct ", "enum ", "union "}; for (const auto& prefix : prefixes) { if (name.starts_with(prefix)) { diff --git a/tasks/example_processes/tests/functional/main.cpp b/tasks/example_processes/tests/functional/main.cpp index e9e43c5b2..2f89b01fd 100644 --- a/tasks/example_processes/tests/functional/main.cpp +++ b/tasks/example_processes/tests/functional/main.cpp @@ -46,7 +46,7 @@ class NesterovARunFuncTestsProcesses : public ppc::util::BaseRunFuncTests(GetParam()); + TestType params = std::get(ppc::util::GTestParamIndex::kTestParams)>(GetParam()); input_data_ = width - height + std::min(std::accumulate(img.begin(), img.end(), 0), channels); } diff --git a/tasks/example_threads/tests/functional/main.cpp b/tasks/example_threads/tests/functional/main.cpp index e5f7225db..10aee7275 100644 --- a/tasks/example_threads/tests/functional/main.cpp +++ b/tasks/example_threads/tests/functional/main.cpp @@ -49,7 +49,7 @@ class NesterovARunFuncTestsThreads : public ppc::util::BaseRunFuncTests(GetParam()); + TestType params = std::get(ppc::util::GTestParamIndex::kTestParams)>(GetParam()); input_data_ = width - height + std::min(std::accumulate(img.begin(), img.end(), 0), channels); } From 9c147799167e11f0acba6c0a674a14b92389b39c Mon Sep 17 00:00:00 2001 From: Arseniy Obolenskiy Date: Mon, 1 Sep 2025 07:27:06 +0200 Subject: [PATCH 2/2] act --- .github/actions/clang-tidy-native/action.yml | 10 +++++++--- modules/util/include/func_test_util.hpp | 1 + modules/util/include/perf_test_util.hpp | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/.github/actions/clang-tidy-native/action.yml b/.github/actions/clang-tidy-native/action.yml index bdc5be153..5858552e8 100644 --- a/.github/actions/clang-tidy-native/action.yml +++ b/.github/actions/clang-tidy-native/action.yml @@ -77,15 +77,19 @@ runs: while IFS= read -r file; do if [ -n "$file" ] && [ -f "$file" ]; then echo "Analyzing $file..." + FILE_OUTPUT=$(mktemp) if clang-tidy-${{ inputs.clang_tidy_version }} "$file" \ -p ${{ inputs.build_dir }} --format-style=file 2>&1 | \ - tee -a "$COMMENTS_FILE"; then - ISSUES=$(grep -c "warning:\|error:" "$COMMENTS_FILE" || echo "0") - TOTAL_ISSUES=$((TOTAL_ISSUES + ISSUES)) + tee "$FILE_OUTPUT"; then + ISSUES=$(grep -c "warning:\|error:" "$FILE_OUTPUT" 2>/dev/null || echo "0") + ISSUES=$(echo "$ISSUES" | tr -d '[:space:]') + TOTAL_ISSUES=$((TOTAL_ISSUES + ${ISSUES:-0})) + cat "$FILE_OUTPUT" >> "$COMMENTS_FILE" else echo "::error::Failed to analyze $file" TOTAL_ISSUES=$((TOTAL_ISSUES + 1)) fi + rm -f "$FILE_OUTPUT" fi done <<< "${{ steps.changed-files.outputs.changed_files }}" diff --git a/modules/util/include/func_test_util.hpp b/modules/util/include/func_test_util.hpp index 2d7d59907..1aac8d67f 100644 --- a/modules/util/include/func_test_util.hpp +++ b/modules/util/include/func_test_util.hpp @@ -96,6 +96,7 @@ class BaseRunFuncTests : public ::testing::TestWithParamValidation()); EXPECT_TRUE(task_->PreProcessing()); diff --git a/modules/util/include/perf_test_util.hpp b/modules/util/include/perf_test_util.hpp index 6f38c12bc..3c4abec75 100644 --- a/modules/util/include/perf_test_util.hpp +++ b/modules/util/include/perf_test_util.hpp @@ -122,7 +122,7 @@ auto TupleToGTestValuesImpl(const Tuple& tup, std::index_sequence /*unused template auto TupleToGTestValues(Tuple&& tup) { - constexpr size_t kSize = std::tuple_size>::value; + constexpr size_t kSize = std::tuple_size_v>; return TupleToGTestValuesImpl(std::forward(tup), std::make_index_sequence{}); }