Sha256: 703fbfeba01ff1c34d56a32e445f6bdfadbfe0e761dbf7132ddfb3598b086448

Contents?: true

Size: 1.63 KB

Versions: 1

Compression:

Stored size: 1.63 KB

Contents

require File.dirname(__FILE__) + '/../../spec_helper'

describe "Standard Library" do
  describe "lambda" do
    before :each do
      @interpreter = Flea::Interpreter.new
      @old_stdout = $stdout
      @buffer = StringIO.new
      $stdout = @buffer
    end
    
    after :each do
      $stdout = @old_stdout
    end
    
    it "should create a lambda that takes no arguments" do
      result = @interpreter.run('
        (lambda () ())
      ')
      result.should be_a Proc
    end

    it "should create and execute a lambda that takes no arguments" do
      result = @interpreter.run('
        ((lambda () 
          (display 1)))
      ')
      result.should == 1
    end
    
    it "should create a lambda that takes a single argument" do
      result = @interpreter.run('
        (lambda a ())
      ')
      result.should be_a Proc
    end
    
    it "should take list as single argument" do
      result = @interpreter.run('
        ((lambda a
          (display a)) 1 2 3)
      ')
      result.should == [1, 2, 3]
    end
    
    it "should create a lambda that takes multiple arguments" do
      result = @interpreter.run('
        (lambda (a b c) ())
      ')
      result.should be_a Proc
    end
    
    it "should create aand execute a lambda that takes multiple arguments" do
      result = @interpreter.run('
        ((lambda (a b c)
          (display (+ a b c))) 1 2 3)
      ')
      result.should == 6
    end
    
    it "should raise an error when lamda is defined using same argument name more than once" do
      lambda {
        @interpreter.run('
          (lambda (a a a) ())
        ')
      }.should raise_error
    end
    
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
flea-0.1.0 spec/flea/standard_library/lambda_spec.rb