diff options
Diffstat (limited to 'test/fiddle/test_pointer.rb')
-rw-r--r-- | test/fiddle/test_pointer.rb | 40 |
1 files changed, 29 insertions, 11 deletions
diff --git a/test/fiddle/test_pointer.rb b/test/fiddle/test_pointer.rb index 88dad75138..f2c1d285ad 100644 --- a/test/fiddle/test_pointer.rb +++ b/test/fiddle/test_pointer.rb @@ -10,6 +10,22 @@ module Fiddle Fiddle.dlwrap arg end + def test_can_read_write_memory + # Allocate some memory + address = Fiddle.malloc(Fiddle::SIZEOF_VOIDP) + + bytes_to_write = Fiddle::SIZEOF_VOIDP.times.to_a.pack("C*") + + # Write to the memory + Fiddle::Pointer.write(address, bytes_to_write) + + # Read the bytes out again + bytes = Fiddle::Pointer.read(address, Fiddle::SIZEOF_VOIDP) + assert_equal bytes_to_write, bytes + ensure + Fiddle.free address + end + def test_cptr_to_int null = Fiddle::NULL assert_equal(null.to_i, null.to_int) @@ -179,16 +195,6 @@ module Fiddle end def test_free= - assert_normal_exit(<<-"End", '[ruby-dev:39269]') - require 'fiddle' - include Fiddle - free = Fiddle::Function.new(Fiddle::RUBY_FREE, [TYPE_VOIDP], TYPE_VOID) - ptr = Fiddle::Pointer.malloc(4) - ptr.free = free - free.ptr - ptr.free.ptr - End - free = Function.new(Fiddle::RUBY_FREE, [TYPE_VOIDP], TYPE_VOID) ptr = Pointer.malloc(4) ptr.free = free @@ -282,7 +288,19 @@ module Fiddle end def test_no_memory_leak - assert_no_memory_leak(%w[-W0 -rfiddle.so], '', '100_000.times {Fiddle::Pointer.allocate}', rss: true) + # https://github.com/ruby/fiddle/actions/runs/3202406059/jobs/5231356410 + omit if RUBY_VERSION >= '3.2' + + if respond_to?(:assert_nothing_leaked_memory) + n_tries = 100_000 + assert_nothing_leaked_memory(SIZEOF_VOIDP * (n_tries / 100)) do + n_tries.times do + Fiddle::Pointer.allocate + end + end + else + assert_no_memory_leak(%w[-W0 -rfiddle.so], '', '100_000.times {Fiddle::Pointer.allocate}', rss: true) + end end end end if defined?(Fiddle) |