diff options
author | Lars Kanis <lars@greiz-reinsdorf.de> | 2023-04-20 10:26:48 +0200 |
---|---|---|
committer | Lars Kanis <lars@greiz-reinsdorf.de> | 2023-04-20 13:12:26 +0200 |
commit | 80726b2217eb43a094101377c4273b7b2fdf4833 (patch) | |
tree | 67d4b9aa13be44336067ca8a62370aa6fed64462 /spec/ffi/dynamic_library_spec.rb | |
parent | 88fa99adc880b2ac82d0e963c065c7add65e2137 (diff) | |
download | ffi-80726b2217eb43a094101377c4273b7b2fdf4833.tar.gz |
Add a spec file for FFI::DynamicLibrary
.. and test Ractor compatibility there.
Diffstat (limited to 'spec/ffi/dynamic_library_spec.rb')
-rw-r--r-- | spec/ffi/dynamic_library_spec.rb | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/spec/ffi/dynamic_library_spec.rb b/spec/ffi/dynamic_library_spec.rb new file mode 100644 index 0000000..a6ea2a9 --- /dev/null +++ b/spec/ffi/dynamic_library_spec.rb @@ -0,0 +1,56 @@ +# +# This file is part of ruby-ffi. +# For licensing, see LICENSE.SPECS +# + +require File.expand_path(File.join(File.dirname(__FILE__), "spec_helper")) + +describe FFI::DynamicLibrary do + it "should be shareable for Ractor", :ractor do + libtest = FFI::DynamicLibrary.open(TestLibrary::PATH, + FFI::DynamicLibrary::RTLD_LAZY | FFI::DynamicLibrary::RTLD_GLOBAL) + Ractor.make_shareable(libtest) + + res = Ractor.new(libtest) do |libtest2| + libtest2.find_symbol("testClosureVrV").address + end.take + + expect( res ).to be > 0 + end + + it "load a library in a Ractor", :ractor do + res = Ractor.new do + libtest = FFI::DynamicLibrary.open(TestLibrary::PATH, + FFI::DynamicLibrary::RTLD_LAZY | FFI::DynamicLibrary::RTLD_GLOBAL) + libtest.find_symbol("testClosureVrV") + end.take + + expect(res.address).to be > 0 + end + + it "has a memsize function", skip: RUBY_ENGINE != "ruby" do + base_size = ObjectSpace.memsize_of(Object.new) + + libtest = FFI::DynamicLibrary.open(TestLibrary::PATH, + FFI::DynamicLibrary::RTLD_LAZY | FFI::DynamicLibrary::RTLD_GLOBAL) + size = ObjectSpace.memsize_of(libtest) + expect(size).to be > base_size + end + + describe Symbol do + before do + @libtest = FFI::DynamicLibrary.open( + TestLibrary::PATH, + FFI::DynamicLibrary::RTLD_LAZY | FFI::DynamicLibrary::RTLD_GLOBAL, + ) + end + + it "has a memsize function", skip: RUBY_ENGINE != "ruby" do + base_size = ObjectSpace.memsize_of(Object.new) + + symbol = @libtest.find_symbol("gvar_gstruct_set") + size = ObjectSpace.memsize_of(symbol) + expect(size).to be > base_size + end + end +end |