Skip to content

Commit 7a86995

Browse files
author
Raghuveer Devulapalli
committed
Add more tests for qselect
1 parent dbed567 commit 7a86995

File tree

1 file changed

+45
-2
lines changed

1 file changed

+45
-2
lines changed

tests/test_qselect.hpp

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ class avx512_select : public ::testing::Test {
55
};
66
TYPED_TEST_SUITE_P(avx512_select);
77

8-
TYPED_TEST_P(avx512_select, test_arrsizes)
8+
TYPED_TEST_P(avx512_select, test_random)
99
{
1010
if (cpu_has_avx512bw()) {
1111
if ((sizeof(TypeParam) == 2) && (!cpu_has_avx512_vbmi2())) {
@@ -48,4 +48,47 @@ TYPED_TEST_P(avx512_select, test_arrsizes)
4848
}
4949
}
5050

51-
REGISTER_TYPED_TEST_SUITE_P(avx512_select, test_arrsizes);
51+
TYPED_TEST_P(avx512_select, test_small_range)
52+
{
53+
if (cpu_has_avx512bw()) {
54+
if ((sizeof(TypeParam) == 2) && (!cpu_has_avx512_vbmi2())) {
55+
GTEST_SKIP() << "Skipping this test, it requires avx512_vbmi2";
56+
}
57+
std::vector<int64_t> arrsizes;
58+
for (int64_t ii = 0; ii < 1024; ++ii) {
59+
arrsizes.push_back(ii);
60+
}
61+
std::vector<TypeParam> arr;
62+
std::vector<TypeParam> sortedarr;
63+
std::vector<TypeParam> psortedarr;
64+
for (size_t ii = 0; ii < arrsizes.size(); ++ii) {
65+
/* Random array */
66+
arr = get_uniform_rand_array<TypeParam>(arrsizes[ii], 20, 1);
67+
sortedarr = arr;
68+
/* Sort with std::sort for comparison */
69+
std::sort(sortedarr.begin(), sortedarr.end());
70+
for (size_t k = 0; k < arr.size(); ++k) {
71+
psortedarr = arr;
72+
avx512_qselect<TypeParam>(psortedarr.data(), k, psortedarr.size());
73+
/* index k is correct */
74+
ASSERT_EQ(sortedarr[k], psortedarr[k]);
75+
/* Check left partition */
76+
for (size_t jj = 0; jj < k; jj++) {
77+
ASSERT_LE(psortedarr[jj], psortedarr[k]);
78+
}
79+
/* Check right partition */
80+
for (size_t jj = k+1; jj < arr.size(); jj++) {
81+
ASSERT_GE(psortedarr[jj], psortedarr[k]);
82+
}
83+
psortedarr.clear();
84+
}
85+
arr.clear();
86+
sortedarr.clear();
87+
}
88+
}
89+
else {
90+
GTEST_SKIP() << "Skipping this test, it requires avx512bw";
91+
}
92+
}
93+
94+
REGISTER_TYPED_TEST_SUITE_P(avx512_select, test_random, test_small_range);

0 commit comments

Comments
 (0)