summaryrefslogtreecommitdiff
path: root/test/fiddle/test_function.rb
diff options
context:
space:
mode:
authorSutou Kouhei <kou@clear-code.com>2022-09-15 06:44:07 +0900
committerHiroshi SHIBATA <hsbt@ruby-lang.org>2022-10-07 15:18:53 +0900
commit824c474c95969f8255f293dc927ea081907aa0c2 (patch)
tree613d9d7afd736c6fe08c440b4fb0f4dd12e40ce2 /test/fiddle/test_function.rb
parentdfca6a879935b5999a56c2a220d4f2595c16d4d4 (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.rb25
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