Sha256: ce91b9095749ab9a1af7343b98f86f2d84b4317218ef29bd06366d69bbe4826a

Contents?: true

Size: 1.61 KB

Versions: 2

Compression:

Stored size: 1.61 KB

Contents

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

def get_refcnt(pobject)
  raise 'Cannot work with a nil object' if pobject.nil?

  if pobject.kind_of? RubyPython::RubyPyProxy
    pobject = pobject.pObject.pointer
  elsif pobject.kind_of? RubyPython::PyObject
    pobject = pobject.pointer
  end
  struct = RubyPython::Python::PyObjectStruct.new pobject
  struct[:ob_refcnt]
end

include TestConstants

describe 'Reference Counting' do

  before :all do
    RubyPython.start
    @sys = RubyPython.import 'sys'
    @sys.path.append './spec/python_helpers'
    @objects = RubyPython.import 'objects'
  end

  after :all do
    RubyPython.stop
  end

  it "should be one for a new object" do
    pyObj = @objects.RubyPythonMockObject.new
    get_refcnt(pyObj).should == 1
  end

  it "should increase when a new reference is passed into Ruby" do
    pyObj = @objects.RubyPythonMockObject
    refcnt = get_refcnt(pyObj)
    pyObj2 = @objects.RubyPythonMockObject
    get_refcnt(pyObj).should == (refcnt + 1)
  end

  describe RubyPython::PyObject do

    describe "#xIncref" do
      it "should increase the reference count" do
        pyObj = @objects.RubyPythonMockObject.new
        refcnt = get_refcnt(pyObj)
        pyObj.pObject.xIncref
        get_refcnt(pyObj).should == refcnt + 1
      end
    end

    describe "#xDecref" do
      it "should decrease the reference count" do
        pyObj = @objects.RubyPythonMockObject.new
        pyObj.pObject.xIncref
        refcnt = get_refcnt(pyObj)
        pointer = pyObj.pObject.pointer
        pyObj.pObject.xDecref
        get_refcnt(pointer).should == refcnt - 1
      end
    end

  end


end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rubypython-0.3.1 spec/refcnt_spec.rb
rubypython-0.3.0 spec/refcnt_spec.rb