module Chervil RSpec.describe AST::Application do it 'evaluates addition' do env = Env.new expect( AST::Application.new( AST::Identifier.new('+'), [AST::Number.new(1.0), AST::Number.new(2.0)] ) .evaluate(env) ).to eq(3.0) end it 'evaluates nested arithmetic' do env = Env.new expect( AST::Application.new( AST::Identifier.new('+'), [ AST::Application.new( AST::Identifier.new('+'), [AST::Number.new(1.0), AST::Number.new(2.0)] ), AST::Application.new( AST::Identifier.new('+'), [AST::Number.new(3.0), AST::Number.new(4.0)] ) ] ) .evaluate(env) ).to eq(10.0) end it 'returns an error if the function is not defined' do env = Env.new expect(AST::Application.new(AST::Identifier.new("x"), []).evaluate(env)).to eq( Error.new("Unbound variable x") ) end end end