@@ -60,31 +60,35 @@ def test_strtod
60
60
end
61
61
62
62
def test_qsort1
63
- cb = Class . new ( Closure ) {
63
+ closure_class = Class . new ( Closure ) do
64
64
def call ( x , y )
65
65
Pointer . new ( x ) [ 0 ] <=> Pointer . new ( y ) [ 0 ]
66
66
end
67
- } . new ( TYPE_INT , [ TYPE_VOIDP , TYPE_VOIDP ] )
67
+ end
68
68
69
- qsort = Function . new ( @libc [ 'qsort' ] ,
70
- [ TYPE_VOIDP , TYPE_SIZE_T , TYPE_SIZE_T , TYPE_VOIDP ] ,
71
- TYPE_VOID )
72
- buff = "9341"
73
- qsort . call ( buff , buff . size , 1 , cb )
74
- assert_equal ( "1349" , buff )
69
+ closure_class . create ( TYPE_INT , [ TYPE_VOIDP , TYPE_VOIDP ] ) do |callback |
70
+ qsort = Function . new ( @libc [ 'qsort' ] ,
71
+ [ TYPE_VOIDP , TYPE_SIZE_T , TYPE_SIZE_T , TYPE_VOIDP ] ,
72
+ TYPE_VOID )
73
+ buff = "9341"
74
+ qsort . call ( buff , buff . size , 1 , callback )
75
+ assert_equal ( "1349" , buff )
75
76
76
- bug4929 = '[ruby-core:37395]'
77
- buff = "9341"
78
- under_gc_stress do
79
- qsort . call ( buff , buff . size , 1 , cb )
77
+ bug4929 = '[ruby-core:37395]'
78
+ buff = "9341"
79
+ under_gc_stress do
80
+ qsort . call ( buff , buff . size , 1 , callback )
81
+ end
82
+ assert_equal ( "1349" , buff , bug4929 )
80
83
end
81
- assert_equal ( "1349" , buff , bug4929 )
82
84
ensure
83
85
# Ensure freeing all closures.
84
86
# See https://github.com/ruby/fiddle/issues/102#issuecomment-1241763091 .
85
- cb = nil
86
- GC . start
87
- assert_equal ( 0 , ObjectSpace . each_object ( Fiddle ::Closure ) { } )
87
+ not_freed_closures = [ ]
88
+ ObjectSpace . each_object ( Fiddle ::Closure ) do |closure |
89
+ not_freed_closures << closure unless closure . freed?
90
+ end
91
+ assert_equal ( [ ] , not_freed_closures )
88
92
end
89
93
90
94
def test_snprintf
0 commit comments