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::Application.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::Application.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