examples/general/calc_iter2/spec/calculator_spec.rb in rley-0.7.07 vs examples/general/calc_iter2/spec/calculator_spec.rb in rley-0.7.08

- old
+ new

@@ -15,17 +15,17 @@ def expect_expr(anExpression) # Create a Rley facade object engine = Rley::Engine.new do |cfg| cfg.repr_builder = CalcASTBuilder end - + engine.use_grammar(CalcGrammar) raw_result = parse_expression(engine, anExpression) ast = engine.to_ptree(raw_result) return expect(ast.root.interpret) end - + def parse_expression(anEngine, anExpression) lexer = CalcLexer.new(anExpression) result = anEngine.parse(lexer.tokens) unless result.success? @@ -38,11 +38,11 @@ return result end context 'Parsing valid expressions' do let(:epsilon) { 0.0000000001 } - + it 'should evaluate simple integer literals' do expect_expr('2').to eq(2) end it 'should evaluate simple floating-point literals' do @@ -70,22 +70,22 @@ end it 'should evaluate the pi constant' do expect_expr('PI').to eq(3.141592653589793) end - + it 'should evaluate the negated pi constant' do expect_expr('-PI').to eq(-3.141592653589793) - end + end it "should evaluate Neper's e constant" do expect_expr('E').to eq(2.718281828459045) end - + it "should evaluate negated Neper's e constant" do expect_expr('-E').to eq(-2.718281828459045) - end + end it 'should evaluate integer addition' do expect_expr('2 + 2').to eq(4) end @@ -154,11 +154,11 @@ end it 'should evaluate multiple levels of parentheses' do expect_expr('2*(1/(1+3))').to eq(0.5) end - + # Some special functions it 'should evaluate square root of expressions' do expect_expr('sqrt(0)').to eq(0) expect_expr('sqrt(1)').to eq(1) expect_expr('sqrt(1 + 1)').to eq(Math.sqrt(2)) @@ -168,71 +168,71 @@ it 'should evaluate cubic root of expressions' do expect_expr('cbrt(0)').to eq(0) expect_expr('cbrt(1)').to eq(1) expect_expr('cbrt(1 + 1)').to eq(Math.cbrt(2)) expect_expr('cbrt(5 * 5 * 5)').to eq(5) - end + end it 'should evaluate exponential of expressions' do - expect_expr('exp(-1)').to eq(1 / Math::E) + expect_expr('exp(-1)').to eq(1 / Math::E) expect_expr('exp(0)').to eq(1) expect_expr('exp(1)').to eq(Math::E) expect_expr('exp(2)').to be_within(epsilon).of(Math::E * Math::E) end it 'should evaluate natural logarithm of expressions' do - expect_expr('ln(1/E)').to eq(-1) - expect_expr('ln(1)').to eq(0) + expect_expr('ln(1/E)').to eq(-1) + expect_expr('ln(1)').to eq(0) expect_expr('ln(E)').to eq(1) expect_expr('ln(E * E)').to eq(2) - end + end it 'should evaluate the logarithm base 10 of expressions' do - expect_expr('log(1/10)').to eq(-1) - expect_expr('log(1)').to eq(0) + expect_expr('log(1/10)').to eq(-1) + expect_expr('log(1)').to eq(0) expect_expr('log(10)').to eq(1) expect_expr('log(10 * 10 * 10)').to eq(3) - end - + end + # Trigonometric functions - + it 'should compute the sinus of an expression' do expect_expr('sin(0)').to eq(0) expect_expr('sin(PI/6)').to be_within(epsilon).of(0.5) expect_expr('sin(PI/2)').to eq(1) end - + it 'should compute the cosinus of an expression' do expect_expr('cos(0)').to eq(1) expect_expr('cos(PI/3)').to be_within(epsilon).of(0.5) expect_expr('cos(PI/2)').to be_within(epsilon).of(0) - end + end it 'should compute the tangent of an expression' do expect_expr('tan(0)').to eq(0) expect_expr('tan(PI/4)').to be_within(epsilon).of(1) expect_expr('tan(5*PI/12)').to be_within(epsilon).of(2 + Math.sqrt(3)) - end - + end + # Inverse trigonometric functions - + it 'should compute the arcsinus of an expression' do expect_expr('asin(0)').to eq(0) expect_expr('asin(0.5)').to be_within(epsilon).of(Math::PI / 6) expect_expr('asin(1)').to eq(Math::PI / 2) end - + it 'should compute the arccosinus of an expression' do expect_expr('acos(1)').to eq(0) expect_expr('acos(0.5)').to be_within(epsilon).of(Math::PI / 3) expect_expr('acos(0)').to be_within(epsilon).of(Math::PI / 2) - end + end it 'should compute the tangent of an expression' do expect_expr('atan(0)').to eq(0) pi = Math::PI expect_expr('atan(1)').to be_within(epsilon).of(pi / 4) expect_expr('atan(2 + sqrt(3))').to be_within(epsilon).of(5 * pi / 12) - end + end end # context end # describe # End of file