summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-objectspace/test
diff options
context:
space:
mode:
Diffstat (limited to 'mrbgems/mruby-objectspace/test')
-rw-r--r--mrbgems/mruby-objectspace/test/objectspace.rb73
1 files changed, 70 insertions, 3 deletions
diff --git a/mrbgems/mruby-objectspace/test/objectspace.rb b/mrbgems/mruby-objectspace/test/objectspace.rb
index 60626e6bf..610cdfbfa 100644
--- a/mrbgems/mruby-objectspace/test/objectspace.rb
+++ b/mrbgems/mruby-objectspace/test/objectspace.rb
@@ -123,15 +123,82 @@ assert 'ObjectSpace.memsize_of' do
assert_not_equal m_size, 0, 'method size not zero'
# collections
- assert_not_equal ObjectSpace.memsize_of([]), 0, 'empty array size not zero'
- assert_not_equal ObjectSpace.memsize_of(Array.new(16)), 0, 'array size not zero'
+ empty_array_size = ObjectSpace.memsize_of []
+ assert_not_equal empty_array_size, 0, 'empty array size not zero'
+ assert_operator empty_array_size, :<, ObjectSpace.memsize_of(Array.new(16)), 'large array size greater than embed'
# fiber
- assert_not_equal ObjectSpace.memsize_of(Fiber.new {}), 0, 'fiber not zero'
+ empty_fiber_size = ObjectSpace.memsize_of(Fiber.new {})
+ assert_not_equal empty_fiber_size, 0, 'empty fiber not zero'
+ assert_operator empty_fiber_size, :<, ObjectSpace.memsize_of(Fiber.new { yield; 1 }), 'Fiber code size growth'
#hash
assert_not_equal ObjectSpace.memsize_of({}), 0, 'empty hash size not zero'
# recursion
+ foo_str = 'foo' * 10
+ bar_str = 'bar' * 10
+ caz_str = 'caz' * 10
+ fbc_ary = [foo_str, bar_str, caz_str]
+ assert_operator ObjectSpace.memsize_of(fbc_ary),
+ :<,
+ ObjectSpace.memsize_of(fbc_ary, recurse: true),
+ 'basic array recursion'
+
+ big_ary = [ 'a' * 10,
+ [ 'b' * 10,
+ [ 'c' * 10,
+ [ 'd' * 10,
+ [ 'e' * 10,
+ [ 'f' * 10,
+ ['g' * 10]
+ ] * 10,
+ ] * 10,
+ ] * 10,
+ ] * 10,
+ ] * 10,
+ ] * 10
+ assert_operator ObjectSpace.memsize_of(big_ary),
+ :<,
+ ObjectSpace.memsize_of(big_ary, recurse: true),
+ 'large array recursion'
+
+ assert_nothing_raised 'infinite array recursion' do
+ ObjectSpace.memsize_of(fbc_ary.push(fbc_ary))
+ end
+
+ basic_hsh = {a: [foo_str, bar_str], b: caz_str, 'c' => {}}
+ assert_operator ObjectSpace.memsize_of(basic_hsh),
+ :<,
+ ObjectSpace.memsize_of(basic_hsh, recurse: true),
+ 'hash recursion with basic keys'
+
+ weird_keys = {big_ary => foo_str}
+ assert_operator ObjectSpace.memsize_of(weird_keys),
+ :<,
+ ObjectSpace.memsize_of(weird_keys, recurse: true),
+ 'hash recursion with collection as key'
+
+ basic_hsh.store('d', basic_hsh)
+ assert_nothing_raised 'hash value recursion' do
+ ObjectSpace.memsize_of basic_hsh, recurse: true
+ end
+
+ foo_klass = Class.new do
+ def bar= b
+ @bar = b
+ end
+ end
+ fk_one = foo_klass.new
+ fk_one.bar = fbc_ary
+ assert_operator ObjectSpace.memsize_of(fk_one),
+ :<,
+ ObjectSpace.memsize_of(fk_one, recurse: true),
+ 'basic ivar recursion'
+
+ fk_one.bar = fk_one
+ assert_nothing_raised 'ivar infinite recursion' do
+ ObjectSpace.memsize_of(fk_one, recurse: true)
+ end
end