1 #include <analysis/VariableManager/Manager.h>
2 #include <analysis/VariableManager/Utility.h>
3 #include <analysis/dataobjects/Particle.h>
4 #include <framework/utilities/TestHelpers.h>
6 #include <gtest/gtest.h>
10 using namespace Belle2::Variable;
14 double dummyVar(
const Particle*) {
return 42.0; }
15 double dummyVarWithParameters(
const Particle*,
const std::vector<double>& parameters)
18 for (
auto& x : parameters)
24 std::string arg = arguments[0];
25 auto func = [arg](
const Particle*) ->
double {
32 TEST(VariableTest, ManagerDeathTest)
35 EXPECT_B2FATAL(Manager::Instance().getVariable(
"THISDOESNTEXIST"));
38 const Manager::Var* pvar = Manager::Instance().getVariable(
"p");
39 EXPECT_TRUE(pvar !=
nullptr);
42 const Manager::Var* daughterProductP = Manager::Instance().getVariable(
"daughterProductOf(p)");
43 EXPECT_TRUE(daughterProductP !=
nullptr);
45 const Manager::Var* daughterSumP = Manager::Instance().getVariable(
"daughterSumOf(p)");
46 EXPECT_TRUE(daughterSumP !=
nullptr);
48 const Manager::Var* daughter1P = Manager::Instance().getVariable(
"daughter(1, p)");
49 EXPECT_TRUE(daughter1P !=
nullptr);
51 const Manager::Var* extraInfo = Manager::Instance().getVariable(
"extraInfo(signalProbability)");
52 EXPECT_TRUE(extraInfo !=
nullptr);
54 const Manager::Var* nested = Manager::Instance().getVariable(
"daughterSumOf(daughter(1, extraInfo(signalProbability)))");
55 EXPECT_TRUE(nested !=
nullptr);
57 EXPECT_B2FATAL(Manager::Instance().getVariable(
"funcDoesNotExist(p)"));
59 EXPECT_B2FATAL(Manager::Instance().getVariable(
"daughterSumOf(daughter(1, ExtraInfoWrongName(signalProbability)))"));
62 auto vec = Manager::Instance().resolveCollections({
"myCollection"});
63 EXPECT_EQ(vec.size(), 1);
64 EXPECT_EQ(vec[0],
"myCollection");
65 EXPECT_TRUE(Manager::Instance().addCollection(
"myCollection", {
"p",
"px",
"py",
"pz"}));
67 auto vec2 = Manager::Instance().resolveCollections({
"myCollection"});
68 EXPECT_EQ(vec2.size(), 4);
69 EXPECT_EQ(vec2[0],
"p");
70 EXPECT_EQ(vec2[1],
"px");
71 EXPECT_EQ(vec2[2],
"py");
72 EXPECT_EQ(vec2[3],
"pz");
75 EXPECT_B2FATAL(Manager::Instance().getVariable(
"myAlias"));
76 Manager::Instance().addAlias(
"myAlias",
"daughterSumOf(daughter(1, extraInfo(signalProbability)))");
77 const Manager::Var* aliasDoesExists = Manager::Instance().getVariable(
"myAlias");
78 EXPECT_TRUE(aliasDoesExists !=
nullptr);
81 auto& vm = Manager::Instance();
82 EXPECT_TRUE(vm.addAlias(
"myAliasAlias",
"myAlias"));
84 EXPECT_EQ(aliasDoesExists, vm.getVariable(
"myAliasAlias"));
87 EXPECT_TRUE(vm.addAlias(
"aliasLoop1",
"aliasLoop2"));
88 EXPECT_TRUE(vm.addAlias(
"aliasLoop2",
"aliasLoop3"));
89 EXPECT_TRUE(vm.addAlias(
"aliasLoop3",
"aliasLoop4"));
90 EXPECT_TRUE(vm.addAlias(
"aliasLoop4",
"aliasLoop1"));
91 EXPECT_B2FATAL(vm.getVariable(
"aliasLoop1"));
92 EXPECT_B2FATAL(vm.getVariable(
"aliasLoop3"));
95 EXPECT_NO_B2WARNING(Manager::Instance().addAlias(
"myAlias",
"daughterSumOf(daughter(1, extraInfo(signalProbability)))"));
97 EXPECT_B2WARNING(Manager::Instance().addAlias(
"myAlias",
"daughterSumOf(daughter(0, extraInfo(signalProbability)))"));
99 EXPECT_B2ERROR(Manager::Instance().addAlias(
"M",
"daughterSumOf(daughter(1, extraInfo(signalProbability)))"));
102 EXPECT_B2FATAL(Manager::Instance().registerVariable(
"p", (
Manager::FunctionPtr)&dummyVar,
"description"));
104 EXPECT_B2FATAL(Manager::Instance().registerVariable(
"something", (
Manager::FunctionPtr)
nullptr,
"blah"));
107 Manager::Instance().registerVariable(
"testingthedummyvar", (
Manager::FunctionPtr)&dummyVar,
"blah");
108 const Manager::Var* dummy = Manager::Instance().getVariable(
"testingthedummyvar");
109 ASSERT_NE(dummy,
nullptr);
111 EXPECT_DOUBLE_EQ(dummy->
function(
nullptr), 42.0);
114 REGISTER_VARIABLE(
"testingthedummyvar2", dummyVar,
"something else");
115 dummy = Manager::Instance().getVariable(
"testingthedummyvar2");
116 ASSERT_NE(dummy,
nullptr);
117 EXPECT_TRUE(dummy->
description ==
"something else");
118 EXPECT_DOUBLE_EQ(dummy->
function(
nullptr), 42.0);
123 dummy = Manager::Instance().getVariable(
"testingthedummyvarwithparameters(3)");
124 ASSERT_NE(dummy,
nullptr);
125 EXPECT_DOUBLE_EQ(dummy->
function(
nullptr), 3.0);
126 EXPECT_DOUBLE_EQ(Manager::Instance().getVariable(
"testingthedummyvarwithparameters(3)")->
function(
nullptr), 3.0);
127 EXPECT_DOUBLE_EQ(Manager::Instance().getVariable(
"testingthedummyvarwithparameters(3,5)")->
function(
nullptr), 8.0);
128 EXPECT_DOUBLE_EQ(Manager::Instance().getVariable(
"testingthedummyvarwithparameters(3,7,8)")->
function(
nullptr), 18.0);
132 dummy = Manager::Instance().getVariable(
"testingthedummymetavar(1 < 2)");
133 ASSERT_NE(dummy,
nullptr);
134 EXPECT_DOUBLE_EQ(dummy->
function(
nullptr), 5.0);
135 EXPECT_DOUBLE_EQ(Manager::Instance().getVariable(
"testingthedummymetavar(123)")->
function(
nullptr), 3.0);
139 REGISTER_VARIABLE(
"testingthedummyvarwithparameters2(n,m)", dummyVarWithParameters,
"something else");
140 dummy = Manager::Instance().getVariable(
"testingthedummyvarwithparameters2(4,5)");
141 ASSERT_NE(dummy,
nullptr);
142 EXPECT_DOUBLE_EQ(dummy->
function(
nullptr), 9.0);
150 EXPECT_TRUE(Manager::Instance().getVariables().size() > 0);
153 EXPECT_B2FATAL(Manager::Instance().registerVariable(
" space", (
Manager::FunctionPtr)dummyVar,
"blah"));
154 EXPECT_B2FATAL(Manager::Instance().registerVariable(
"star*", (
Manager::FunctionPtr)dummyVar,
"blah"));
155 EXPECT_B2FATAL(Manager::Instance().registerVariable(
"*", (
Manager::FunctionPtr)dummyVar,
"blah"));
158 Manager::Instance().registerVariable(
"abcdef0123945859432689_ZEFUEONHSUTNSXA", (
Manager::FunctionPtr)dummyVar,
"blah");
166 std::unique_ptr<Cut> a = Cut::compile(
"dummyvar > 1.0");
167 EXPECT_TRUE(a->check(
nullptr));
168 a = Cut::compile(
"1.0 < dummyvar <= dummyvar");
169 EXPECT_TRUE(a->check(
nullptr));
171 a = Cut::compile(
"dummyvar < 100.0");
172 EXPECT_TRUE(a->check(
nullptr));
173 a = Cut::compile(
"dummyvar <= dummyvar <= dummyvar");
174 EXPECT_TRUE(a->check(
nullptr));
176 a = Cut::compile(
"dummymetavar(123) < 100.0");
177 EXPECT_TRUE(a->check(
nullptr));
178 a = Cut::compile(
"dummymetavar(1) <= dummymetavar(1<) <= dummymetavar(1<3)");
179 EXPECT_TRUE(a->check(
nullptr));