@@ -30,11 +30,11 @@ std::vector<int64_t> std_argsort(const std::vector<T> &array)
30
30
return indices;
31
31
}
32
32
33
- #define EXPECT_UNIQUE (arr ) \
34
- std::sort (arr .begin(), arr .end()); \
35
- std::vector<int64_t > vec (arr .size()); \
36
- std::iota (vec .begin(), vec .end(), 0); \
37
- EXPECT_EQ (arr, vec ) << "Indices aren't unique. Array size = " << arr .size();
33
+ #define EXPECT_UNIQUE (sorted_arg ) \
34
+ std::sort (sorted_arg .begin(), sorted_arg .end()); \
35
+ std::vector<int64_t > expected_arg (sorted_arg .size()); \
36
+ std::iota (expected_arg .begin(), expected_arg .end(), 0); \
37
+ EXPECT_EQ (sorted_arg, expected_arg ) << "Indices aren't unique. Array size = " << sorted_arg .size();
38
38
39
39
TYPED_TEST_P (avx512argsort, test_random)
40
40
{
@@ -225,7 +225,7 @@ TYPED_TEST_P(avx512argsort, test_max_value_at_end_of_array)
225
225
GTEST_SKIP () << " Skipping this test, it requires avx512bw ISA" ;
226
226
}
227
227
std::vector<int64_t > arrsizes;
228
- for (int64_t ii = 1 ; ii <= 64 ; ++ii) {
228
+ for (int64_t ii = 1 ; ii <= 256 ; ++ii) {
229
229
arrsizes.push_back (ii);
230
230
}
231
231
std::vector<TypeParam> arr;
@@ -250,12 +250,52 @@ TYPED_TEST_P(avx512argsort, test_max_value_at_end_of_array)
250
250
}
251
251
}
252
252
253
+ TYPED_TEST_P (avx512argsort, test_all_inf_array)
254
+ {
255
+ if (!cpu_has_avx512bw ()) {
256
+ GTEST_SKIP () << " Skipping this test, it requires avx512bw ISA" ;
257
+ }
258
+ std::vector<int64_t > arrsizes;
259
+ for (int64_t ii = 1 ; ii <= 256 ; ++ii) {
260
+ arrsizes.push_back (ii);
261
+ }
262
+ std::vector<TypeParam> arr;
263
+ for (auto &size : arrsizes) {
264
+ arr = get_uniform_rand_array<TypeParam>(size);
265
+ if (std::numeric_limits<TypeParam>::has_infinity) {
266
+ for (int64_t jj = 1 ; jj <= size; ++jj) {
267
+ if (rand () % 0x1 ) {
268
+ arr.push_back (std::numeric_limits<TypeParam>::infinity ());
269
+ }
270
+ }
271
+ }
272
+ else {
273
+ for (int64_t jj = 1 ; jj <= size; ++jj) {
274
+ if (rand () % 0x1 ) {
275
+ arr.push_back (std::numeric_limits<TypeParam>::max ());
276
+ }
277
+ }
278
+ }
279
+ std::vector<int64_t > inx = avx512_argsort (arr.data (), arr.size ());
280
+ std::vector<TypeParam> sorted;
281
+ for (size_t jj = 0 ; jj < size; ++jj) {
282
+ sorted.push_back (arr[inx[jj]]);
283
+ }
284
+ if (!std::is_sorted (sorted.begin (), sorted.end ())) {
285
+ EXPECT_TRUE (false ) << " Array of size " << size << " is not sorted" ;
286
+ }
287
+ EXPECT_UNIQUE (inx)
288
+ arr.clear ();
289
+ }
290
+ }
291
+
253
292
REGISTER_TYPED_TEST_SUITE_P (avx512argsort,
254
293
test_random,
255
294
test_reverse,
256
295
test_constant,
257
296
test_sorted,
258
297
test_small_range,
298
+ test_all_inf_array,
259
299
test_array_with_nan,
260
300
test_max_value_at_end_of_array);
261
301
0 commit comments