diff options
author | Sutou Kouhei <kou@clear-code.com> | 2022-09-15 06:44:07 +0900 |
---|---|---|
committer | Hiroshi SHIBATA <hsbt@ruby-lang.org> | 2022-10-07 15:18:53 +0900 |
commit | 824c474c95969f8255f293dc927ea081907aa0c2 (patch) | |
tree | 613d9d7afd736c6fe08c440b4fb0f4dd12e40ce2 /test/fiddle/test_function.rb | |
parent | dfca6a879935b5999a56c2a220d4f2595c16d4d4 (diff) |
[ruby/fiddle] test: ensure freeing closure
GitHub: GH-102
This also improves freed closures assertions.
https://github.com/ruby/fiddle/commit/0495624caf
Diffstat (limited to 'test/fiddle/test_function.rb')
-rw-r--r-- | test/fiddle/test_function.rb | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/test/fiddle/test_function.rb b/test/fiddle/test_function.rb index 0a1159b7bc..847df3793a 100644 --- a/test/fiddle/test_function.rb +++ b/test/fiddle/test_function.rb @@ -18,8 +18,11 @@ module Fiddle def teardown # Ensure freeing all closures. # See https://github.com/ruby/fiddle/issues/102#issuecomment-1241763091 . - GC.start - assert_equal(0, ObjectSpace.each_object(Fiddle::Closure) {}) + not_freed_closures = [] + ObjectSpace.each_object(Fiddle::Closure) do |closure| + not_freed_closures << closure unless closure.freed? + end + assert_equal([], not_freed_closures) end def test_default_abi @@ -82,18 +85,20 @@ module Fiddle end def test_argument_count - closure = Class.new(Closure) { + closure_class = Class.new(Closure) do def call one 10 + one end - }.new(TYPE_INT, [TYPE_INT]) - func = Function.new(closure, [TYPE_INT], TYPE_INT) - - assert_raise(ArgumentError) do - func.call(1,2,3) end - assert_raise(ArgumentError) do - func.call + closure_class.create(TYPE_INT, [TYPE_INT]) do |closure| + func = Function.new(closure, [TYPE_INT], TYPE_INT) + + assert_raise(ArgumentError) do + func.call(1,2,3) + end + assert_raise(ArgumentError) do + func.call + end end end |