9 #include "gtest/gtest.h"
11 #include "boost/smart_ptr.hpp"
12 #include "boost/tuple/tuple.hpp"
13 #include "boost/variant/get.hpp"
14 #include "boost/variant/variant.hpp"
23 double value = boost::get<double>(args[0]);
24 if (value < 0.0)
return boost::make_tuple(0.0,
false);
25 return boost::make_tuple(
sqrt(value),
true);
33 double base = boost::get<double>(args[0]);
34 double exponent = boost::get<double>(args[1]);
35 return boost::make_tuple(
pow(base, exponent),
true);
40 class FromFileExpressionTest :
public ::testing::Test {
43 FromFileExpressionTest() {
47 virtual ~FromFileExpressionTest() {
54 virtual void SetUp() {
59 virtual void TearDown() {
66 TEST_F(FromFileExpressionTest, EvaluateFromFileExpression) {
69 double expected = 0.3126 + 0.3561 + 0.4242;
74 funcs.insert(std::pair<std::string, client::function::type>
77 std::string testexpr =
"fromFile(\"resources/fromfile_test.dat\")";
78 boost::scoped_ptr<Expression>
e(
new Expression(testexpr, funcs));
81 result =
e->evaluate(vars);
84 ASSERT_NEAR(expected, boost::get<0>(result), 1
e-6);
85 ASSERT_TRUE(boost::get<1>(result));
88 TEST_F(FromFileExpressionTest, EvaluateCombinedFromFileExpression) {
91 double expected =
sqrt(
pow(0.3126 + 0.3561 + 0.4242, 2) +
pow(0.1263 - 0.5613 + 0.2424, 2));
96 funcs.insert(std::pair<std::string, client::function::type>
99 sqrt_func = my_sqrt();
100 funcs.insert(std::pair<std::string, client::function::type>
101 (
"sqrt", sqrt_func));
104 funcs.insert(std::pair<std::string, client::function::type>
107 std::string testexpr =
"sqrt(pow(fromFile(\"resources/fromfile_test.dat\"), 2) + "
108 "pow(fromFile(\"resources/fromfile_test2.dat\"), 2))";
109 boost::scoped_ptr<Expression>
e(
new Expression(testexpr, funcs));
112 result =
e->evaluate(vars);
115 ASSERT_NEAR(expected, boost::get<0>(result), 1
e-6);
116 ASSERT_TRUE(boost::get<1>(result));
121 int main(
int argc,
char **argv) {
122 ::testing::InitGoogleTest(&argc, argv);
123 return RUN_ALL_TESTS();
constexpr double e
The value of .
Expression to be evaluated in the framework.
boost::tuple< double, bool > Result_t
std::vector< argument_t > arguments_t
Tps< T > pow(const Tps< T > &x, int y)
Integer power.
Tps< T > sqrt(const Tps< T > &x)
Square root.
int main(int argc, char *argv[])
boost::function< boost::tuple< double, bool >arguments_t)> type
double FromFile(std::string file, const std::vector< double > &referencePoint)
std::map< std::string, double > variableDictionary_t
std::map< std::string, client::function::type > functionDictionary_t