Skip to content

Commit dbed567

Browse files
author
Raghuveer Devulapalli
committed
Add more tests for qsort
1 parent 2ea8334 commit dbed567

File tree

1 file changed

+93
-3
lines changed

1 file changed

+93
-3
lines changed

tests/test_qsort.hpp

Lines changed: 93 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ class avx512_sort : public ::testing::Test {
1010
};
1111
TYPED_TEST_SUITE_P(avx512_sort);
1212

13-
TYPED_TEST_P(avx512_sort, test_arrsizes)
13+
TYPED_TEST_P(avx512_sort, test_random)
1414
{
1515
if (cpu_has_avx512bw()) {
1616
if ((sizeof(TypeParam) == 2) && (!cpu_has_avx512_vbmi2())) {
@@ -29,7 +29,7 @@ TYPED_TEST_P(avx512_sort, test_arrsizes)
2929
/* Sort with std::sort for comparison */
3030
std::sort(sortedarr.begin(), sortedarr.end());
3131
avx512_qsort<TypeParam>(arr.data(), arr.size());
32-
ASSERT_EQ(sortedarr, arr);
32+
ASSERT_EQ(sortedarr, arr) << "Array size = " << arrsizes[ii];
3333
arr.clear();
3434
sortedarr.clear();
3535
}
@@ -39,4 +39,94 @@ TYPED_TEST_P(avx512_sort, test_arrsizes)
3939
}
4040
}
4141

42-
REGISTER_TYPED_TEST_SUITE_P(avx512_sort, test_arrsizes);
42+
TYPED_TEST_P(avx512_sort, test_reverse)
43+
{
44+
if (cpu_has_avx512bw()) {
45+
if ((sizeof(TypeParam) == 2) && (!cpu_has_avx512_vbmi2())) {
46+
GTEST_SKIP() << "Skipping this test, it requires avx512_vbmi2";
47+
}
48+
std::vector<int64_t> arrsizes;
49+
for (int64_t ii = 0; ii < 1024; ++ii) {
50+
arrsizes.push_back((TypeParam) (ii + 1));
51+
}
52+
std::vector<TypeParam> arr;
53+
std::vector<TypeParam> sortedarr;
54+
for (size_t ii = 0; ii < arrsizes.size(); ++ii) {
55+
/* reverse array */
56+
for (int jj = 0; jj < arrsizes[ii]; ++jj) {
57+
arr.push_back((TypeParam) (arrsizes[ii] - jj));
58+
}
59+
sortedarr = arr;
60+
/* Sort with std::sort for comparison */
61+
std::sort(sortedarr.begin(), sortedarr.end());
62+
avx512_qsort<TypeParam>(arr.data(), arr.size());
63+
ASSERT_EQ(sortedarr, arr) << "Array size = " << arrsizes[ii];
64+
arr.clear();
65+
sortedarr.clear();
66+
}
67+
}
68+
else {
69+
GTEST_SKIP() << "Skipping this test, it requires avx512bw";
70+
}
71+
}
72+
73+
TYPED_TEST_P(avx512_sort, test_constant)
74+
{
75+
if (cpu_has_avx512bw()) {
76+
if ((sizeof(TypeParam) == 2) && (!cpu_has_avx512_vbmi2())) {
77+
GTEST_SKIP() << "Skipping this test, it requires avx512_vbmi2";
78+
}
79+
std::vector<int64_t> arrsizes;
80+
for (int64_t ii = 0; ii < 1024; ++ii) {
81+
arrsizes.push_back((TypeParam) (ii + 1));
82+
}
83+
std::vector<TypeParam> arr;
84+
std::vector<TypeParam> sortedarr;
85+
for (size_t ii = 0; ii < arrsizes.size(); ++ii) {
86+
/* constant array */
87+
for (int jj = 0; jj < arrsizes[ii]; ++jj) {
88+
arr.push_back(ii);
89+
}
90+
sortedarr = arr;
91+
/* Sort with std::sort for comparison */
92+
std::sort(sortedarr.begin(), sortedarr.end());
93+
avx512_qsort<TypeParam>(arr.data(), arr.size());
94+
ASSERT_EQ(sortedarr, arr) << "Array size = " << arrsizes[ii];
95+
arr.clear();
96+
sortedarr.clear();
97+
}
98+
}
99+
else {
100+
GTEST_SKIP() << "Skipping this test, it requires avx512bw";
101+
}
102+
}
103+
104+
TYPED_TEST_P(avx512_sort, test_small_range)
105+
{
106+
if (cpu_has_avx512bw()) {
107+
if ((sizeof(TypeParam) == 2) && (!cpu_has_avx512_vbmi2())) {
108+
GTEST_SKIP() << "Skipping this test, it requires avx512_vbmi2";
109+
}
110+
std::vector<int64_t> arrsizes;
111+
for (int64_t ii = 0; ii < 1024; ++ii) {
112+
arrsizes.push_back((TypeParam) (ii + 1));
113+
}
114+
std::vector<TypeParam> arr;
115+
std::vector<TypeParam> sortedarr;
116+
for (size_t ii = 0; ii < arrsizes.size(); ++ii) {
117+
arr = get_uniform_rand_array<TypeParam>(arrsizes[ii], 20, 1);
118+
sortedarr = arr;
119+
/* Sort with std::sort for comparison */
120+
std::sort(sortedarr.begin(), sortedarr.end());
121+
avx512_qsort<TypeParam>(arr.data(), arr.size());
122+
ASSERT_EQ(sortedarr, arr) << "Array size = " << arrsizes[ii];
123+
arr.clear();
124+
sortedarr.clear();
125+
}
126+
}
127+
else {
128+
GTEST_SKIP() << "Skipping this test, it requires avx512bw";
129+
}
130+
}
131+
REGISTER_TYPED_TEST_SUITE_P(avx512_sort,
132+
test_random, test_reverse, test_constant, test_small_range);

0 commit comments

Comments
 (0)