Loading [MathJax]/jax/input/TeX/config.js
 |
ATLAS Offline Software
|
Go to the documentation of this file.
8 #ifndef COLUMNAR_TEST_FIXTURES__COLUMNAR_MEMORY_TEST_H
9 #define COLUMNAR_TEST_FIXTURES__COLUMNAR_MEMORY_TEST_H
11 #include <gtest/gtest.h>
111 template<
typename T> T
extractAny (
const std::string& columnName,
const std::any&
value)
113 if (
value.type() ==
typeid(
float))
114 return std::any_cast<float> (
value);
115 if (
value.type() ==
typeid(
double))
116 return std::any_cast<double> (
value);
117 if (
value.type() ==
typeid(
int))
118 return std::any_cast<int> (
value);
119 if (
value.type() ==
typeid(
unsigned))
120 return std::any_cast<unsigned> (
value);
121 if (
value.type() ==
typeid(std::size_t))
122 return std::any_cast<std::size_t> (
value);
123 throw std::logic_error (
"column " + columnName +
" received unsupported input " +
value.type().name() +
", cast value or extend test handler to support it");
128 std::vector<T> typedData;
130 typedData.emplace_back (extractAny<T> (
name,
value));
138 throw std::runtime_error (
"adding unknown column: " +
name);
140 throw std::runtime_error (
"column added twice: " +
name);
141 if (
column->second.type != &
typeid(T))
142 throw std::runtime_error (
"column " +
name +
" has wrong type: " +
column->second.type->name());
148 std::vector<T> typedData;
150 typedData.emplace_back (extractAny<T> (
name,
value));
160 throw std::runtime_error (
"output column not found: " +
name);
163 throw std::runtime_error (
"output column not set: " +
name);
164 if (!std::holds_alternative<std::vector<T>> (iter->second))
165 throw std::runtime_error (
"output column has wrong type: " +
name);
166 return std::span<const T> (
std::get<std::vector<T>> (iter->second));
173 throw std::runtime_error (
"output column not set: " + columnName);
174 if (!std::holds_alternative<std::vector<T>> (outputIter->second))
175 throw std::runtime_error (
"output column has wrong type: " + columnName);
176 auto& output = std::get<std::vector<T>> (outputIter->second);
180 throw std::runtime_error (
"output column not found: " + columnName);
181 if (!std::holds_alternative<std::vector<T>> (expectationIter->second))
182 throw std::runtime_error (
"output column has wrong type: " + columnName);
183 auto& expectation = std::get<std::vector<T>> (expectationIter->second);
185 SCOPED_TRACE (columnName);
186 EXPECT_EQ (output.size(), expectation.size());
189 SCOPED_TRACE (
index);
190 if constexpr (std::is_floating_point_v<T>)
191 EXPECT_NEAR (output[
index], expectation[
index], 1
e-6);
193 EXPECT_EQ (output[
index], expectation[
index]);
195 std::cout <<
" m_columnMap.setExpectation (\"" << columnName <<
"\", {";
200 if constexpr (std::is_floating_point_v<T>){
201 auto ss = std::cout.precision();
202 std::cout << std::setprecision (8) << output[
index];
203 std::cout.precision(
ss);
204 }
else if constexpr (std::is_same_v<T,char>){
207 std::cout << output[
index];
210 std::cout <<
"});" << std::endl;
219 std::unordered_map<std::string, std::variant<std::vector<float>,std::vector<char>,std::vector<int>,std::vector<std::uint8_t>,std::vector<std::uint16_t>,std::vector<std::uint32_t>,std::vector<std::uint64_t>>>
m_inputs;
220 std::unordered_map<std::string, std::variant<std::vector<float>,std::vector<char>,std::vector<int>,std::vector<std::uint8_t>,std::vector<std::uint16_t>,std::vector<std::uint32_t>,std::vector<std::uint64_t>>>
m_activeColumns;
221 std::unordered_map<std::string, std::variant<std::vector<float>,std::vector<char>,std::vector<int>,std::vector<std::uint8_t>,std::vector<std::uint16_t>,std::vector<std::uint32_t>,std::vector<std::uint64_t>>>
m_expectations;
char data[hepevt_bytes_allocation_ATLAS]
void connectColumnsToTool()
add the columns we have to the tool
ColumnMapType(ColumnarTestToolHandle &val_toolHandle)
T extractAny(const std::string &columnName, const std::any &value)
ColumnarTestToolHandle * m_toolHandle
ColumnarOffsetType columnSize(const std::string &name)
std::unordered_map< std::string, std::variant< std::vector< float >, std::vector< char >, std::vector< int >, std::vector< std::uint8_t >, std::vector< std::uint16_t >, std::vector< std::uint32_t >, std::vector< std::uint64_t > > > m_expectations
void addInputTyped(const std::string &name, const std::vector< std::any > &data)
std::unique_ptr< ColumnarToolWrapperData > m_columnData
std::unordered_map< std::string, std::variant< std::vector< float >, std::vector< char >, std::vector< int >, std::vector< std::uint8_t >, std::vector< std::uint16_t >, std::vector< std::uint32_t >, std::vector< std::uint64_t > > > m_inputs
void addColumn(const std::string &name, std::vector< std::any > data)
std::string makeUniqueName()
make a unique tool name to be used in unit tests
std::unordered_map< std::string, const ColumnInfo > m_columnMap
void addTypedColumn(const std::string &name, std::vector< T > data)
void checkExpectationTyped(const std::string &columnName)
std::span< const T > getOutputColumn(const std::string &name)
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
void addExpectationTyped(const std::string &name, std::vector< std::any > data)
static bool checkMode()
check whether we have the right mode
std::unordered_map< std::string, std::variant< std::vector< float >, std::vector< char >, std::vector< int >, std::vector< std::uint8_t >, std::vector< std::uint16_t >, std::vector< std::uint32_t >, std::vector< std::uint64_t > > > m_activeColumns
std::size_t ColumnarOffsetType
the type used for the size and offsets in the columnar data
void setExpectation(const std::string &name, const std::vector< std::any > &values)