summaryrefslogtreecommitdiff
path: root/spec/ffi/rbx/memory_pointer_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/ffi/rbx/memory_pointer_spec.rb')
-rw-r--r--spec/ffi/rbx/memory_pointer_spec.rb66
1 files changed, 65 insertions, 1 deletions
diff --git a/spec/ffi/rbx/memory_pointer_spec.rb b/spec/ffi/rbx/memory_pointer_spec.rb
index 0fe3597..a869d8c 100644
--- a/spec/ffi/rbx/memory_pointer_spec.rb
+++ b/spec/ffi/rbx/memory_pointer_spec.rb
@@ -52,12 +52,76 @@ describe "MemoryPointer" do
m = FFI::MemoryPointer.new(:int)
m.write_int(1)
expect(m.read_int).to eq(1)
+ expect(m.read :int).to eq(1)
+ expect(m.read FFI::Type::INT).to eq(1)
end
-
+
+ it "allows writing as a sized int" do
+ m = FFI::MemoryPointer.new(:uint32)
+ m.write_uint32(1)
+ expect(m.read_uint32).to eq(1)
+ expect(m.read :uint32).to eq(1)
+ expect(m.read FFI::Type::UINT32).to eq(1)
+
+ m = FFI::MemoryPointer.new(:uint32)
+ m.write :uint32, 1
+ expect(m.read :uint32).to eq(1)
+
+ m = FFI::MemoryPointer.new(:int64)
+ m.write_int64(1)
+ expect(m.read_int64).to eq(1)
+ expect(m.read :int64).to eq(1)
+ expect(m.read FFI::Type::INT64).to eq(1)
+
+ m = FFI::MemoryPointer.new(:int64)
+ m.write :int64, 1
+ expect(m.read :int64).to eq(1)
+ end
+
it "allows writing as a long" do
m = FFI::MemoryPointer.new(:long)
m.write_long(10)
expect(m.read_long).to eq(10)
+ expect(m.read :long).to eq(10)
+ expect(m.read FFI::Type::LONG).to eq(10)
+
+ m.write :long, 10
+ expect(m.read :long).to eq(10)
+ end
+
+ it "allows writing as a size_t" do
+ m = FFI::MemoryPointer.new(:size_t)
+ m.write(:size_t, 10)
+ expect(m.read :size_t).to eq(10)
+ end
+
+ it "allows writing as a bool" do
+ m = FFI::MemoryPointer.new(:bool)
+ m.write(:bool, true)
+ expect(m.read :bool).to eq(true)
+ expect(m.read FFI::Type::BOOL).to eq(true)
+
+ m.write(:bool, false)
+ expect(m.read :bool).to eq(false)
+ expect(m.read FFI::Type::BOOL).to eq(false)
+ end
+
+ it "allows writing a custom typedef" do
+ FFI.typedef :uint, :fubar_t
+ FFI.typedef :size_t, :fubar2_t
+
+ m = FFI::MemoryPointer.new(:fubar_t)
+ m.write(:fubar_t, 10)
+ expect(m.read :fubar_t).to eq(10)
+
+ m = FFI::MemoryPointer.new(:fubar2_t)
+ m.write(:fubar2_t, 10)
+ expect(m.read :fubar2_t).to eq(10)
+ end
+
+ it "raises an error if you try to read an undefined type" do
+ m = FFI::MemoryPointer.new(:long)
+ expect { m.read(:undefined_type) }.to raise_error(ArgumentError)
end
it "raises an error if you try putting a long into a pointer of size 1" do