16#define BOOST_TEST_MODULE Utility test
17#define BOOST_TEST_MAIN
18#define BOOST_TEST_DYN_LINK
24#include <boost/test/unit_test.hpp>
25#include <boost/mpl/list.hpp>
27#include <fairlogger/Logger.h>
39using pd_types = boost::mpl::list<pd_t<SIMDWidth::SSE>
45using epi64_types = boost::mpl::list<epi64_t<SIMDWidth::SSE>
51using epi32_types = boost::mpl::list<epi32_t<SIMDWidth::SSE>
82struct ConvertingFixture64 {
83 std::vector<uint64_t> uint64Data = {0x0, 0x1, 0xFFFFFFFFFFFFE, 0xFFFFFFFFFFFFF};
84 std::vector<double> doubleData{};
88 for (
auto i : uint64Data) {
89 doubleData.push_back(
static_cast<double>(
i));
94BOOST_FIXTURE_TEST_SUITE(test_SIMDconvert64, ConvertingFixture64)
98 for (
size_t i = 0;
i < uint64Data.size(); ++
i) {
99 const epi64_T
src{uint64Data[
i]};
100 const auto dest = store(uint64ToDouble(load(
src)));
110 for (
size_t i = 0;
i < doubleData.size(); ++
i) {
111 const pd_T
src{doubleData[
i]};
112 const auto dest = store<uint64_t>(doubleToUint64(load(
src)));
120BOOST_AUTO_TEST_SUITE_END()
122struct ConvertingFixture32 {
124 std::vector<double> doubleData;
126 ConvertingFixture32()
129 doubleData.push_back(
static_cast<double>(
i));
134BOOST_FIXTURE_TEST_SUITE(test_SIMDconvert32, ConvertingFixture32)
138 constexpr SIMDWidth simdWidth_V = simdWidth_v<epi32_T>;
140 for (
size_t i = 0;
i < uint32Data.
size(); ++
i) {
142 auto dest = store(int32ToDouble<simdWidth_V>(load(
src)));
150BOOST_AUTO_TEST_SUITE_END()
152struct ModDivFixture {
153 std::vector<uint32_t> numerator = {1, 6, 17};
154 std::vector<uint32_t> denominator = {1, 3, 4};
158 std::array<uint32_t, 3> mod;
159 std::array<uint32_t, 3> div;
163 for (
size_t i = 0;
i < numerator.size(); ++
i) {
164 div[
i] = numerator[
i] / denominator[
i];
165 mod[
i] = numerator[
i] % denominator[
i];
170BOOST_FIXTURE_TEST_SUITE(testModDiv, ModDivFixture)
174 for (
size_t i = 0;
i < numerator.size(); ++
i) {
175 const pd_T numeratorPD{
static_cast<double>(numerator[
i])};
176 const pd_T denominatorPD{
static_cast<double>(denominator[
i])};
178 auto [divPDVec, modPDVec] = divMod(load(numeratorPD), load(denominatorPD));
180 pd_T divPD = store(divPDVec);
181 pd_T modPD = store(modPDVec);
183 pd_T modResult{
static_cast<double>(mod[
i])};
184 pd_T divResult{
static_cast<double>(div[
i])};
190BOOST_AUTO_TEST_SUITE_END()
195 BOOST_TEST_WARN(
"Tests were not Compiled for AVX2, cannot run all tests");
203 BOOST_TEST_WARN(
"Tests were not Compiled for SIMD, cannot run all tests");
static constexpr size_t size() noexcept
preprocessor defines to enable features based on CPU architecture
auto make_span(const o2::rans::internal::simd::AlignedArray< T, width_V, size_V > &array)
Enum< T >::Iterator begin(Enum< T >)
wrapper around basic SIMD operations
basic SIMD datatypes and traits
BOOST_AUTO_TEST_CASE_TEMPLATE(testInplaceEncoderEmpty, source_T, source_types)
BOOST_CHECK_EQUAL(triggersD.size(), triggers.size())
BOOST_AUTO_TEST_CASE(test_NoSIMD)