Skip to content

Commit a3e706e

Browse files
committed
Refactor test suite instantiation for modularity.
Replaced hardcoded task tuples with dynamic generation using templates for better scalability and reusability. Added utility functions to simplify tuple expansion for test parameterization, improving code maintainability.
1 parent ee536fe commit a3e706e

2 files changed

Lines changed: 35 additions & 12 deletions

File tree

modules/core/util/include/test_util.hpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,4 +97,27 @@ class BaseRunFuncTests : public ::testing::TestWithParam<ppc::util::FuncTestPara
9797
ppc::core::TaskPtr<InType, OutType> task_;
9898
};
9999

100+
template <typename Tuple, std::size_t... Is>
101+
auto ExpandToValuesImpl(const Tuple& t, std::index_sequence<Is...>) {
102+
return ::testing::Values(std::get<Is>(t)...);
103+
}
104+
105+
template <typename Tuple>
106+
auto ExpandToValues(const Tuple& t) {
107+
constexpr std::size_t N = std::tuple_size_v<Tuple>;
108+
return ExpandToValuesImpl(t, std::make_index_sequence<N>{});
109+
}
110+
111+
#define DEFINE_GEN_TASK_TUPLES(InTypeParam, SizesParam) \
112+
template <typename Task, std::size_t... Is> \
113+
auto GenTaskTuplesImpl(std::index_sequence<Is...>) { \
114+
return std::make_tuple(std::make_tuple(ppc::core::TaskGetter<Task, InTypeParam>, ppc::util::GetNamespace<Task>(), \
115+
SizesParam[Is])...); \
116+
} \
117+
\
118+
template <typename Task> \
119+
auto GenTaskTuples() { \
120+
return GenTaskTuplesImpl<Task>(std::make_index_sequence<SizesParam.size()>{}); \
121+
}
122+
100123
} // namespace ppc::util

tasks/example/tests/func_tests/main.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ using TestType = int;
2121

2222
class NesterovARunFuncTests : public ppc::util::BaseRunFuncTests<InType, OutType, TestType> {
2323
InType input_data_;
24+
2425
public:
2526
static std::string CustomFuncTestName(
2627
const ::testing::TestParamInfo<ppc::util::FuncTestParam<InType, OutType, TestType>> &info) {
@@ -43,7 +44,7 @@ class NesterovARunFuncTests : public ppc::util::BaseRunFuncTests<InType, OutType
4344
}
4445
auto img = std::vector<uint8_t>(data, data + (static_cast<ptrdiff_t>(width * height * channels)));
4546
stbi_image_free(data);
46-
if(width != height) {
47+
if (width != height) {
4748
throw std::runtime_error("width != height: ");
4849
}
4950
}
@@ -55,22 +56,21 @@ class NesterovARunFuncTests : public ppc::util::BaseRunFuncTests<InType, OutType
5556
}
5657
}
5758

58-
bool CheckTestOutputData(OutType& output_data) final { return input_data_ == output_data; }
59+
bool CheckTestOutputData(OutType &output_data) final { return input_data_ == output_data; }
5960

6061
InType GetTestInputData() final { return input_data_; }
6162
};
6263

6364
TEST_P(NesterovARunFuncTests, MatmulFromPic) { ExecuteTest(GetParam()); }
6465

65-
#define ADD_FUNC_TASK(TASK) \
66-
std::make_tuple(ppc::core::TaskGetter<TASK, InType>, ppc::util::GetNamespace<TASK>(), 5), \
67-
std::make_tuple(ppc::core::TaskGetter<TASK, InType>, ppc::util::GetNamespace<TASK>(), 10)
66+
constexpr std::array<TestType, 3> test_param = {5, 10, 15};
67+
68+
DEFINE_GEN_TASK_TUPLES(InType, test_param)
69+
70+
auto tests_list = std::tuple_cat(
71+
GenTaskTuples<nesterov_a_test_task_all::TestTaskALL>(), GenTaskTuples<nesterov_a_test_task_mpi::TestTaskMPI>(),
72+
GenTaskTuples<nesterov_a_test_task_omp::TestTaskOMP>(), GenTaskTuples<nesterov_a_test_task_seq::TestTaskSEQ>(),
73+
GenTaskTuples<nesterov_a_test_task_stl::TestTaskSTL>(), GenTaskTuples<nesterov_a_test_task_tbb::TestTaskTBB>());
6874

69-
INSTANTIATE_TEST_SUITE_P_NOLINT(PicMatrixTests, NesterovARunFuncTests,
70-
::testing::Values(ADD_FUNC_TASK(nesterov_a_test_task_all::TestTaskALL),
71-
ADD_FUNC_TASK(nesterov_a_test_task_mpi::TestTaskMPI),
72-
ADD_FUNC_TASK(nesterov_a_test_task_omp::TestTaskOMP),
73-
ADD_FUNC_TASK(nesterov_a_test_task_seq::TestTaskSEQ),
74-
ADD_FUNC_TASK(nesterov_a_test_task_stl::TestTaskSTL),
75-
ADD_FUNC_TASK(nesterov_a_test_task_tbb::TestTaskTBB)),
75+
INSTANTIATE_TEST_SUITE_P_NOLINT(PicMatrixTests, NesterovARunFuncTests, ppc::util::ExpandToValues(tests_list),
7676
NesterovARunFuncTests::CustomFuncTestName);

0 commit comments

Comments
 (0)