From bbd5b8ddae7b3ff7205866d54cf8aca065a6d9bd Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Fri, 11 Oct 2024 14:59:09 +0900 Subject: [ruby/fiddle] Ractor support (https://github.com/ruby/fiddle/pull/139) https://github.com/ruby/fiddle/commit/91d0ea9849 Co-authored-by: Sutou Kouhei --- test/fiddle/helper.rb | 5 +++++ test/fiddle/test_closure.rb | 12 ++++++++++++ test/fiddle/test_function.rb | 5 +++++ test/fiddle/test_handle.rb | 5 +++++ test/fiddle/test_memory_view.rb | 12 ++++++++++++ test/fiddle/test_pinned.rb | 8 +++++++- test/fiddle/test_pointer.rb | 8 ++++++++ 7 files changed, 54 insertions(+), 1 deletion(-) (limited to 'test') diff --git a/test/fiddle/helper.rb b/test/fiddle/helper.rb index 9dfe381a20..aebe028206 100644 --- a/test/fiddle/helper.rb +++ b/test/fiddle/helper.rb @@ -189,5 +189,10 @@ module Fiddle ensure GC.stress = stress end + + def assert_ractor_shareable(object) + Ractor.make_shareable(object) + assert_operator(Ractor, :shareable?, object) + end end end diff --git a/test/fiddle/test_closure.rb b/test/fiddle/test_closure.rb index 787a9b635a..3985e1e2bf 100644 --- a/test/fiddle/test_closure.rb +++ b/test/fiddle/test_closure.rb @@ -152,5 +152,17 @@ module Fiddle end end end + + def test_ractor_shareable + omit("Need Ractor") unless defined?(Ractor) + closure_class = Class.new(Closure) do + def call + 0 + end + end + closure_class.create(:int, [:void]) do |c| + assert_ractor_shareable(c) + end + end end end if defined?(Fiddle) diff --git a/test/fiddle/test_function.rb b/test/fiddle/test_function.rb index b6ae8c14bc..b4b2df2874 100644 --- a/test/fiddle/test_function.rb +++ b/test/fiddle/test_function.rb @@ -253,6 +253,11 @@ module Fiddle end end + def test_ractor_shareable + omit("Need Ractor") unless defined?(Ractor) + assert_ractor_shareable(Function.new(@libm['sin'], [TYPE_DOUBLE], TYPE_DOUBLE)) + end + private def perror(m) diff --git a/test/fiddle/test_handle.rb b/test/fiddle/test_handle.rb index c952a7ef17..2a51add852 100644 --- a/test/fiddle/test_handle.rb +++ b/test/fiddle/test_handle.rb @@ -226,5 +226,10 @@ module Fiddle assert_equal(ansi, k["GetFileAttributes"], "should fallback to ANSI version") end end + + def test_ractor_shareable + omit("Need Ractor") unless defined?(Ractor) + assert_ractor_shareable(Fiddle::Handle.new(LIBC_SO)) + end end end if defined?(Fiddle) diff --git a/test/fiddle/test_memory_view.rb b/test/fiddle/test_memory_view.rb index d44c42d239..da00d66c91 100644 --- a/test/fiddle/test_memory_view.rb +++ b/test/fiddle/test_memory_view.rb @@ -159,5 +159,17 @@ module Fiddle mview.release end end + + def test_ractor_shareable + omit("Need Ractor") unless defined?(Ractor) + ptr = Pointer["hello world"] + mview = MemoryView.new(ptr) + begin + assert_ractor_shareable(mview) + assert_predicate(ptr, :frozen?) + ensure + mview.release + end + end end end diff --git a/test/fiddle/test_pinned.rb b/test/fiddle/test_pinned.rb index f0d375b1cc..ad132579b0 100644 --- a/test/fiddle/test_pinned.rb +++ b/test/fiddle/test_pinned.rb @@ -23,6 +23,12 @@ module Fiddle end assert_match "called on", ex.message end + + def test_ractor_shareable + omit("Need Ractor") unless defined?(Ractor) + obj = Object.new + assert_ractor_shareable(Pinned.new(obj)) + assert_predicate(obj, :frozen?) + end end end - diff --git a/test/fiddle/test_pointer.rb b/test/fiddle/test_pointer.rb index f17c8338f5..ea8015438e 100644 --- a/test/fiddle/test_pointer.rb +++ b/test/fiddle/test_pointer.rb @@ -305,5 +305,13 @@ module Fiddle assert_raise(DLError) {nullpo[0]} assert_raise(DLError) {nullpo[0] = 1} end + + def test_ractor_shareable + omit("Need Ractor") unless defined?(Ractor) + assert_ractor_shareable(Fiddle::NULL) + ary = [0, 1, 2, 4, 5] + addr = Pointer.new(dlwrap(ary)) + assert_ractor_shareable(addr) + end end end if defined?(Fiddle) -- cgit v1.2.3