Skip to content

Commit 3f165ab

Browse files
committed
tests: copy-paste of test generators from the benchmark project, in preperation for testing with a matrix of patterns
1 parent 3d346eb commit 3f165ab

File tree

3 files changed

+89
-21
lines changed

3 files changed

+89
-21
lines changed

bench/util.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ std::vector<T> shuffled_16_values(usize size, T start, T stride) {
7979
template <typename T>
8080
std::vector<T> all_equal(usize size, T start , T stride) {
8181
std::vector<T> v(size);
82-
for (i32 i = 0; i < size; ++i)
82+
for (usize i = 0; i < size; ++i)
8383
v.push_back(start);
8484
return v;
8585
}

tests/sort_fixtures.h

+7-6
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@ struct SortFixture : public testing::TestWithParam<int> {
2323

2424
public:
2525
virtual void SetUp() {
26-
V = std::vector<T>(GetParam());
27-
generate_unique_values_vec(V, (T)0x1000, (T)0x1);
26+
auto v = unique_values(GetParam(), (T)0x1000, (T)0x1);
2827
}
2928
virtual void TearDown() {
3029
}
@@ -89,8 +88,11 @@ struct SortWithSlackFixture : public testing::TestWithParam<SizeAndSlack<T>> {
8988
virtual void SetUp() {
9089
testing::TestWithParam<SizeAndSlack<T>>::SetUp();
9190
auto p = this->GetParam();
92-
V = std::vector<T>(p.Size + p.Slack);
93-
generate_unique_values_vec(V, p.FirstValue, p.ValueStride, p.Randomize);
91+
//V = std::vector<T>(p.Size + p.Slack);
92+
//generate_unique_values_vec(V, p.FirstValue, p.ValueStride, p.Randomize);
93+
auto v = unique_values(p.Size + p.Slack, p.FirstValue, p.ValueStride);
94+
95+
9496
}
9597
virtual void TearDown() {
9698
#ifdef VXSORT_STATS
@@ -138,8 +140,7 @@ struct SortWithStrideFixture : public testing::TestWithParam<SizeAndStride<T>> {
138140
virtual void SetUp() {
139141
testing::TestWithParam<SizeAndStride<T>>::SetUp();
140142
auto p = this->GetParam();
141-
V = std::vector<T>(p.Size);
142-
generate_unique_values_vec(V, p.FirstValue, p.ValueStride, p.Randomize);
143+
auto v = unique_values(p.Size, p.FirstValue, p.ValueStride);
143144
MinValue = p.FirstValue;
144145
MaxValue = MinValue + p.Size * p.ValueStride;
145146
if (MinValue > MaxValue)

tests/util.h

+81-14
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,12 @@
66
#include <numeric>
77
#include <random>
88

9-
template <typename T>
10-
void generate_unique_values_vec(std::vector<T>& vec, T start, T stride= 0x1, bool randomize = true) {
11-
for (size_t i = 0; i < vec.size(); i++) {
12-
vec[i] = start;
13-
start += stride;
14-
}
9+
#include <defs.h>
1510

16-
if (!randomize)
17-
return;
11+
namespace vxsort_tests {
12+
using namespace vxsort::types;
1813

19-
std::random_device rd;
20-
// std::mt19937 g(rd());
21-
std::mt19937 g(666);
22-
23-
std::shuffle(vec.begin(), vec.end(), g);
24-
}
14+
const std::random_device::result_type global_bench_random_seed = 666;
2515

2616
template <typename IntType>
2717
std::vector<IntType> range(IntType start, IntType stop, IntType step) {
@@ -55,4 +45,81 @@ std::vector<IntType> multiply_range(IntType start, IntType stop, IntType step) {
5545
return result;
5646
}
5747

48+
template <typename T>
49+
std::vector<T> unique_values(usize size, T start, T stride) {
50+
std::vector<T> v(size);
51+
for (usize i = 0; i < v.size(); i++, start += stride)
52+
v[i] = start;
53+
54+
std::mt19937_64 rng(global_bench_random_seed);
55+
std::shuffle(v.begin(), v.end(), rng);
56+
return v;
57+
}
58+
59+
template <typename T>
60+
std::vector<T> shuffled_16_values(usize size, T start, T stride) {
61+
std::vector<T> v(size);
62+
for (usize i = 0; i < size; ++i)
63+
v.push_back(start + stride * (i % 16));
64+
std::mt19937_64 rng(global_bench_random_seed);
65+
std::shuffle(v.begin(), v.end(), rng);
66+
return v;
67+
}
68+
69+
template <typename T>
70+
std::vector<T> all_equal(usize size, T start , T stride) {
71+
std::vector<T> v(size);
72+
for (i32 i = 0; i < size; ++i)
73+
v.push_back(start);
74+
return v;
75+
}
76+
77+
template <typename T>
78+
std::vector<T> ascending_int(usize size, T start, T stride) {
79+
std::vector<T> v(size);
80+
for (usize i = 0; i < size; ++i)
81+
v.push_back(start + stride * i);
82+
return v;
83+
}
84+
85+
template <typename T>
86+
std::vector<T> descending_int(usize size, T start, T stride) {
87+
std::vector<T> v(size);
88+
for (isize i = size - 1; i >= 0; --i)
89+
v.push_back(start + stride * i);
90+
return v;
91+
}
92+
93+
template <typename T>
94+
std::vector<T> pipe_organ(usize size, T start, T stride) {
95+
std::vector<T> v(size);
96+
for (usize i = 0; i < size/2; ++i)
97+
v.push_back(start + stride * i);
98+
for (usize i = size/2; i < size; ++i)
99+
v.push_back(start + (size - i) * stride);
100+
return v;
101+
}
102+
103+
template <typename T>
104+
std::vector<T> push_front(usize size, T start, T stride) {
105+
std::vector<T> v(size);
106+
for (usize i = 1; i < size; ++i)
107+
v.push_back(start + stride * i);
108+
v.push_back(start);
109+
return v;
110+
}
111+
112+
template <typename T>
113+
std::vector<T> push_middle(usize size, T start, T stride) {
114+
std::vector<T> v(size);
115+
for (usize i = 0; i < size; ++i) {
116+
if (i != size/2)
117+
v.push_back(start + stride * i);
118+
}
119+
v.push_back(start + stride * (size/2));
120+
return v;
121+
}
122+
123+
}
124+
58125
#endif

0 commit comments

Comments
 (0)