diff --git a/tests/meson.build b/tests/meson.build index ef7de312..86ca2fe8 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -12,11 +12,8 @@ libtests += static_library('tests_kvsort', include_directories : [lib, utils], ) -#if cancompilefp16 -# libtests += static_library('tests_qsortfp16', -# files('test-qsortfp16.cpp', ), -# dependencies: gtest_dep, -# include_directories : [src, utils], -# cpp_args : ['-O3', '-march=sapphirerapids'], -# ) -#endif +libtests += static_library('tests_objsort', + files('test-objqsort.cpp', ), + dependencies: gtest_dep, + include_directories : [lib, utils], + ) diff --git a/tests/test-objqsort.cpp b/tests/test-objqsort.cpp new file mode 100644 index 00000000..2b1a1860 --- /dev/null +++ b/tests/test-objqsort.cpp @@ -0,0 +1,75 @@ +/******************************************* + * * Copyright (C) 2022-2023 Intel Corporation + * * SPDX-License-Identifier: BSD-3-Clause + * *******************************************/ + +#include "rand_array.h" +#include "x86simdsort.h" +#include + +template +struct P { + T x, y; + T metric() const + { + return x; + } + bool operator==(const P &a) const + { + return a.x == x; // && a.y == y; + } +}; + +template +class simdobjsort : public ::testing::Test { +public: + simdobjsort() + { + std::iota(arrsize.begin(), arrsize.end(), 1); + arrtype = {"random", + "constant", + "sorted", + "reverse", + "smallrange", + "max_at_the_end", + "rand_max"}; + } + std::vector arrtype; + std::vector arrsize = std::vector(1024); +}; + +TYPED_TEST_SUITE_P(simdobjsort); + +TYPED_TEST_P(simdobjsort, test_objsort) +{ + for (auto type : this->arrtype) { + for (auto size : this->arrsize) { + std::vector x = get_array(type, size); + std::vector y = get_array("random", size); + std::vector> arr(size); + for (size_t ii = 0; ii < size; ++ii) { + arr[ii].x = x[ii]; + arr[ii].y = y[ii]; + } + std::vector> arr_bckp = arr; + x86simdsort::object_qsort(arr.data(), size, [](P p) { + return p.metric(); + }); + std::sort(arr_bckp.begin(), + arr_bckp.end(), + [](const P &a, const P &b) { + return a.metric() < b.metric(); + }); + ASSERT_EQ(arr, arr_bckp); + arr.clear(); + arr_bckp.clear(); + } + } +} + +REGISTER_TYPED_TEST_SUITE_P(simdobjsort, test_objsort); + +using QObjSortTestTypes + = testing::Types; + +INSTANTIATE_TYPED_TEST_SUITE_P(xss, simdobjsort, QObjSortTestTypes);