summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-objectspace/test/objectspace.rb
diff options
context:
space:
mode:
authorRory OConnell <[email protected]>2020-07-09 18:52:31 -0700
committerRory OConnell <[email protected]>2020-07-09 18:52:31 -0700
commit338c8538c92a1f3c4117fb920855a610cfaefc25 (patch)
treeaa1498108325d3a5e06323d83d128a1db8d84862 /mrbgems/mruby-objectspace/test/objectspace.rb
parent81fc5ff48a79c75a7761e1028092b52ad2753cea (diff)
downloadmruby-338c8538c92a1f3c4117fb920855a610cfaefc25.tar.gz
mruby-338c8538c92a1f3c4117fb920855a610cfaefc25.zip
Initial ObjectSpace.memsize_of implementation
Diffstat (limited to 'mrbgems/mruby-objectspace/test/objectspace.rb')
-rw-r--r--mrbgems/mruby-objectspace/test/objectspace.rb76
1 files changed, 76 insertions, 0 deletions
diff --git a/mrbgems/mruby-objectspace/test/objectspace.rb b/mrbgems/mruby-objectspace/test/objectspace.rb
index 9c44c2157..d26fd5a9e 100644
--- a/mrbgems/mruby-objectspace/test/objectspace.rb
+++ b/mrbgems/mruby-objectspace/test/objectspace.rb
@@ -1,3 +1,4 @@
+# coding: utf-8
assert('ObjectSpace.count_objects') do
h = {}
f = Fiber.new {} if Object.const_defined?(:Fiber)
@@ -58,3 +59,78 @@ end
assert 'Check class pointer of ObjectSpace.each_object.' do
assert_nothing_raised { ObjectSpace.each_object { |obj| !obj } }
end
+
+assert 'ObjectSpace.memsize_of' do
+ # immediate literals
+ int_size = ObjectSpace.memsize_of 1
+ assert_equal int_size, 0, 'int zero'
+
+ sym_size = ObjectSpace.memsize_of :foo
+ assert_equal sym_size, 0, 'sym zero'
+
+ assert_equal ObjectSpace.memsize_of(true), int_size
+ assert_equal ObjectSpace.memsize_of(false), int_size
+
+ float_size = if Object.const_defined? :Float
+ ObjectSpace.memsize_of 1.0
+ else
+ nil
+ end
+
+ # need some way of asking if floats are boxed
+ assert_equal float_size, 0 if float_size
+
+ assert_not_equal ObjectSpace.memsize_of('a'), 0, 'memsize of str'
+
+ if __ENCODING__ == "UTF-8"
+ assert_not_equal ObjectSpace.memsize_of("こんにちは世界"), 0, 'memsize of utf8 str'
+ end
+
+ assert_not_equal ObjectSpace.memsize_of(0..1), 0, 'range not zero'
+
+ # class defs
+ class_obj_size = ObjectSpace.memsize_of Class
+ assert_not_equal class_obj_size, 0, 'Class obj not zero'
+
+ empty_class_def_size = ObjectSpace.memsize_of Class.new
+
+ # need access to struct iv_tbl
+ # assert_not_equal empty_class_def_size, 0, 'Class def not zero'
+
+ class_without_methods = Class.new do
+ @a = 1
+ @b = 2
+ end
+ class_total_size = empty_class_def_size + (int_size * 2)
+ assert_equal ObjectSpace.memsize_of(class_without_methods), class_total_size, 'class without methods size'
+
+ module_without_methods = Module.new do
+ @a = 1
+ @b = 2
+ end
+ module_total_size = empty_class_def_size + (int_size * 2)
+ assert_equal ObjectSpace.memsize_of(module_without_methods), module_total_size, 'module without methods size'
+
+ proc_size = ObjectSpace.memsize_of Proc.new { x = 1; x }
+ assert_not_equal proc_size, 0
+
+ class_with_methods = Class.new do
+ def foo
+ a = 0
+ a + 1
+ end
+ end
+
+ m_size = ObjectSpace.memsize_of class_with_methods.instance_method(:foo)
+ assert_not_equal m_size, 0, 'method size not zero'
+
+ # collections
+ assert_equal ObjectSpace.memsize_of([]), 0, 'empty array size zero'
+ assert_not_equal ObjectSpace.memsize_of(Array.new(16)), 0, 'array size non zero'
+
+ # fiber
+ assert_not_equal ObjectSpace.memsize_of(Fiber.new {}), 0, 'fiber non zero'
+
+ skip 'No hash table support yet'
+ assert_equal ObjectSpace.memsize_of({}), 0, 'empty hash size zero'
+end