Ruby shared_ptr testing enhancements
li_boost_shared_ptr_runme.rb: add garbage collection to properly check expected reference counts
This commit is contained in:
parent
2506ccd4f4
commit
f5a6e94466
1 changed files with 41 additions and 9 deletions
|
|
@ -1,5 +1,7 @@
|
|||
require 'li_boost_shared_ptr'
|
||||
require 'swig_gc'
|
||||
|
||||
#debug = $VERBOSE
|
||||
debug = false
|
||||
|
||||
# simple shared_ptr usage - created in C++
|
||||
|
|
@ -21,9 +23,18 @@ class Li_boost_shared_ptr_runme
|
|||
end
|
||||
|
||||
# Expect 1 instance - the one global variable (GlobalValue)
|
||||
if (Li_boost_shared_ptr::Klass.getTotal_count() != 1)
|
||||
# raise RuntimeError, "Klass.total_count=#{Li_boost_shared_ptr::Klass.getTotal_count()}"
|
||||
puts "Klass.total_count=#{Li_boost_shared_ptr::Klass.getTotal_count()}"
|
||||
GC.track_class = Li_boost_shared_ptr::Klass
|
||||
invokeGC("Final GC")
|
||||
|
||||
# Actual count is 3 due to memory leaks calling rb_raise in the call to Li_boost_shared_ptr::valuetest(nil)
|
||||
# as setjmp/longjmp are used thereby failing to call destructors of Klass instances on the stack in _wrap_valuetest
|
||||
# This is a generic problem in Ruby wrappers, not shared_ptr specific
|
||||
# expectedCount = 1
|
||||
expectedCount = 3
|
||||
actualCount = Li_boost_shared_ptr::Klass.getTotal_count()
|
||||
if (actualCount != expectedCount)
|
||||
# raise RuntimeError, "GC failed to run (li_boost_shared_ptr). Expected count: #{expectedCount} Actual count: #{actualCount}"
|
||||
puts "GC failed to run (li_boost_shared_ptr). Expected count: #{expectedCount} Actual count: #{actualCount}"
|
||||
end
|
||||
|
||||
wrapper_count = Li_boost_shared_ptr::shared_ptr_wrapper_count()
|
||||
|
|
@ -39,6 +50,13 @@ class Li_boost_shared_ptr_runme
|
|||
end
|
||||
end
|
||||
|
||||
def invokeGC(debug_msg)
|
||||
puts "invokeGC #{debug_msg} start" if $VERBOSE
|
||||
GC.stats if $VERBOSE
|
||||
GC.start
|
||||
puts "invokeGC #{debug_msg} end" if $VERBOSE
|
||||
end
|
||||
|
||||
def runtest
|
||||
# simple shared_ptr usage - created in C++
|
||||
k = Li_boost_shared_ptr::Klass.new("me oh my")
|
||||
|
|
@ -354,7 +372,10 @@ class Li_boost_shared_ptr_runme
|
|||
self.verifyCount(3, kmember)
|
||||
self.verifyCount(3, k)
|
||||
|
||||
puts "del m"
|
||||
GC.track_class = Li_boost_shared_ptr::MemberVariables
|
||||
m = nil
|
||||
invokeGC("m = nil (A)")
|
||||
|
||||
self.verifyCount(2, kmember)
|
||||
self.verifyCount(2, k)
|
||||
|
||||
|
|
@ -372,7 +393,9 @@ class Li_boost_shared_ptr_runme
|
|||
self.verifyCount(2, kmember)
|
||||
self.verifyCount(2, k)
|
||||
|
||||
puts "del m"
|
||||
m = nil
|
||||
invokeGC("m = nil (B)")
|
||||
|
||||
self.verifyCount(2, kmember)
|
||||
self.verifyCount(2, k)
|
||||
|
||||
|
|
@ -398,7 +421,10 @@ class Li_boost_shared_ptr_runme
|
|||
self.verifyCount(4, kmember)
|
||||
self.verifyCount(4, k)
|
||||
|
||||
puts "del m"
|
||||
m = nil
|
||||
invokeGC("m = nil (C)")
|
||||
|
||||
|
||||
self.verifyCount(3, kmemberVal)
|
||||
self.verifyCount(3, kmember)
|
||||
self.verifyCount(3, k)
|
||||
|
|
@ -417,7 +443,9 @@ class Li_boost_shared_ptr_runme
|
|||
self.verifyCount(1, kmember)
|
||||
self.verifyCount(1, k)
|
||||
|
||||
puts "del m"
|
||||
m = nil
|
||||
invokeGC("m = nil (D)")
|
||||
|
||||
self.verifyCount(1, kmember)
|
||||
self.verifyCount(1, k)
|
||||
|
||||
|
|
@ -435,7 +463,9 @@ class Li_boost_shared_ptr_runme
|
|||
self.verifyCount(1, kmember)
|
||||
self.verifyCount(1, k)
|
||||
|
||||
puts "del m"
|
||||
m = nil
|
||||
invokeGC("m = nil (E)")
|
||||
|
||||
self.verifyCount(1, kmember)
|
||||
self.verifyCount(1, k)
|
||||
|
||||
|
|
@ -453,7 +483,9 @@ class Li_boost_shared_ptr_runme
|
|||
self.verifyCount(1, kmember)
|
||||
self.verifyCount(1, k)
|
||||
|
||||
puts "del m"
|
||||
m = nil
|
||||
invokeGC("m = nil (F)")
|
||||
|
||||
self.verifyCount(1, kmember)
|
||||
self.verifyCount(1, k)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue