|
| 1 | +/******************************************* |
| 2 | + * * Copyright (C) 2022 Intel Corporation |
| 3 | + * * SPDX-License-Identifier: BSD-3-Clause |
| 4 | + * *******************************************/ |
| 5 | + |
| 6 | +#include "test-qsort-common.h" |
| 7 | + |
| 8 | +template <typename T> |
| 9 | +class avx512_sort_fp : public ::testing::Test { |
| 10 | +}; |
| 11 | +TYPED_TEST_SUITE_P(avx512_sort_fp); |
| 12 | + |
| 13 | +TYPED_TEST_P(avx512_sort_fp, test_random_nan) |
| 14 | +{ |
| 15 | + const int num_nans = 3; |
| 16 | + if (!cpu_has_avx512bw()) { |
| 17 | + GTEST_SKIP() << "Skipping this test, it requires avx512bw"; |
| 18 | + } |
| 19 | + std::vector<int64_t> arrsizes; |
| 20 | + for (int64_t ii = num_nans; ii < 1024; ++ii) { |
| 21 | + arrsizes.push_back((TypeParam)ii); |
| 22 | + } |
| 23 | + std::vector<TypeParam> arr; |
| 24 | + std::vector<TypeParam> sortedarr; |
| 25 | + for (auto &size : arrsizes) { |
| 26 | + /* Random array */ |
| 27 | + arr = get_uniform_rand_array<TypeParam>(size); |
| 28 | + for (auto ii = 1; ii <= num_nans; ++ii) { |
| 29 | + arr[size-ii] = std::numeric_limits<TypeParam>::quiet_NaN(); |
| 30 | + } |
| 31 | + sortedarr = arr; |
| 32 | + std::sort(sortedarr.begin(), sortedarr.end()-3); |
| 33 | + std::random_shuffle(arr.begin(), arr.end()); |
| 34 | + avx512_qsort<TypeParam>(arr.data(), arr.size()); |
| 35 | + for (auto ii = 1; ii <= num_nans; ++ii) { |
| 36 | + if (!std::isnan(arr[size-ii])) { |
| 37 | + ASSERT_TRUE(false) << "NAN's aren't sorted to the end. Arr size = " << size; |
| 38 | + } |
| 39 | + } |
| 40 | + if (!std::is_sorted(arr.begin(), arr.end() - num_nans)) { |
| 41 | + ASSERT_TRUE(true) << "Array isn't sorted"; |
| 42 | + } |
| 43 | + arr.clear(); |
| 44 | + sortedarr.clear(); |
| 45 | + } |
| 46 | +} |
| 47 | +REGISTER_TYPED_TEST_SUITE_P(avx512_sort_fp, test_random_nan); |
0 commit comments