@@ -17,7 +17,7 @@ using namespace vxsort::types;
17
17
using ::vxsort::vector_machine;
18
18
19
19
template <typename T, i32 Unroll, vector_machine M>
20
- void vxsort_pattern_test (SortPattern , usize size, T first_value, T stride) {
20
+ void vxsort_pattern_test (sort_pattern , usize size, T first_value, T stride) {
21
21
VXSORT_TEST_ISA ();
22
22
23
23
auto V = unique_values<T>(size, first_value, stride);
@@ -57,64 +57,55 @@ void vxsort_hinted_test(std::vector<T>& V, T min_value, T max_value) {
57
57
}
58
58
}
59
59
60
- static inline std::vector<SortPattern> test_patterns () {
60
+ static inline std::vector<sort_pattern> fullsort_test_patterns () {
61
61
return {
62
- SortPattern ::unique_values,
63
- SortPattern ::shuffled_16_values,
64
- SortPattern ::all_equal,
62
+ sort_pattern ::unique_values,
63
+ // sort_pattern ::shuffled_16_values,
64
+ // sort_pattern ::all_equal,
65
65
};
66
66
}
67
67
68
68
template <typename T>
69
- struct SortTestParams2 {
69
+ struct fullsort_test_params {
70
70
public:
71
- SortTestParams2 (SortPattern pattern, usize size, i32 slack, T first_value, T value_stride)
72
- : Pattern (pattern), Size (size), Slack (slack), FirstValue (first_value), ValueStride (value_stride) {}
73
- SortPattern Pattern ;
74
- usize Size ;
75
- i32 Slack ;
76
- T FirstValue ;
77
- T ValueStride ;
71
+ fullsort_test_params (sort_pattern pattern, usize size, i32 slack, T first_value, T value_stride)
72
+ : pattern (pattern), size (size), slack (slack), first_value (first_value), stride (value_stride) {}
73
+ sort_pattern pattern ;
74
+ usize size ;
75
+ i32 slack ;
76
+ T first_value ;
77
+ T stride ;
78
78
};
79
79
80
- class VxSortFixture : public testing ::Test {
81
- public:
82
- using FunctionType = std::function<void ()>;
83
- explicit VxSortFixture (FunctionType fn) : _fn(std::move(fn)) {}
80
+ template <typename T>
81
+ std::vector<fullsort_test_params<T>>
82
+ gen_params (usize start, usize stop, usize step, i32 slack, T first_value, T value_stride)
83
+ {
84
+ auto patterns = fullsort_test_patterns ();
84
85
85
- VxSortFixture (VxSortFixture const &) = delete ;
86
+ using TestParams = fullsort_test_params<T>;
87
+ std::vector<TestParams> tests;
86
88
87
- void TestBody () override {
88
- _fn ();
89
+ for (auto p : fullsort_test_patterns ()) {
90
+ for (auto i : multiply_range<i32>(start, stop, step)) {
91
+ for (auto j : range<i32>(-slack, slack, 1 )) {
92
+ if ((i64)i + j <= 0 )
93
+ continue ;
94
+ tests.push_back (fullsort_test_params<T>(p, i, j, first_value, value_stride));
95
+ }
96
+ }
89
97
}
90
-
91
- private:
92
- FunctionType _fn;
93
- };
94
-
95
- template <class Lambda , class ... Args>
96
- void RegisterSingleTest (const char * test_suite_name, const char * test_name,
97
- const char * type_param, const char * value_param,
98
- const char * file, int line,
99
- Lambda&& fn, Args&&... args) {
100
-
101
- testing::RegisterTest (
102
- test_suite_name, test_name, type_param, value_param,
103
- file, line,
104
- [=]() mutable -> testing::Test* { return new VxSortFixture (
105
- [=]() mutable { fn (args...); });
106
- });
98
+ return tests;
107
99
}
108
100
109
-
110
101
template <vector_machine M, i32 U, typename T>
111
- void register_fullsort_benchmarks (usize start, usize stop, usize step, T first_value, T value_stride) {
102
+ void register_fullsort_tests (usize start, usize stop, usize step, T first_value, T value_stride) {
112
103
if (step == 0 ) {
113
104
throw std::invalid_argument (" step for range must be non-zero" );
114
105
}
115
106
116
107
if constexpr (U >= 2 ) {
117
- register_fullsort_benchmarks <M, U / 2 , T>(start, stop, step, first_value, value_stride);
108
+ register_fullsort_tests <M, U / 2 , T>(start, stop, step, first_value, value_stride);
118
109
}
119
110
120
111
using VM = vxsort::vxsort_machine_traits<T, M>;
@@ -124,31 +115,20 @@ void register_fullsort_benchmarks(usize start, usize stop, usize step, T first_v
124
115
constexpr i32 slack = sizeof (typename VM::TV) / sizeof (T);
125
116
static_assert (slack > 1 );
126
117
127
- std::vector<SortTestParams2<T>> tests;
128
- size_t i = start;
129
- for (auto p : test_patterns ()) {
130
- while ((step > 0 ) ? (i <= stop) : (i > stop)) {
131
- for (auto j : range<int >(-slack, slack, 1 )) {
132
- if ((i64)i + j <= 0 )
133
- continue ;
134
- tests.push_back (SortTestParams2<T>(p, i, j, first_value, value_stride));
135
- }
136
- i *= step;
137
- }
138
- }
118
+ auto tests = gen_params (start, stop, step, slack, first_value, value_stride);
139
119
140
120
for (auto p : tests) {
141
121
auto *test_type = get_canonical_typename<T>();
142
122
143
- auto test_size = p.Size + p.Slack ;
123
+ auto test_size = p.size + p.slack ;
144
124
auto test_name = fmt::format (" vxsort_pattern_test<{}, {}, {}>/{}/{}" , test_type, U,
145
- magic_enum::enum_name (M), magic_enum::enum_name (p.Pattern ), test_size);
125
+ magic_enum::enum_name (M), magic_enum::enum_name (p.pattern ), test_size);
146
126
147
- RegisterSingleTest (
127
+ RegisterSingleLambdaTest (
148
128
" fullsort" , test_name.c_str (), nullptr ,
149
- std::to_string (p. Size ).c_str (),
129
+ std::to_string (test_size ).c_str (),
150
130
__FILE__, __LINE__,
151
- vxsort_pattern_test<T, U, M>, p.Pattern , test_size, p.FirstValue , p.ValueStride );
131
+ vxsort_pattern_test<T, U, M>, p.pattern , test_size, p.first_value , p.stride );
152
132
}
153
133
}
154
134
0 commit comments