diff options
Diffstat (limited to 'test_ffi')
-rw-r--r-- | test_ffi/src/lib.rs | 12 | ||||
-rw-r--r-- | test_ffi/tests/integration_tests.rs | 9 | ||||
-rw-r--r-- | test_ffi/tests/test.js | 35 |
3 files changed, 52 insertions, 4 deletions
diff --git a/test_ffi/src/lib.rs b/test_ffi/src/lib.rs index 38275e547..b0206276a 100644 --- a/test_ffi/src/lib.rs +++ b/test_ffi/src/lib.rs @@ -3,6 +3,8 @@ use std::thread::sleep; use std::time::Duration; +static BUFFER: [u8; 8] = [1, 2, 3, 4, 5, 6, 7, 8]; + #[no_mangle] pub extern "C" fn print_something() { println!("something"); @@ -29,6 +31,16 @@ pub extern "C" fn print_buffer2( } #[no_mangle] +pub extern "C" fn return_buffer() -> *const u8 { + BUFFER.as_ptr() +} + +#[no_mangle] +pub extern "C" fn is_null_ptr(ptr: *const u8) -> u8 { + ptr.is_null() as u8 +} + +#[no_mangle] pub extern "C" fn add_u32(a: u32, b: u32) -> u32 { a + b } diff --git a/test_ffi/tests/integration_tests.rs b/test_ffi/tests/integration_tests.rs index e16e97e24..99a17f0a9 100644 --- a/test_ffi/tests/integration_tests.rs +++ b/test_ffi/tests/integration_tests.rs @@ -41,6 +41,15 @@ fn basic() { something\n\ [1, 2, 3, 4, 5, 6, 7, 8]\n\ [1, 2, 3, 4, 5, 6, 7, 8] [9, 10]\n\ + [1, 2, 3, 4, 5, 6, 7, 8]\n\ + [ 1, 2, 3, 4, 5, 6 ]\n\ + [ 4, 5, 6 ]\n\ + [ 4, 5, 6 ]\n\ + Hello from pointer!\n\ + pointer!\n\ + false\n\ + true\n\ + false\n\ 579\n\ 579\n\ 579\n\ diff --git a/test_ffi/tests/test.js b/test_ffi/tests/test.js index 35d51c006..16e4d76b6 100644 --- a/test_ffi/tests/test.js +++ b/test_ffi/tests/test.js @@ -20,11 +20,13 @@ try { const dylib = Deno.dlopen(libPath, { "print_something": { parameters: [], result: "void" }, - "print_buffer": { parameters: ["buffer", "usize"], result: "void" }, + "print_buffer": { parameters: ["pointer", "usize"], result: "void" }, "print_buffer2": { - parameters: ["buffer", "usize", "buffer", "usize"], + parameters: ["pointer", "usize", "pointer", "usize"], result: "void", }, + "return_buffer": { parameters: [], result: "pointer" }, + "is_null_ptr": { parameters: ["pointer"], result: "u8" }, "add_u32": { parameters: ["u32", "u32"], result: "u32" }, "add_i32": { parameters: ["i32", "i32"], result: "i32" }, "add_u64": { parameters: ["u64", "u64"], result: "u64" }, @@ -33,10 +35,10 @@ const dylib = Deno.dlopen(libPath, { "add_isize": { parameters: ["isize", "isize"], result: "isize" }, "add_f32": { parameters: ["f32", "f32"], result: "f32" }, "add_f64": { parameters: ["f64", "f64"], result: "f64" }, - "fill_buffer": { parameters: ["u8", "buffer", "usize"], result: "void" }, + "fill_buffer": { parameters: ["u8", "pointer", "usize"], result: "void" }, "sleep_blocking": { parameters: ["u64"], result: "void", nonblocking: true }, "nonblocking_buffer": { - parameters: ["buffer", "usize"], + parameters: ["pointer", "usize"], result: "void", nonblocking: true, }, @@ -47,6 +49,31 @@ const buffer = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]); const buffer2 = new Uint8Array([9, 10]); dylib.symbols.print_buffer(buffer, buffer.length); dylib.symbols.print_buffer2(buffer, buffer.length, buffer2, buffer2.length); +const ptr = dylib.symbols.return_buffer(); +dylib.symbols.print_buffer(ptr, 8); +const ptrView = new Deno.UnsafePointerView(ptr); +const into = new Uint8Array(6); +const into2 = new Uint8Array(3); +const into2ptr = Deno.UnsafePointer.of(into2); +const into2ptrView = new Deno.UnsafePointerView(into2ptr); +const into3 = new Uint8Array(3); +ptrView.copyInto(into); +console.log([...into]); +ptrView.copyInto(into2, 3); +console.log([...into2]); +into2ptrView.copyInto(into3); +console.log([...into3]); +const string = new Uint8Array([ + ...new TextEncoder().encode("Hello from pointer!"), + 0, +]); +const stringPtr = Deno.UnsafePointer.of(string); +const stringPtrview = new Deno.UnsafePointerView(stringPtr); +console.log(stringPtrview.getCString()); +console.log(stringPtrview.getCString(11)); +console.log(Boolean(dylib.symbols.is_null_ptr(ptr))); +console.log(Boolean(dylib.symbols.is_null_ptr(null))); +console.log(Boolean(dylib.symbols.is_null_ptr(Deno.UnsafePointer.of(into)))); console.log(dylib.symbols.add_u32(123, 456)); console.log(dylib.symbols.add_i32(123, 456)); console.log(dylib.symbols.add_u64(123, 456)); |