From 189089ac7e60c7ce7299f33f62fe63aa8d6bdb30 Mon Sep 17 00:00:00 2001 From: rajithv Date: Tue, 7 Jun 2016 22:46:27 +0530 Subject: [PATCH 1/3] Abs --- ext/symengine/symengine.c | 4 ++++ ext/symengine/symengine.h | 2 ++ ext/symengine/symengine_utils.c | 2 ++ 3 files changed, 8 insertions(+) diff --git a/ext/symengine/symengine.c b/ext/symengine/symengine.c index b247cfb..a33696b 100644 --- a/ext/symengine/symengine.c +++ b/ext/symengine/symengine.c @@ -113,6 +113,10 @@ void Init_symengine() { c_dirichlet_eta = rb_define_class_under(m_symengine, "Dirichlet_eta", c_function); c_zeta = rb_define_class_under(m_symengine, "Zeta", c_function); c_gamma = rb_define_class_under(m_symengine, "Gamma", c_function); + c_one_arg_function = rb_define_class_under(m_symengine, "OneArgFunction", c_function); + + //Abs Class + c_abs = rb_define_class_under(m_symengine, "Abs", c_function); //TrigFunction SubClasses c_sin = rb_define_class_under(m_symengine, "Sin", c_trig_function); diff --git a/ext/symengine/symengine.h b/ext/symengine/symengine.h index dfafce3..c0cfbb9 100644 --- a/ext/symengine/symengine.h +++ b/ext/symengine/symengine.h @@ -25,6 +25,8 @@ VALUE c_lambertw; VALUE c_dirichlet_eta; VALUE c_zeta; VALUE c_gamma; +VALUE c_one_arg_function; +VALUE c_abs; VALUE c_sin; VALUE c_cos; VALUE c_tan; diff --git a/ext/symengine/symengine_utils.c b/ext/symengine/symengine_utils.c index a5938c6..a3ccbf1 100644 --- a/ext/symengine/symengine_utils.c +++ b/ext/symengine/symengine_utils.c @@ -101,6 +101,8 @@ VALUE Klass_of_Basic(const basic_struct *basic_ptr) { return c_mul; case SYMENGINE_POW: return c_pow; + case SYMENGINE_ABS: + return c_abs; case SYMENGINE_SIN: return c_sin; case SYMENGINE_COS: From e4b5b62ea147d949a05eead1aee145e7b5062291 Mon Sep 17 00:00:00 2001 From: rajithv Date: Tue, 7 Jun 2016 23:42:51 +0530 Subject: [PATCH 2/3] Minor Fix --- ext/symengine/symengine.c | 1 - ext/symengine/symengine.h | 1 - 2 files changed, 2 deletions(-) diff --git a/ext/symengine/symengine.c b/ext/symengine/symengine.c index a33696b..8ca3d36 100644 --- a/ext/symengine/symengine.c +++ b/ext/symengine/symengine.c @@ -113,7 +113,6 @@ void Init_symengine() { c_dirichlet_eta = rb_define_class_under(m_symengine, "Dirichlet_eta", c_function); c_zeta = rb_define_class_under(m_symengine, "Zeta", c_function); c_gamma = rb_define_class_under(m_symengine, "Gamma", c_function); - c_one_arg_function = rb_define_class_under(m_symengine, "OneArgFunction", c_function); //Abs Class c_abs = rb_define_class_under(m_symengine, "Abs", c_function); diff --git a/ext/symengine/symengine.h b/ext/symengine/symengine.h index c0cfbb9..21259a6 100644 --- a/ext/symengine/symengine.h +++ b/ext/symengine/symengine.h @@ -25,7 +25,6 @@ VALUE c_lambertw; VALUE c_dirichlet_eta; VALUE c_zeta; VALUE c_gamma; -VALUE c_one_arg_function; VALUE c_abs; VALUE c_sin; VALUE c_cos; From 106b0527870e37d3a46af7009799e4ae01585003 Mon Sep 17 00:00:00 2001 From: rajithv Date: Wed, 8 Jun 2016 00:23:10 +0530 Subject: [PATCH 3/3] Spec for abs --- spec/functions_spec.rb | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/spec/functions_spec.rb b/spec/functions_spec.rb index 97e9f19..384f332 100644 --- a/spec/functions_spec.rb +++ b/spec/functions_spec.rb @@ -2,6 +2,26 @@ let(:pi) { SymEngine::PI } let(:e) { SymEngine::E } let(:x) { sym("x") } + let(:y) { sym("y") } + + context "Abs" do + context "with a symbol" do + subject { SymEngine::abs(x)} + it { is_expected.to be_a SymEngine::Abs } + end + context "with an integer" do + subject { SymEngine::abs(SymEngine(1))} + it { is_expected.to be_a SymEngine::Integer } + end + context "with a symbol addition" do + subject { SymEngine::abs(x+y) } + it { is_expected.to be_a SymEngine::Abs } + end + context "with a function of a symbol" do + subject { SymEngine::abs(SymEngine::sin(x)) } + it { is_expected.to be_a SymEngine::Abs } + end + end context '2*x' do [