mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
test/ruby/test_optimization.rb: Proc creation test should count :T_DATA
instead of :TOTAL of ObjectSpace.count_objects.
This test had failed very occasionally:
20200521
T033004Z.fail.html.gz
```
1) Failure:
TestRubyOptimization#test_block_parameter_should_not_create_objects [/home/chkbuild/chkbuild/tmp/build/20200521T033004Z/ruby/test/ruby/test_optimization.rb:713]:
<0> expected but was
<407>.
```
This test of lazy proc creation checks if no object is created during a
method call. However, calling a method itself increases the count of
objects because method cache is now an object (T_MEMO).
The reason why this test rarely fails is because the test was buggy; it
checked the count of :TOTAL, but :TOTAL count changes only when the GC
heap is expanded. Creating one object rarely causes heap expansion.
The test must have checked not only :TOTAL but also the count of :FREE.
Instead, this change more directly checks :T_DATA. Note that a Proc
object is T_DATA.
This commit is contained in:
parent
6f167da65b
commit
3eb3f7bb8c
1 changed files with 1 additions and 1 deletions
|
@ -710,7 +710,7 @@ class TestRubyOptimization < Test::Unit::TestCase
|
|||
foo{}
|
||||
ObjectSpace.count_objects(h2)
|
||||
|
||||
assert_equal 0, h2[:TOTAL] - h1[:TOTAL]
|
||||
assert_equal 0, h2[:T_DATA] - h1[:T_DATA] # Proc is T_DATA
|
||||
END
|
||||
end
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue