@@ -8,6 +8,27 @@ class avx512argselect : public ::testing::Test {
8
8
};
9
9
TYPED_TEST_SUITE_P (avx512argselect);
10
10
11
+
12
+ template <typename T>
13
+ T std_min_element (std::vector<T> arr, std::vector<int64_t > arg, int64_t left, int64_t right)
14
+ {
15
+ std::vector<int64_t >::iterator res =
16
+ std::min_element (arg.begin () + left,
17
+ arg.begin () + right,
18
+ [arr](int64_t a, int64_t b) -> bool {return arr[a] < arr[b];});
19
+ return arr[*res];
20
+ }
21
+
22
+ template <typename T>
23
+ T std_max_element (std::vector<T> arr, std::vector<int64_t > arg, int64_t left, int64_t right)
24
+ {
25
+ std::vector<int64_t >::iterator res =
26
+ std::max_element (arg.begin () + left,
27
+ arg.begin () + right,
28
+ [arr](int64_t a, int64_t b) -> bool {return arr[a] > arr[b];});
29
+ return arr[*res];
30
+ }
31
+
11
32
TYPED_TEST_P (avx512argselect, test_random)
12
33
{
13
34
if (cpu_has_avx512bw ()) {
@@ -21,7 +42,12 @@ TYPED_TEST_P(avx512argselect, test_random)
21
42
for (auto &k : kth) {
22
43
std::vector<int64_t > inx
23
44
= avx512_argselect<TypeParam>(arr.data (), k, arr.size ());
24
- EXPECT_EQ (arr[sorted_inx[k]], arr[inx[k]]) << " Failed at index k = " << k;
45
+ auto true_kth = arr[sorted_inx[k]];
46
+ EXPECT_EQ (true_kth, arr[inx[k]]) << " Failed at index k = " << k;
47
+ if (k >= 1 )
48
+ EXPECT_GE (true_kth, std_max_element (arr, inx, 0 , k-1 ));
49
+ if (k != arrsize-1 )
50
+ EXPECT_LE (true_kth, std_min_element (arr, inx, k+1 , arrsize-1 ));
25
51
EXPECT_UNIQUE (inx)
26
52
}
27
53
}
0 commit comments