add unit test for custom zbl() function

This commit is contained in:
Axel Kohlmeyer
2023-01-09 07:20:44 -05:00
parent 8e2f2922d6
commit 0d815a09a7

View File

@ -85,6 +85,47 @@ TEST_F(LeptonUtilsTest, substitute)
}
}
// zbl() custom function
TEST(LeptonCustomFunction, zbl)
{
Lepton::ZBLFunction zbl(1.0, 1.0, 1.0);
std::map<std::string, Lepton::CustomFunction *> functions = {std::make_pair("zbl", &zbl)};
std::map<std::string, double> variables = {std::make_pair("zi", 6), std::make_pair("zj", 6),
std::make_pair("r", 2.0)};
auto parsed = Lepton::Parser::parse("zbl(zi, zj, r)", functions);
auto zbldzi = parsed.differentiate("zi");
auto zbldzj = parsed.differentiate("zj");
auto zbldr = parsed.differentiate("r");
auto zbld2r = zbldr.differentiate("r");
double value = parsed.evaluate(variables);
ASSERT_DOUBLE_EQ(value, 0.065721538245489763);
value = zbldr.evaluate(variables);
ASSERT_DOUBLE_EQ(value, -0.15481915325334394);
variables["r"] = 1.0;
value = parsed.evaluate(variables);
ASSERT_DOUBLE_EQ(value, 1.0701488641432269);
value = zbldr.evaluate(variables);
ASSERT_DOUBLE_EQ(value, -3.6376386525054412);
variables["zi"] = 13.0;
value = parsed.evaluate(variables);
ASSERT_DOUBLE_EQ(value, 1.8430432789454971);
value = zbldr.evaluate(variables);
ASSERT_DOUBLE_EQ(value, -6.5373118484557642);
variables["zj"] = 13.0;
value = parsed.evaluate(variables);
ASSERT_DOUBLE_EQ(value, 3.1965196467438446);
value = zbldr.evaluate(variables);
ASSERT_DOUBLE_EQ(value, -11.804490148948526);
// check for unsupported derivatives
ASSERT_ANY_THROW(value = zbldzi.evaluate(variables));
ASSERT_ANY_THROW(value = zbldzj.evaluate(variables));
ASSERT_ANY_THROW(value = zbld2r.evaluate(variables));
}
/**
* This is a custom function equal to f(x,y) = 2*x*y.
*/