Skip to content

Commit

Permalink
fix neg sign
Browse files Browse the repository at this point in the history
  • Loading branch information
eltony81 committed May 24, 2023
1 parent 74e8c0f commit 2bcdc1d
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 2 deletions.
16 changes: 16 additions & 0 deletions spec/eeeval_spec.cr
Original file line number Diff line number Diff line change
Expand Up @@ -258,4 +258,20 @@ describe EEEval::CalcFuncParser do
val2.should eq(0.022222222222222223)
end
end

describe "#evaluate", tags: "acos" do
it "Calculate expression with acos" do
expression = "cos(2) + acos(-1)"
val1 = EEEval::CalcFuncParser.evaluate(expression).to_f
val1.should eq(2.7254458170426505)
end
end

describe "#evaluate", tags: "negative" do
it "Calculate expression with negative value" do
expression = "-0.4161468365471424+3.141592653589793"
val1 = EEEval::CalcFuncParser.evaluate(expression).to_f
val1.should eq(2.7254458170426505)
end
end
end
5 changes: 4 additions & 1 deletion src/eeeval.cr
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@ module EEEval
end

class CalcParser

def self.clear_expression(expression)
Log.trace {"clearing expression #{expression}"}
expression = expression.delete(" ").gsub("+-", "-").gsub("-+", "-").gsub("--", "+").gsub("++", "+")
expression = expression.gsub(/(?<=\()\-/, "0-").gsub(/(?<=\()\+/, "0+").gsub(/^\-/, "0-").gsub(/^\+/, "0+")
raise Exception.new("malformed expression: check parentheeses") if(expression.count('(') != expression.count(')'))
Expand Down Expand Up @@ -53,7 +55,7 @@ module EEEval
def self.evaluate_expr(expression)
expression = convert_scinot(expression)
expression = convert_multdiv_sign(expression)
expression = expression.gsub("+-", "-").gsub("-+", "-").gsub("--", "+").gsub("++", "+")
expression = clear_expression(expression)
Log.trace { "evaluate_expr: #{expression}" }
value = ""
unless (expression.to_f?)
Expand All @@ -72,6 +74,7 @@ module EEEval

class CalcFuncParser
def self.evaluate(expression)
Log.trace {" INIT evaluation"}
expression = CalcParser.clear_expression(expression)
unless (expression.to_f?)
MathFuncResolver.evaluate(expression)
Expand Down
2 changes: 1 addition & 1 deletion src/eval/math_func_resolver.cr
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ module EEEval
replaces = Hash(String, Float64).new

{% for mfunc in funcs %}
expression.scan(/(?<={{mfunc.id}})\([\d+\s\)\(\*\-\+\/\^\.]*/) do |md|
expression.scan(/(?<=\b{{mfunc.id}}\b)\([\d+\s\)\(\*\-\+\/\^\.]*/) do |md|
expr = search_expr(md[0])
expr.try do |expr|
key = "{{mfunc.id}}(#{expr})"
Expand Down

0 comments on commit 2bcdc1d

Please sign in to comment.