File: memsize.rb

package info (click to toggle)
mruby 3.4.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,584 kB
  • sloc: ansic: 51,933; ruby: 29,510; yacc: 7,077; cpp: 517; makefile: 51; sh: 42
file content (63 lines) | stat: -rw-r--r-- 1,879 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
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("こんにちは世界"), 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'

  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