module Chervil RSpec.describe AST::List do it 'evaluates addition' do env = Env.new expect( AST::List.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::List.new( [ AST::Identifier.new('+'), AST::List.new( [ AST::Identifier.new('+'), AST::Number.new(1.0), AST::Number.new(2.0) ] ), AST::List.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::List.new([AST::Identifier.new("x")]) .evaluate(env)) .to eq(Error.new("Unbound variable x")) end end end