From 511bddd401eb9fa1e9f5ebdaff5a28787b62ccf9 Mon Sep 17 00:00:00 2001 From: rakhimov Date: Mon, 24 Apr 2017 19:34:23 -0700 Subject: [PATCH] Add sin expression Issue #72 --- share/input.rng | 3 +++ src/expression/numerical.h | 5 +++++ src/initializer.cc | 3 ++- tests/expression_tests.cc | 11 +++++++++++ tests/input/fta/correct_expressions.xml | 5 +++++ 5 files changed, 26 insertions(+), 1 deletion(-) diff --git a/share/input.rng b/share/input.rng index fb3131b701..5aac8db5be 100644 --- a/share/input.rng +++ b/share/input.rng @@ -727,6 +727,9 @@ + + + diff --git a/src/expression/numerical.h b/src/expression/numerical.h index 1f501a3ac5..8e5bef7927 100644 --- a/src/expression/numerical.h +++ b/src/expression/numerical.h @@ -76,6 +76,10 @@ template <> inline Interval GetInterval>(Expression* /*arg*/) { return Interval::closed(-1, 1); } +template <> +inline Interval GetInterval>(Expression* /*arg*/) { + return Interval::closed(-1, 1); +} /// @} using Neg = NaryExpression, 1>; ///< Negation. @@ -88,6 +92,7 @@ using Acos = FunctorExpression<&std::acos>; ///< Arc cosine. using Asin = FunctorExpression<&std::asin>; ///< Arc sine. using Atan = FunctorExpression<&std::atan>; ///< Arc tangent. using Cos = FunctorExpression<&std::cos>; ///< Cosine. +using Sin = FunctorExpression<&std::sin>; ///< Sine. } // namespace mef } // namespace scram diff --git a/src/initializer.cc b/src/initializer.cc index 27ead85552..eb56586c46 100644 --- a/src/initializer.cc +++ b/src/initializer.cc @@ -808,7 +808,8 @@ const Initializer::ExtractorMap Initializer::kExpressionExtractors_ = { {"acos", &Extract}, {"asin", &Extract}, {"atan", &Extract}, - {"cos", &Extract}}; + {"cos", &Extract}, + {"sin", &Extract}}; Expression* Initializer::GetExpression(const xmlpp::Element* expr_element, const std::string& base_path) { diff --git a/tests/expression_tests.cc b/tests/expression_tests.cc index a118869a8a..4800d73207 100644 --- a/tests/expression_tests.cc +++ b/tests/expression_tests.cc @@ -791,6 +791,17 @@ TEST(ExpressionTest, Cos) { EXPECT_TRUE(Interval::closed(-1, 1) == dev->interval()) << dev->interval(); } +TEST(ExpressionTest, Sin) { + OpenExpression arg_one(0); + std::unique_ptr dev; + ASSERT_NO_THROW(dev = std::make_unique(&arg_one)); + EXPECT_DOUBLE_EQ(0, dev->value()); + arg_one.mean = 0.5 * ConstantExpression::kPi.value(); + EXPECT_DOUBLE_EQ(1, dev->value()); + + EXPECT_TRUE(Interval::closed(-1, 1) == dev->interval()) << dev->interval(); +} + } // namespace test } // namespace mef } // namespace scram diff --git a/tests/input/fta/correct_expressions.xml b/tests/input/fta/correct_expressions.xml index 03e6531192..2e5158ed8d 100644 --- a/tests/input/fta/correct_expressions.xml +++ b/tests/input/fta/correct_expressions.xml @@ -212,5 +212,10 @@ The input tries to utilize all the functionality including optional cases. + + + + +