summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-objectspace/test
diff options
context:
space:
mode:
authorRory O'Connell <[email protected]>2020-07-14 23:30:35 -0700
committerRory O'Connell <[email protected]>2020-07-14 23:30:35 -0700
commit4d32c671a70cd066010cf502ab13ab8f78357d0e (patch)
tree593102a45f6bd4580917e6d6c8f718b9686edadb /mrbgems/mruby-objectspace/test
parent0e5394638bd6f8fa8c52fa4f75c4c1799adb70e0 (diff)
downloadmruby-4d32c671a70cd066010cf502ab13ab8f78357d0e.tar.gz
mruby-4d32c671a70cd066010cf502ab13ab8f78357d0e.zip
Finishing out memsize_of recursion
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