Sha256: 410e82b7aab6fadc626c6e98de0811a924166ce52518a73089180ea69031bf0b

Contents?: true

Size: 1.67 KB

Versions: 52

Compression:

Stored size: 1.67 KB

Contents

describe :kernel_instance_callcc, :shared => true do
  it "is a private method" do
    Kernel.should have_private_instance_method(:callcc)
  end
end

describe :kernel_callcc, :shared => true do
  it "is possible to exit a loop like a break" do
    i = 0
    @object.callcc do |x|
      loop do
        i += 1
        x.call() if i == 5
      end
    end.should == nil
    i.should == 5
  end

  it "is possible to call a continuation multiple times" do
    i = 0
    cont = nil
    @cont = nil
    @object.callcc {|cont| @cont = cont}
    i += 1
    @cont.call() if i < 5
    i.should == 5
  end

  it "returns the results of a block if continuation is not called" do
    cont = nil
    a = @object.callcc {|cont| 0}
    a.should == 0
  end

  it "returns the results of continuation once called" do
    cont = nil
    @cont = nil
    a = @object.callcc {|cont| @cont = cont; 0}
    @cont.call(1) if a == 0
    a.should == 1
  end

  it "returns the arguments to call" do
    @object.callcc {|cont| cont.call }.should == nil
    @object.callcc {|cont| cont.call 1 }.should == 1
    @object.callcc {|cont| cont.call 1,2,3 }.should == [1,2,3]
  end

  it "preserves changes to block-local scope" do
    i = "before"
    cont = @object.callcc { |c| c }
    if cont # nil the second time
      i = "after"
      cont.call
    end
    i.should == "after"
  end

  it "preserves changes to method-local scope" do
    # This spec tests that a continuation shares the same locals
    # tuple as the scope that created it.
    KernelSpecs.before_and_after.should == "after"
  end

  it "raises a LocalJumpError if callcc is not given a block" do
    lambda { @object.callcc }.should raise_error(LocalJumpError)
  end
end

Version data entries

52 entries across 52 versions & 2 rubygems

Version Path
rhodes-7.6.0 spec/framework_spec/app/spec/shared/kernel/callcc.rb
rhodes-7.5.1 spec/framework_spec/app/spec/shared/kernel/callcc.rb
rhodes-7.4.1 spec/framework_spec/app/spec/shared/kernel/callcc.rb
rhodes-7.1.17 spec/framework_spec/app/spec/shared/kernel/callcc.rb
rhodes-6.2.0 spec/framework_spec/app/spec/shared/kernel/callcc.rb
rhodes-6.0.11 spec/framework_spec/app/spec/shared/kernel/callcc.rb
rhodes-5.5.18 spec/framework_spec/app/spec/shared/kernel/callcc.rb
rhodes-5.5.17 spec/framework_spec/app/spec/shared/kernel/callcc.rb
rhodes-5.5.15 spec/framework_spec/app/spec/shared/kernel/callcc.rb
rhodes-5.5.0.22 spec/framework_spec/app/spec/shared/kernel/callcc.rb
rhodes-5.5.2 spec/framework_spec/app/spec/shared/kernel/callcc.rb
rhodes-5.5.0.7 spec/framework_spec/app/spec/shared/kernel/callcc.rb
rhodes-5.5.0.3 spec/framework_spec/app/spec/shared/kernel/callcc.rb
rhodes-5.5.0 spec/framework_spec/app/spec/shared/kernel/callcc.rb
tauplatform-1.0.3 spec/framework_spec/app/spec/shared/kernel/callcc.rb
tauplatform-1.0.2 spec/framework_spec/app/spec/shared/kernel/callcc.rb
tauplatform-1.0.1 spec/framework_spec/app/spec/shared/kernel/callcc.rb
rhodes-3.5.1.12 spec/framework_spec/app/spec/shared/kernel/callcc.rb
rhodes-3.3.5 spec/framework_spec/app/spec/shared/kernel/callcc.rb
rhodes-3.4.2 spec/framework_spec/app/spec/shared/kernel/callcc.rb