14 #include <boost/core/demangle.hpp>
15 #include <gtest/gtest.h>
31 template<
typename T>
void checkExpectationTyped (
const std::string& columnName, std::span<const T> output, std::span<const T> expectation)
33 SCOPED_TRACE (columnName);
34 EXPECT_EQ (
output.size(), expectation.size());
38 if constexpr (std::is_floating_point_v<T>)
39 EXPECT_NEAR (output[
index], expectation[
index], 1
e-6);
46 void checkExpectation (
const std::string& columnName,
const std::type_info&
outputType, std::size_t outputSize,
const void *outputData,
const std::type_info& expectationType, std::size_t expectationSize,
const void *expectationData)
48 SCOPED_TRACE (columnName);
51 checkExpectationTyped (columnName, std::span<const float> (
static_cast<const float*
> (outputData), outputSize), std::span<const float> (
static_cast<const float*
> (expectationData), expectationSize));
53 checkExpectationTyped (columnName, std::span<const char> (
static_cast<const char*
> (outputData), outputSize), std::span<const char> (
static_cast<const char*
> (expectationData), expectationSize));
55 checkExpectationTyped (columnName, std::span<const int> (
static_cast<const int*
> (outputData), outputSize), std::span<const int> (
static_cast<const int*
> (expectationData), expectationSize));
57 checkExpectationTyped (columnName, std::span<const std::uint8_t> (
static_cast<const std::uint8_t*
> (outputData), outputSize), std::span<const std::uint8_t> (
static_cast<const std::uint8_t*
> (expectationData), expectationSize));
59 checkExpectationTyped (columnName, std::span<const std::uint16_t> (
static_cast<const std::uint16_t*
> (outputData), outputSize), std::span<const std::uint16_t> (
static_cast<const std::uint16_t*
> (expectationData), expectationSize));
61 checkExpectationTyped (columnName, std::span<const std::uint32_t> (
static_cast<const std::uint32_t*
> (outputData), outputSize), std::span<const std::uint32_t> (
static_cast<const std::uint32_t*
> (expectationData), expectationSize));
63 checkExpectationTyped (columnName, std::span<const std::uint64_t> (
static_cast<const std::uint64_t*
> (outputData), outputSize), std::span<const std::uint64_t> (
static_cast<const std::uint64_t*
> (expectationData), expectationSize));
65 checkExpectationTyped (columnName, std::span<const std::size_t> (
static_cast<const std::size_t*
> (outputData), outputSize), std::span<const std::size_t> (
static_cast<const std::size_t*
> (expectationData), expectationSize));
67 throw std::logic_error (
"received unsupported type " + boost::core::demangle(
outputType.name()) +
" for column compare, cast value or extend test handler to support it");
72 template<
typename T>
void printExpectedOutputTyped (
const std::string& columnName,
const std::span<const T>& output)
74 std::cout <<
" columnMap.setExpectation (\"" << columnName <<
"\", {";
79 if constexpr (std::is_floating_point_v<T>){
80 auto ss = std::cout.precision();
81 std::cout << std::setprecision (8) << output[
index];
82 std::cout.precision(
ss);
83 }
else if constexpr (std::is_same_v<T,char>){
89 std::cout <<
"});" << std::endl;
96 printExpectedOutputTyped (columnName, std::span<const float> (
static_cast<const float*
> (outputData), outputSize));
98 printExpectedOutputTyped (columnName, std::span<const char> (
static_cast<const char*
> (outputData), outputSize));
100 printExpectedOutputTyped (columnName, std::span<const int> (
static_cast<const int*
> (outputData), outputSize));
102 printExpectedOutputTyped (columnName, std::span<const std::uint8_t> (
static_cast<const std::uint8_t*
> (outputData), outputSize));
104 printExpectedOutputTyped (columnName, std::span<const std::uint16_t> (
static_cast<const std::uint16_t*
> (outputData), outputSize));
106 printExpectedOutputTyped (columnName, std::span<const std::uint32_t> (
static_cast<const std::uint32_t*
> (outputData), outputSize));
108 printExpectedOutputTyped (columnName, std::span<const std::uint64_t> (
static_cast<const std::uint64_t*
> (outputData), outputSize));
110 printExpectedOutputTyped (columnName, std::span<const std::size_t> (
static_cast<const std::size_t*
> (outputData), outputSize));
112 throw std::logic_error (
"received unsupported type " + boost::core::demangle(
outputType.name()) +
" for column printout, cast value or extend test handler to support it");