10#include <boost/python.hpp>
12#include <framework/utilities/CutNodes.h>
13#include <framework/utilities/TestHelpers.h>
15#include <gtest/gtest.h>
20 namespace py = boost::python;
22 typedef std::variant<double, int, bool> VarVariant;
24 struct MockObjectType {
26 explicit MockObjectType(
const double& d) : m_value{d} {}
27 explicit MockObjectType(
const int& i) : m_value{i} {}
28 explicit MockObjectType(
const bool& b) : m_value{b} {}
37 class MockVariableType {
40 VarVariant function(
const MockObjectType*
object)
const
42 return m_function(
object);
44 explicit MockVariableType(
const std::string& name) : m_name{name}
46 m_function = [](
const MockObjectType * object) -> VarVariant {
47 if (
object !=
nullptr)
49 return object->m_value;
52 return std::numeric_limits<double>::quiet_NaN();
57 MockVariableType(
const std::string& name, std::function<VarVariant(
const MockObjectType*)> function) : m_name{name}, m_function{function}
62 std::function<VarVariant(
const MockObjectType*)> m_function;
69 class MockVariableManager {
72 using Object = MockObjectType;
74 using Var = MockVariableType;
76 typedef std::variant<double, int, bool> VarVariant;
79 static MockVariableManager& Instance()
81 static MockVariableManager instance;
86 Var* getVariable(
const std::string& name)
88 if (name ==
"mocking_variable") {
89 return &m_mocking_variable;
95 Var* getVariable(
const std::string& functionName,
const std::vector<std::string>& functionArguments)
98 (void) functionArguments;
99 return &m_mocking_variable;
103 Var m_mocking_variable{
"mocking_variable"};
111 py::tuple tuple = py::tuple();
115 tuple = py::make_tuple(
static_cast<int>(NodeType::UnaryExpressionNode));
119 tuple = py::make_tuple(
static_cast<int>(NodeType::BinaryExpressionNode));
123 tuple = py::make_tuple(
static_cast<int>(NodeType::IntegerNode));
127 tuple = py::make_tuple(
static_cast<int>(NodeType::DoubleNode));
131 tuple = py::make_tuple(
static_cast<int>(NodeType::BooleanNode));
135 tuple = py::make_tuple(
static_cast<int>(NodeType::IdentifierNode));
139 tuple = py::make_tuple(
static_cast<int>(NodeType::FunctionNode));
143 tuple = py::make_tuple(
static_cast<int>(NodeType::IdentifierNode),
"THISDOESNOTEXIST");
Wrapper class for static node compile functions.
static std::unique_ptr< const AbstractExpressionNode< AVariableManager > > compile_expression_node(Nodetuple tuple)
This template function creates a ExpressionNode from a boost::python::tuple The Python Parser encodes...
Abstract base class for different kinds of events.