summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarter Snook <cartersnook04@gmail.com>2021-11-10 07:55:46 -0600
committerGitHub <noreply@github.com>2021-11-10 14:55:46 +0100
commit0cb81951aff530b28b5ded8bd57cf34922b93ac6 (patch)
tree7d568c6fd2682737bd4108399cc0b48b61887534
parent8ce53dd22ba854cfcebc7d9cff135cfc573a0e0a (diff)
test(ffi): add mutable buffer tests (#12701)
-rw-r--r--test_ffi/src/lib.rs9
-rw-r--r--test_ffi/tests/test.js16
2 files changed, 25 insertions, 0 deletions
diff --git a/test_ffi/src/lib.rs b/test_ffi/src/lib.rs
index d7fd5182d..38275e547 100644
--- a/test_ffi/src/lib.rs
+++ b/test_ffi/src/lib.rs
@@ -76,6 +76,15 @@ pub extern "C" fn sleep_blocking(ms: u64) {
#[allow(clippy::not_unsafe_ptr_arg_deref)]
#[no_mangle]
+pub extern "C" fn fill_buffer(value: u8, buf: *mut u8, len: usize) {
+ let buf = unsafe { std::slice::from_raw_parts_mut(buf, len) };
+ for itm in buf.iter_mut() {
+ *itm = value;
+ }
+}
+
+#[allow(clippy::not_unsafe_ptr_arg_deref)]
+#[no_mangle]
pub extern "C" fn nonblocking_buffer(ptr: *const u8, len: usize) {
let buf = unsafe { std::slice::from_raw_parts(ptr, len) };
assert_eq!(buf, vec![1, 2, 3, 4, 5, 6, 7, 8]);
diff --git a/test_ffi/tests/test.js b/test_ffi/tests/test.js
index fbd023a91..35d51c006 100644
--- a/test_ffi/tests/test.js
+++ b/test_ffi/tests/test.js
@@ -33,6 +33,7 @@ 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" },
"sleep_blocking": { parameters: ["u64"], result: "void", nonblocking: true },
"nonblocking_buffer": {
parameters: ["buffer", "usize"],
@@ -55,6 +56,21 @@ console.log(dylib.symbols.add_isize(123, 456));
console.log(dylib.symbols.add_f32(123.123, 456.789));
console.log(dylib.symbols.add_f64(123.123, 456.789));
+// test mutating sync calls
+
+function test_fill_buffer(fillValue, arr) {
+ let buf = new Uint8Array(arr);
+ dylib.symbols.fill_buffer(fillValue, buf, buf.length);
+ for (let i = 0; i < buf.length; i++) {
+ if (buf[i] !== fillValue) {
+ throw new Error(`Found '${buf[i]}' in buffer, expected '${fillValue}'.`);
+ }
+ }
+}
+
+test_fill_buffer(0, [2, 3, 4]);
+test_fill_buffer(5, [2, 7, 3, 2, 1]);
+
// Test non blocking calls
function deferred() {