summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-os-memsize/test
diff options
context:
space:
mode:
authorRory OConnell <[email protected]>2020-07-19 15:36:08 -0700
committerRory OConnell <[email protected]>2020-07-19 15:36:08 -0700
commit5f4a27217ea81ac3dd65f39cc3560dc019fe83a6 (patch)
treed6de215a8bad2c02169ff1037cf7ffe85717c9d4 /mrbgems/mruby-os-memsize/test
parentc9ea39843b7fe0aa7a9c110e9140ca3eccb26023 (diff)
downloadmruby-5f4a27217ea81ac3dd65f39cc3560dc019fe83a6.tar.gz
mruby-5f4a27217ea81ac3dd65f39cc3560dc019fe83a6.zip
Separate `memsize_of` and `memsize_of_all` to a separate gem; #5040
Those methods are originally CRuby specific. Co-authored-by: Yukihiro "Matz" Matsumoto <[email protected]>
Diffstat (limited to 'mrbgems/mruby-os-memsize/test')
-rw-r--r--mrbgems/mruby-os-memsize/test/memsize.rb77
1 files changed, 77 insertions, 0 deletions
diff --git a/mrbgems/mruby-os-memsize/test/memsize.rb b/mrbgems/mruby-os-memsize/test/memsize.rb
new file mode 100644
index 000000000..c6b1b7b2d
--- /dev/null
+++ b/mrbgems/mruby-os-memsize/test/memsize.rb
@@ -0,0 +1,77 @@
+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
+
+ assert_not_equal ObjectSpace.memsize_of('a'), 0, 'memsize of str'
+
+ if __ENCODING__ == "UTF-8"
+ assert_not_equal ObjectSpace.memsize_of("縺薙s縺ォ縺。縺ッ荳也阜"), 0, 'memsize of utf8 str'
+ end
+
+ # 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
+ 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
+ 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
+ empty_fiber_size = ObjectSpace.memsize_of(Fiber.new {})
+ assert_not_equal empty_fiber_size, 0, 'empty fiber not zero'
+
+ #hash
+ assert_not_equal ObjectSpace.memsize_of({}), 0, 'empty hash size not zero'
+end
+
+assert 'ObjectSpace.memsize_of_all' do
+ foo_class = Class.new do
+ def initialize
+ @a = 'a'
+ @b = 'b'
+ end
+ end
+
+ foos = Array.new(10) { foo_class.new }
+ foo_size = ObjectSpace.memsize_of(foos.first)
+
+ assert_equal ObjectSpace.memsize_of_all(foo_class), foo_size * foos.size, 'Memsize of all instance'
+end