module Chervil RSpec.describe AST::Conditional do it 'returns the true branch given #t' do expect(AST::Conditional.new( AST::Boolean.new(true), AST::Number.new(1.0), AST::Number.new(0.0), ).evaluate(Env.new)).to eq( 1.0 ) end it 'returns the false branch given #f' do expect(AST::Conditional.new( AST::Boolean.new(false), AST::Number.new(1.0), AST::Number.new(0.0), ).evaluate(Env.new)).to eq( 0.0 ) end it 'evaluates complex predicates' do expect(AST::Conditional.new( AST::List.new( [ AST::Identifier.new(">"), AST::Number.new(2.0), AST::Number.new(1.0), ] ), AST::Number.new(2.0), AST::Number.new(1.0), ).evaluate(Env.new)).to eq( 2.0 ) end it 'evaluates complex branches' do expect(AST::Conditional.new( AST::Boolean.new(true), AST::List.new( [ AST::Identifier.new("+"), AST::Number.new(2.0), AST::Number.new(1.0), ] ), AST::Number.new(0.0) ).evaluate(Env.new)).to eq( 3.0 ) end end end