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.
+
+
+
+
+