aboutsummaryrefslogtreecommitdiffstats
path: root/test/-ext-/string/test_modify_expand.rb
blob: 5fee7b3580345c164f4dc9c5740c91869c738a3a (plain)
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
require 'test/unit'
require "-test-/string/string"
require_relative '../../ruby/envutil'

class Test_StringModifyExpand < Test::Unit::TestCase
  def test_modify_expand_memory_leak
    before = after = nil
    args = [
      "--disable=gems", "-r-test-/string/string",
      "-I"+File.expand_path("../../..", __FILE__),
      "-rruby/memory_status",
      "-e", <<-CMD
      s=Bug::String.new
      size=Memory::Status.new.size
      puts size
      10.times{s.modify_expand!(size)}
      s.replace("")
      puts Memory::Status.new.size
    CMD
    ]
    status = EnvUtil.invoke_ruby(args, "", true) do |in_p, out_p, err_p, pid|
      before, after = out_p.readlines.map(&:to_i)
      Process.wait(pid)
      $?
    end
    assert_equal(true, status.success?)
    assert_operator after.fdiv(before), :<, 2
  end
end