Skip to content

Commit 0858869

Browse files
committed
tests: Beautify test output
We can run an individual test for each implementation now. Further, the test names are easier to recognize. Signed-off-by: Johannes Demel <[email protected]>
1 parent ea1604b commit 0858869

File tree

5 files changed

+102
-89
lines changed

5 files changed

+102
-89
lines changed

tests/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ add_executable(
2626
${volk_test_files}
2727
)
2828

29+
target_compile_features(volk_tests PUBLIC cxx_std_20)
30+
2931
target_link_libraries(volk_tests
3032
PRIVATE
3133
GTest::gtest_main

tests/test_volk_32f_x3_sum_of_poly_32f.cc

Lines changed: 26 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ class volk_32f_x3_sum_of_poly_32f_test : public VolkTest
2222
protected:
2323
void SetUp() override
2424
{
25-
initialize_implementation_names(volk_32f_x3_sum_of_poly_32f_get_func_desc());
26-
initialize_data(GetParam());
25+
initialize_test(GetParam());
26+
initialize_data(vector_length);
2727
}
2828

2929
void initialize_data(const size_t length)
@@ -66,6 +66,7 @@ class volk_32f_x3_sum_of_poly_32f_test : public VolkTest
6666
result = volk::vector<float>(1, 0.0);
6767
ua_result.push_back(result.at(0));
6868
ua_result.push_back(result.at(0));
69+
tolerance = std::max(expected * 1e-5, 1e-5);
6970
}
7071

7172
void execute_aligned(const std::string impl_name)
@@ -76,6 +77,7 @@ class volk_32f_x3_sum_of_poly_32f_test : public VolkTest
7677
cutoff.data(),
7778
vector_length,
7879
impl_name.c_str());
80+
EXPECT_NEAR(result.at(0), expected, tolerance);
7981
}
8082

8183
void execute_unaligned(const std::string impl_name)
@@ -86,6 +88,7 @@ class volk_32f_x3_sum_of_poly_32f_test : public VolkTest
8688
ua_cutoff.data() + 1,
8789
vector_length,
8890
impl_name.c_str());
91+
EXPECT_NEAR(ua_result.at(1), expected, tolerance);
8992
}
9093

9194
// void TearDown() override {}
@@ -99,42 +102,30 @@ class volk_32f_x3_sum_of_poly_32f_test : public VolkTest
99102
volk::vector<float> result;
100103
volk::vector<float> ua_result;
101104
float expected = 0.0f;
105+
float tolerance = 1.0e-5;
102106
};
103107

104-
105-
TEST_P(volk_32f_x3_sum_of_poly_32f_test, aligned)
106-
{
107-
for (auto name : implementation_names) {
108-
auto tol = std::max(expected * 1e-5, 1e-5);
109-
fmt::print(
110-
"test aligned implementation: {:>12}, size={} ...", name, vector_length);
111-
auto start = std::chrono::steady_clock::now();
112-
113-
execute_aligned(name);
114-
115-
std::chrono::duration<double> elapsed = std::chrono::steady_clock::now() - start;
116-
fmt::print("\tduration={}\n", elapsed);
117-
EXPECT_NEAR(result.at(0), expected, tol);
118-
}
119-
}
120-
121-
TEST_P(volk_32f_x3_sum_of_poly_32f_test, unaligned)
108+
TEST_P(volk_32f_x3_sum_of_poly_32f_test, run)
122109
{
123-
for (auto name : unaligned_impl_names) {
124-
auto tol = std::max(expected * 1e-5, 1e-5);
125-
fmt::print(
126-
"test unaligned implementation: {:>12}, size={} ...", name, vector_length);
127-
auto start = std::chrono::steady_clock::now();
128-
129-
execute_unaligned(name);
130-
131-
std::chrono::duration<double> elapsed = std::chrono::steady_clock::now() - start;
132-
fmt::print("\tduration={}\n", elapsed);
133-
EXPECT_NEAR(ua_result.at(1), expected, tol);
110+
fmt::print("test {} implementation: {:>12}, size={} ...",
111+
is_aligned_implementation ? "aligned" : "unaligned",
112+
implementation_name,
113+
vector_length);
114+
auto start = std::chrono::steady_clock::now();
115+
116+
if (is_aligned_implementation) {
117+
execute_aligned(implementation_name);
118+
} else {
119+
execute_unaligned(implementation_name);
134120
}
121+
std::chrono::duration<double> elapsed = std::chrono::steady_clock::now() - start;
122+
fmt::print("\tduration={}\n", elapsed);
135123
}
136124

137-
138-
INSTANTIATE_TEST_SUITE_P(volk_32f_x3_sum_of_poly_32f,
139-
volk_32f_x3_sum_of_poly_32f_test,
140-
testing::Values(7, 32, 128, 1023, 65535, 131071));
125+
INSTANTIATE_TEST_SUITE_P(
126+
volk_32f_x3_sum_of_poly_32f,
127+
volk_32f_x3_sum_of_poly_32f_test,
128+
testing::Combine(testing::ValuesIn(get_kernel_implementation_name_list(
129+
volk_32f_x3_sum_of_poly_32f_get_func_desc())),
130+
testing::ValuesIn(default_vector_sizes)),
131+
generate_volk_test_name());

tests/test_volk_32fc_x2_multiply_32fc.cc

Lines changed: 24 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,19 @@
1111
#include <fmt/chrono.h>
1212
#include <fmt/core.h>
1313
#include <fmt/ranges.h>
14+
#include <gtest/gtest-param-test.h>
1415
#include <gtest/gtest.h>
1516
#include <volk/volk.h>
1617
#include <volk/volk_alloc.hh>
1718
#include <chrono>
1819

19-
2020
class volk_32fc_x2_multiply_32fc_test : public VolkTest
2121
{
2222
protected:
2323
void SetUp() override
2424
{
25-
initialize_implementation_names(volk_32fc_x2_multiply_32fc_get_func_desc());
26-
initialize_data(GetParam());
25+
initialize_test(GetParam());
26+
initialize_data(vector_length);
2727
}
2828

2929
void initialize_data(const size_t length)
@@ -61,10 +61,9 @@ class volk_32fc_x2_multiply_32fc_test : public VolkTest
6161
vec1.data() + 1,
6262
vector_length - 1,
6363
impl_name.c_str());
64+
EXPECT_TRUE(AreComplexFloatingPointArraysAlmostEqual(expected, ua_result));
6465
}
6566

66-
// void TearDown() override {}
67-
size_t vector_length;
6867
volk::vector<lv_32fc_t> vec0;
6968
volk::vector<lv_32fc_t> vec1;
7069
volk::vector<lv_32fc_t> result;
@@ -73,46 +72,30 @@ class volk_32fc_x2_multiply_32fc_test : public VolkTest
7372
volk::vector<lv_32fc_t> ua_result;
7473
};
7574

76-
77-
TEST_P(volk_32fc_x2_multiply_32fc_test, aligned)
75+
TEST_P(volk_32fc_x2_multiply_32fc_test, run)
7876
{
79-
for (auto name : implementation_names) {
80-
fmt::print(
81-
"test aligned implementation: {:>12}, size={} ...", name, vector_length);
82-
auto start = std::chrono::steady_clock::now();
83-
84-
execute_aligned(name);
85-
86-
std::chrono::duration<double> elapsed = std::chrono::steady_clock::now() - start;
87-
fmt::print("\tduration={}\n", elapsed);
88-
EXPECT_TRUE(AreComplexFloatingPointArraysAlmostEqual(expected, result));
77+
fmt::print("test {} implementation: {:>12}, size={} ...",
78+
is_aligned_implementation ? "aligned" : "unaligned",
79+
implementation_name,
80+
vector_length);
81+
auto start = std::chrono::steady_clock::now();
82+
83+
if (is_aligned_implementation) {
84+
execute_aligned(implementation_name);
85+
} else {
86+
execute_unaligned(implementation_name);
8987
}
90-
}
91-
92-
TEST_P(volk_32fc_x2_multiply_32fc_test, unaligned)
93-
{
94-
for (auto name : unaligned_impl_names) {
95-
RecordProperty("aligned", false);
96-
RecordProperty("implementation", name);
97-
RecordProperty("size", vector_length);
98-
fmt::print(
99-
"test unaligned implementation: {:>12}, size={} ...", name, vector_length);
100-
auto start = std::chrono::steady_clock::now();
10188

102-
execute_unaligned(name);
10389

104-
std::chrono::duration<double> elapsed = std::chrono::steady_clock::now() - start;
105-
fmt::print("\tduration={}\n", elapsed);
106-
EXPECT_TRUE(AreComplexFloatingPointArraysAlmostEqual(expected, ua_result));
107-
}
90+
std::chrono::duration<double> elapsed = std::chrono::steady_clock::now() - start;
91+
fmt::print("\tduration={}\n", elapsed);
10892
}
10993

11094

111-
INSTANTIATE_TEST_SUITE_P(volk_32fc_x2_multiply_32fc,
112-
volk_32fc_x2_multiply_32fc_test,
113-
testing::Values(7, 32, 128, 1023, 131071),
114-
testing::PrintToStringParamName()
115-
// [](const testing::TestParamInfo<int>& info) {
116-
// return fmt::format("{}", info.param);
117-
// }
118-
);
95+
INSTANTIATE_TEST_SUITE_P(
96+
volk_32fc_x2_multiply_32fc,
97+
volk_32fc_x2_multiply_32fc_test,
98+
testing::Combine(testing::ValuesIn(get_kernel_implementation_name_list(
99+
volk_32fc_x2_multiply_32fc_get_func_desc())),
100+
testing::ValuesIn(default_vector_sizes)),
101+
generate_volk_test_name());

tests/volk_test.cc

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ ::testing::AssertionResult AreComplexFloatingPointArraysAlmostEqual(const T& exp
5555
return ::testing::AssertionSuccess();
5656
}
5757

58-
std::vector<std::string> get_kernel_implementation_name_list(volk_func_desc_t desc)
58+
std::vector<std::string> get_kernel_implementation_name_list(const volk_func_desc_t desc)
5959
{
6060
std::vector<std::string> names;
6161
for (size_t i = 0; i < desc.n_impls; i++) {
@@ -65,17 +65,38 @@ std::vector<std::string> get_kernel_implementation_name_list(volk_func_desc_t de
6565
return names;
6666
}
6767

68+
bool is_aligned_implementation_name(const std::string& name)
69+
{
70+
return name.rfind("a_", 0) == 0;
71+
}
72+
6873
std::tuple<std::vector<std::string>, std::vector<std::string>>
69-
separate_implementations_by_alignment(std::vector<std::string> names)
74+
separate_implementations_by_alignment(const std::vector<std::string>& names)
7075
{
7176
std::vector<std::string> aligned;
7277
std::vector<std::string> unaligned;
7378
for (auto name : names) {
74-
if (name.rfind("a_", 0) == 0) {
79+
if (is_aligned_implementation_name(name)) {
7580
aligned.push_back(name);
7681
} else {
7782
unaligned.push_back(name);
7883
}
7984
}
8085
return { aligned, unaligned };
8186
}
87+
88+
std::vector<std::string>
89+
get_aligned_kernel_implementation_names(const volk_func_desc_t desc)
90+
{
91+
auto impls = get_kernel_implementation_name_list(desc);
92+
auto [aligned, unaligned] = separate_implementations_by_alignment(impls);
93+
return aligned;
94+
}
95+
96+
std::vector<std::string>
97+
get_unaligned_kernel_implementation_names(const volk_func_desc_t desc)
98+
{
99+
auto impls = get_kernel_implementation_name_list(desc);
100+
auto [aligned, unaligned] = separate_implementations_by_alignment(impls);
101+
return unaligned;
102+
}

tests/volk_test.h

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,27 +11,43 @@
1111
#include <fmt/ranges.h>
1212
#include <gtest/gtest.h>
1313
#include <volk/volk.h>
14+
#include <array>
1415
#include <tuple>
1516

17+
static constexpr std::array<size_t, 5> default_vector_sizes{ 7, 32, 128, 1023, 131071 };
1618

17-
std::vector<std::string> get_kernel_implementation_name_list(volk_func_desc_t desc);
19+
std::vector<std::string> get_kernel_implementation_name_list(const volk_func_desc_t desc);
20+
21+
bool is_aligned_implementation_name(const std::string& name);
1822

1923
std::tuple<std::vector<std::string>, std::vector<std::string>>
20-
separate_implementations_by_alignment(std::vector<std::string> names);
24+
separate_implementations_by_alignment(const std::vector<std::string>& names);
25+
26+
std::vector<std::string>
27+
get_aligned_kernel_implementation_names(const volk_func_desc_t desc);
28+
std::vector<std::string>
29+
get_unaligned_kernel_implementation_names(const volk_func_desc_t desc);
30+
31+
struct generate_volk_test_name {
32+
template <class ParamType>
33+
std::string operator()(const ::testing::TestParamInfo<ParamType>& info) const
34+
{
35+
return fmt::format("{}_{}", std::get<0>(info.param), std::get<1>(info.param));
36+
}
37+
};
2138

22-
class VolkTest : public ::testing::TestWithParam<int>
39+
class VolkTest : public ::testing::TestWithParam<std::tuple<std::string, size_t>>
2340
{
2441
protected:
25-
void initialize_implementation_names(volk_func_desc_t desc)
42+
void initialize_test(const std::tuple<std::string, size_t>& param)
2643
{
27-
implementation_names = get_kernel_implementation_name_list(desc);
28-
std::tie(aligned_impl_names, unaligned_impl_names) =
29-
separate_implementations_by_alignment(implementation_names);
44+
std::tie(implementation_name, vector_length) = param;
45+
is_aligned_implementation = is_aligned_implementation_name(implementation_name);
3046
}
3147

32-
std::vector<std::string> implementation_names;
33-
std::vector<std::string> aligned_impl_names;
34-
std::vector<std::string> unaligned_impl_names;
48+
std::string implementation_name;
49+
bool is_aligned_implementation;
50+
size_t vector_length;
3551
};
3652

3753

0 commit comments

Comments
 (0)