ATLAS Offline Software
Loading...
Searching...
No Matches
ExpectationCompare.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
6
7
8//
9// includes
10//
11
13
14#include <boost/core/demangle.hpp>
15#include <gtest/gtest.h>
16
17#include <iomanip>
18#include <span>
19#include <string>
20
21//
22// method implementations
23//
24
25namespace columnar
26{
27 namespace TestUtils
28 {
29 namespace
30 {
31 template<typename T> void checkExpectationTyped (const std::string& columnName, std::span<const T> output, std::span<const T> expectation)
32 {
33 SCOPED_TRACE (columnName);
34 EXPECT_EQ (output.size(), expectation.size());
35 for (std::size_t index = 0; index != std::min (output.size(), expectation.size()); ++ index)
36 {
37 SCOPED_TRACE (index);
38 if constexpr (std::is_floating_point_v<T>)
39 EXPECT_NEAR (output[index], expectation[index], 1e-6);
40 else
41 EXPECT_EQ (output[index], expectation[index]);
42 }
43 }
44 }
45
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)
47 {
48 SCOPED_TRACE (columnName);
49 ASSERT_EQ (outputType, expectationType);
50 if (outputType == typeid(float))
51 checkExpectationTyped (columnName, std::span<const float> (static_cast<const float*> (outputData), outputSize), std::span<const float> (static_cast<const float*> (expectationData), expectationSize));
52 else if (outputType == typeid(char))
53 checkExpectationTyped (columnName, std::span<const char> (static_cast<const char*> (outputData), outputSize), std::span<const char> (static_cast<const char*> (expectationData), expectationSize));
54 else if (outputType == typeid(int))
55 checkExpectationTyped (columnName, std::span<const int> (static_cast<const int*> (outputData), outputSize), std::span<const int> (static_cast<const int*> (expectationData), expectationSize));
56 else if (outputType == typeid(std::uint8_t))
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));
58 else if (outputType == typeid(std::uint16_t))
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));
60 else if (outputType == typeid(std::uint32_t))
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));
62 else if (outputType == typeid(std::uint64_t))
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));
64 else if (outputType == typeid(std::size_t))
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));
66 else
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");
68 }
69
70 namespace
71 {
72 template<typename T> void printExpectedOutputTyped (const std::string& columnName, const std::span<const T>& output)
73 {
74 std::cout << " columnMap.setExpectation (\"" << columnName << "\", {";
75 for (std::size_t index = 0; index != output.size(); ++ index)
76 {
77 if (index != 0)
78 std::cout << ", ";
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); //restore ostream state
83 } else if constexpr (std::is_same_v<T,char>){
84 std::cout << int (output[index]);
85 } else {
86 std::cout << output[index];
87 }
88 }
89 std::cout << "});" << std::endl;
90 }
91 }
92
93 void printExpectedOutput (const std::string& columnName, const std::type_info& outputType, std::size_t outputSize, const void *outputData)
94 {
95 if (outputType == typeid(float))
96 printExpectedOutputTyped (columnName, std::span<const float> (static_cast<const float*> (outputData), outputSize));
97 else if (outputType == typeid(char))
98 printExpectedOutputTyped (columnName, std::span<const char> (static_cast<const char*> (outputData), outputSize));
99 else if (outputType == typeid(int))
100 printExpectedOutputTyped (columnName, std::span<const int> (static_cast<const int*> (outputData), outputSize));
101 else if (outputType == typeid(std::uint8_t))
102 printExpectedOutputTyped (columnName, std::span<const std::uint8_t> (static_cast<const std::uint8_t*> (outputData), outputSize));
103 else if (outputType == typeid(std::uint16_t))
104 printExpectedOutputTyped (columnName, std::span<const std::uint16_t> (static_cast<const std::uint16_t*> (outputData), outputSize));
105 else if (outputType == typeid(std::uint32_t))
106 printExpectedOutputTyped (columnName, std::span<const std::uint32_t> (static_cast<const std::uint32_t*> (outputData), outputSize));
107 else if (outputType == typeid(std::uint64_t))
108 printExpectedOutputTyped (columnName, std::span<const std::uint64_t> (static_cast<const std::uint64_t*> (outputData), outputSize));
109 else if (outputType == typeid(std::size_t))
110 printExpectedOutputTyped (columnName, std::span<const std::size_t> (static_cast<const std::size_t*> (outputData), outputSize));
111 else
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");
113 }
114 }
115}
static Double_t ss
str index
Definition DeMoScan.py:362
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)
void printExpectedOutput(const std::string &columnName, const std::type_info &outputType, std::size_t outputSize, const void *outputData)
@ output
an output column
Definition ColumnInfo.h:24
Definition index.py:1