1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- 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
|