16#define BOOST_TEST_MODULE Utility test
17#define BOOST_TEST_MAIN
18#define BOOST_TEST_DYN_LINK
26#include <boost/test/unit_test.hpp>
27#include <boost/mp11.hpp>
37inline const std::string
str = R
"(Sed ut perspiciatis, unde omnis iste natus error sit voluptatem accusantium
38doloremque laudantium, totam rem aperiam eaque ipsa, quae ab illo inventore veritatis
39et quasi architecto beatae vitae dicta sunt, explicabo. nemo enim ipsam voluptatem,
40quia voluptas sit, aspernatur aut odit aut fugit, sed quia consequuntur magni dolores
41eos, qui ratione voluptatem sequi nesciunt, neque porro quisquam est, qui dolorem ipsum,
42quia dolor sit, amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora
43incidunt, ut labore et dolore magnam aliquam quaerat voluptatem. ut enim ad minima veniam,
44quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea
45commodi consequatur? quis autem vel eum iure reprehenderit, qui in ea voluptate velit
46esse, quam nihil molestiae consequatur, vel illum, qui dolorem eum fugiat,
47quo voluptas nulla pariatur?)";
51 inline static std::vector<T>
Data{};
61 inline static std::vector<T>
Data{
str.begin(),
str.end()};
68struct hasSameTemplateParam : std::is_same<typename boost::mp11::mp_at_c<L, 0>::source_type, typename boost::mp11::mp_at_c<L, 1>::source_type> {
71using source_types = boost::mp11::mp_list<int8_t, int16_t, int32_t>;
73using testInput_templates = boost::mp11::mp_list<boost::mp11::mp_quote<Empty>, boost::mp11::mp_quote<Full>>;
75using testInputAll_types = boost::mp11::mp_product<boost::mp11::mp_invoke_q, testInput_templates, source_types>;
77using testInput_types = boost::mp11::mp_copy_if<testInputProduct_types, hasSameTemplateParam>;
79using coder_types = boost::mp11::mp_list<std::integral_constant<CoderTag, CoderTag::Compat>
80#ifdef RANS_SINGLE_STREAM
82 std::integral_constant<CoderTag, CoderTag::SingleStream>
86 std::integral_constant<CoderTag, CoderTag::SSE>
90 std::integral_constant<CoderTag, CoderTag::AVX2>
94using testCase_types = boost::mp11::mp_product<boost::mp11::mp_list, coder_types, testInput_types>;
100 using coder_type = boost::mp11::mp_at_c<test_types, 0>;
102 using dictString_type = boost::mp11::mp_at_c<testCase_types, 0>;
103 using encodeString_type = boost::mp11::mp_at_c<testCase_types, 1>;
105 using source_type =
typename dictString_type::source_type;
107 constexpr CoderTag coderTag = coder_type::value;
108 const auto& dictString = dictString_type::Data;
109 const auto& encodeString = encodeString_type::Data;
117 if (dictString == encodeString) {
118 std::vector<stream_type> encodeBuffer(encodeString.size());
119 auto encodeBufferEnd = encoder.process(encodeString.begin(), encodeString.end(), encodeBuffer.begin());
120 std::vector<stream_type> encodeBuffer2(encodeString.size());
121 auto encodeBuffer2End = encoder.process(gsl::span<const source_type>(encodeString),
gsl::make_span(encodeBuffer2));
123 BOOST_CHECK_EQUAL_COLLECTIONS(encodeBuffer.begin(), encodeBufferEnd, encodeBuffer2.data(), encodeBuffer2End);
125 std::vector<source_type>
decodeBuffer(encodeString.size());
126 decoder.process(encodeBufferEnd,
decodeBuffer.begin(), encodeString.size(), encoder.getNStreams());
131 std::vector<source_type> literals(encodeString.size());
132 std::vector<stream_type> encodeBuffer(encodeString.size());
133 auto [encodeBufferEnd, literalBufferEnd] = encoder.process(encodeString.begin(), encodeString.end(), encodeBuffer.begin(), literals.begin());
134 std::vector<stream_type> encodeBuffer2(encodeString.size());
135 std::vector<source_type> literals2(encodeString.size());
136 auto [encodeBuffer2End, literalBuffer2End] = encoder.process(gsl::span<const source_type>(encodeString),
gsl::make_span(encodeBuffer2), literals2.begin());
138 BOOST_CHECK_EQUAL_COLLECTIONS(encodeBuffer.begin(), encodeBufferEnd, encodeBuffer2.data(), encodeBuffer2End);
139 BOOST_CHECK_EQUAL_COLLECTIONS(literals.begin(), literalBufferEnd, literals2.begin(), literalBuffer2End);
141 std::vector<source_type>
decodeBuffer(encodeString.size());
142 decoder.process(encodeBufferEnd,
decodeBuffer.begin(), encodeString.size(), encoder.getNStreams(), literalBufferEnd);
147#ifndef RANS_SINGLE_STREAM
150 BOOST_TEST_WARN(
" Tests were not Compiled for a uint128_t capable CPU, cannot run all tests");
156 BOOST_TEST_WARN(
"Tests were not Compiled for a SSE 4.2 capable CPU, cannot run all tests");
162 BOOST_TEST_WARN(
"Tests were not Compiled for a AVX2 capable CPU, cannot run all tests");
boost::mp11::mp_list< std::integral_constant< CoderTag, CoderTag::Compat > > coder_types
static constexpr decltype(auto) fromRenormed(const RenormedHistogramConcept< container_T > &renormed)
static constexpr decltype(auto) fromRenormed(const RenormedDenseHistogram< source_T > &renormed)
public interface for encoding.
static factory classes for building histograms, encoders and decoders.
GLenum GLint GLint * precision
public interface for building and renorming histograms from source data.
auto make_span(const o2::rans::internal::simd::AlignedArray< T, width_V, size_V > &array)
decltype(auto) renorm(histogram_T histogram, size_t newPrecision, RenormingPolicy renormingPolicy=RenormingPolicy::Auto, size_t lowProbabilityCutoffBits=0)
decltype(Data.begin()) iterator_type
static std::vector< T > Data
decltype(Data.begin()) iterator_type
static std::vector< T > Data
static decltype(auto) fromSamples(source_IT begin, source_IT end, typename std::iterator_traits< source_IT >::value_type min, typename std::iterator_traits< source_IT >::value_type max)
boost::mp11::mp_list< uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t > source_types
std::string decodeBuffer(int feeId, gsl::span< const std::byte > buffer)
boost::mp11::mp_product< boost::mp11::mp_list, coder_types, testInput_types > testCase_types
boost::mp11::mp_copy_if< testInputProduct_types, hasSameTemplateParam > testInput_types
BOOST_AUTO_TEST_CASE_TEMPLATE(test_encodeDecode, test_types, testCase_types)
boost::mp11::mp_product< boost::mp11::mp_list, testInputAll_types, testInputAll_types > testInputProduct_types
BOOST_AUTO_TEST_CASE(test_NoSingleStream)
boost::mp11::mp_list< boost::mp11::mp_quote< Empty >, boost::mp11::mp_quote< Full > > testInput_templates
boost::mp11::mp_product< boost::mp11::mp_invoke_q, testInput_templates, source_types > testInputAll_types
constexpr size_t RansRenormingPrecision
boost::mp11::mp_product< boost::mp11::mp_list, source_types, buffer_types > test_types