summaryrefslogtreecommitdiff
path: root/test_ffi
diff options
context:
space:
mode:
authorDivy Srivastava <dj.srivastava23@gmail.com>2022-08-23 09:16:43 +0530
committerGitHub <noreply@github.com>2022-08-23 09:16:43 +0530
commite34260c5b05f2a93f695d807b7cb54a50605885e (patch)
tree3dac23f50bcc9bc86e85497e707a0a5c07b73df7 /test_ffi
parentd0c54777311d2cc30b824f397b7541dca80875fa (diff)
BREAKING(ext/ffi): specialized `buffer` type (#15518)
Diffstat (limited to 'test_ffi')
-rw-r--r--test_ffi/tests/bench.js57
-rw-r--r--test_ffi/tests/ffi_types.ts38
-rw-r--r--test_ffi/tests/test.js17
3 files changed, 50 insertions, 62 deletions
diff --git a/test_ffi/tests/bench.js b/test_ffi/tests/bench.js
index 5342f84ff..c1a3d630f 100644
--- a/test_ffi/tests/bench.js
+++ b/test_ffi/tests/bench.js
@@ -14,7 +14,7 @@ const dylib = Deno.dlopen(libPath, {
"add_u32": { parameters: ["u32", "u32"], result: "u32" },
"add_u64": { parameters: ["u64", "u64"], result: "u64" },
"ffi_string": { parameters: [], result: "pointer" },
- "hash": { parameters: ["pointer", "u32"], result: "u32" },
+ "hash": { parameters: ["buffer", "u32"], result: "u32" },
"nop_u8": { parameters: ["u8"], result: "void" },
"nop_i8": { parameters: ["i8"], result: "void" },
"nop_u16": { parameters: ["u16"], result: "void" },
@@ -27,7 +27,7 @@ const dylib = Deno.dlopen(libPath, {
"nop_isize": { parameters: ["isize"], result: "void" },
"nop_f32": { parameters: ["f32"], result: "void" },
"nop_f64": { parameters: ["f64"], result: "void" },
- "nop_buffer": { parameters: ["pointer"], result: "void" },
+ "nop_buffer": { parameters: ["buffer"], result: "void" },
"return_u8": { parameters: [], result: "u8" },
"return_i8": { parameters: [], result: "i8" },
"return_u16": { parameters: [], result: "u16" },
@@ -40,7 +40,7 @@ const dylib = Deno.dlopen(libPath, {
"return_isize": { parameters: [], result: "isize" },
"return_f32": { parameters: [], result: "f32" },
"return_f64": { parameters: [], result: "f64" },
- "return_buffer": { parameters: [], result: "pointer" },
+ "return_buffer": { parameters: [], result: "buffer" },
// Nonblocking calls
"nop_nonblocking": { name: "nop", parameters: [], result: "void" },
"nop_u8_nonblocking": { name: "nop_u8", parameters: ["u8"], result: "void" },
@@ -97,7 +97,7 @@ const dylib = Deno.dlopen(libPath, {
},
"nop_buffer_nonblocking": {
name: "nop_buffer",
- parameters: ["pointer"],
+ parameters: ["buffer"],
result: "void",
},
"return_u8_nonblocking": { name: "return_u8", parameters: [], result: "u8" },
@@ -155,7 +155,7 @@ const dylib = Deno.dlopen(libPath, {
"return_buffer_nonblocking": {
name: "return_buffer",
parameters: [],
- result: "pointer",
+ result: "buffer",
},
// Parameter checking
"nop_many_parameters": {
@@ -172,7 +172,7 @@ const dylib = Deno.dlopen(libPath, {
"isize",
"f32",
"f64",
- "pointer",
+ "buffer",
"u8",
"i8",
"u16",
@@ -185,7 +185,7 @@ const dylib = Deno.dlopen(libPath, {
"isize",
"f32",
"f64",
- "pointer",
+ "buffer",
],
result: "void",
},
@@ -343,11 +343,6 @@ Deno.bench("nop_buffer()", () => {
nop_buffer(buffer);
});
-const buffer_ptr = Deno.UnsafePointer.of(buffer);
-Deno.bench("nop_buffer() number", () => {
- nop_buffer(buffer_ptr);
-});
-
const { return_u8 } = dylib.symbols;
Deno.bench("return_u8()", () => {
return_u8();
@@ -431,6 +426,7 @@ Deno.bench("nop_u32_nonblocking()", async () => {
});
const { nop_i32_nonblocking } = dylib.symbols;
+
Deno.bench("nop_i32_nonblocking()", async () => {
await nop_i32_nonblocking(100);
});
@@ -469,11 +465,6 @@ const { nop_buffer_nonblocking } = dylib.symbols;
Deno.bench("nop_buffer_nonblocking()", async () => {
await nop_buffer_nonblocking(buffer);
});
-
-Deno.bench("nop_buffer_nonblocking() number", async () => {
- await nop_buffer_nonblocking(buffer_ptr);
-});
-
const { return_u8_nonblocking } = dylib.symbols;
Deno.bench("return_u8_nonblocking()", async () => {
await return_u8_nonblocking();
@@ -574,38 +565,6 @@ Deno.bench("nop_many_parameters()", () => {
);
});
-const buffer2_ptr = Deno.UnsafePointer.of(buffer2);
-Deno.bench("nop_many_parameters() number", () => {
- nop_many_parameters(
- 135,
- 47,
- 356,
- -236,
- 7457,
- -1356,
- 16471468,
- -1334748136,
- 132658769535,
- -42745856824,
- 13567.26437,
- 7.686234e-3,
- buffer_ptr,
- 64,
- -42,
- 83,
- -136,
- 3657,
- -2376,
- 3277918,
- -474628146,
- 344657895,
- -2436732,
- 135.26437e3,
- 264.3576468623546834,
- buffer2_ptr,
- );
-});
-
const { nop_many_parameters_nonblocking } = dylib.symbols;
Deno.bench("nop_many_parameters_nonblocking()", () => {
nop_many_parameters_nonblocking(
diff --git a/test_ffi/tests/ffi_types.ts b/test_ffi/tests/ffi_types.ts
index d4a90552f..d319f7e22 100644
--- a/test_ffi/tests/ffi_types.ts
+++ b/test_ffi/tests/ffi_types.ts
@@ -38,6 +38,10 @@ const remote = Deno.dlopen(
parameters: ["pointer"],
result: "void",
},
+ method23: {
+ parameters: ["buffer"],
+ result: "void",
+ },
static1: { type: "usize" },
static2: { type: "pointer" },
static3: { type: "usize" },
@@ -132,6 +136,7 @@ remote.symbols.method14(0);
// @ts-expect-error: Invalid argument
remote.symbols.method15("foo");
+// @ts-expect-error: Invalid argument
remote.symbols.method15(new Uint16Array(1));
remote.symbols.method15(0n);
@@ -243,6 +248,17 @@ remote.symbols.method20(null);
remote.symbols.method20(unsafe_callback_right2);
remote.symbols.method20(unsafe_callback_right1.pointer);
+remote.symbols.method23(new Uint8Array(1));
+remote.symbols.method23(new Uint32Array(1));
+remote.symbols.method23(new Uint8Array(1));
+
+// @ts-expect-error: Cannot pass pointer values as buffer.
+remote.symbols.method23(0);
+// @ts-expect-error: Cannot pass pointer values as buffer.
+remote.symbols.method23(0n);
+// @ts-expect-error: Cannot pass pointer values as buffer.
+remote.symbols.method23(null);
+
// @ts-expect-error: Invalid member type
const static1_wrong: null = remote.symbols.static1;
const static1_right: Deno.PointerValue = remote.symbols.static1;
@@ -332,35 +348,47 @@ type __Tests__ = [
{
symbols: {
pushBuf: (
- ptr: number | bigint | TypedArray | null,
+ buf: TypedArray,
+ ptr: number | bigint | null,
func: number | bigint | null,
) => void;
};
close(): void;
},
Deno.DynamicLibrary<
- { pushBuf: { parameters: ["pointer", "function"]; result: "void" } }
+ {
+ pushBuf: {
+ parameters: ["buffer", "pointer", "function"];
+ result: "void";
+ };
+ }
>
>,
higher_order_returns: AssertEqual<
{
symbols: {
pushBuf: (
- ptr: number | bigint | TypedArray | null,
+ buf: TypedArray,
+ ptr: number | bigint | null,
func: number | bigint | null,
) => number | bigint;
};
close(): void;
},
Deno.DynamicLibrary<
- { pushBuf: { parameters: ["pointer", "function"]; result: "pointer" } }
+ {
+ pushBuf: {
+ parameters: ["buffer", "pointer", "function"];
+ result: "pointer";
+ };
+ }
>
>,
non_exact_params: AssertEqual<
{
symbols: {
foo: (
- ...args: (number | bigint | TypedArray | null)[]
+ ...args: (number | bigint | null)[]
) => number | bigint;
};
close(): void;
diff --git a/test_ffi/tests/test.js b/test_ffi/tests/test.js
index 062dced76..7e8c41cfe 100644
--- a/test_ffi/tests/test.js
+++ b/test_ffi/tests/test.js
@@ -42,12 +42,13 @@ const dylib = Deno.dlopen(libPath, {
parameters: [],
result: "void",
},
- "print_buffer": { parameters: ["pointer", "usize"], result: "void" },
+ "print_buffer": { parameters: ["buffer", "usize"], result: "void" },
+ "print_pointer": { name: "print_buffer", parameters: ["pointer", "usize"], result: "void" },
"print_buffer2": {
- parameters: ["pointer", "usize", "pointer", "usize"],
+ parameters: ["buffer", "usize", "buffer", "usize"],
result: "void",
},
- "return_buffer": { parameters: [], result: "pointer" },
+ "return_buffer": { parameters: [], result: "buffer" },
"is_null_ptr": { parameters: ["pointer"], result: "u8" },
"add_u32": { parameters: ["u32", "u32"], result: "u32" },
"add_i32": { parameters: ["i32", "i32"], result: "i32" },
@@ -106,7 +107,7 @@ const dylib = Deno.dlopen(libPath, {
result: "f64",
nonblocking: true,
},
- "fill_buffer": { parameters: ["u8", "pointer", "usize"], result: "void" },
+ "fill_buffer": { parameters: ["u8", "buffer", "usize"], result: "void" },
"sleep_nonblocking": {
name: "sleep_blocking",
parameters: ["u64"],
@@ -115,7 +116,7 @@ const dylib = Deno.dlopen(libPath, {
},
"sleep_blocking": { parameters: ["u64"], result: "void" },
"nonblocking_buffer": {
- parameters: ["pointer", "usize"],
+ parameters: ["buffer", "usize"],
result: "void",
nonblocking: true,
},
@@ -214,7 +215,7 @@ if (!(status & (1 << 4))) {
throw new Error("returnBuffer is not optimized");
}
-dylib.symbols.print_buffer(ptr0, 8);
+dylib.symbols.print_pointer(ptr0, 8);
const ptrView = new Deno.UnsafePointerView(ptr0);
const into = new Uint8Array(6);
const into2 = new Uint8Array(3);
@@ -239,9 +240,9 @@ console.log(Boolean(dylib.symbols.is_null_ptr(ptr0)));
console.log(Boolean(dylib.symbols.is_null_ptr(null)));
console.log(Boolean(dylib.symbols.is_null_ptr(Deno.UnsafePointer.of(into))));
const emptyBuffer = new BigUint64Array(0);
-console.log(Boolean(dylib.symbols.is_null_ptr(emptyBuffer)));
+console.log(Boolean(dylib.symbols.is_null_ptr(Deno.UnsafePointer.of(emptyBuffer))));
const emptySlice = into.subarray(6);
-console.log(Boolean(dylib.symbols.is_null_ptr(emptySlice)));
+console.log(Boolean(dylib.symbols.is_null_ptr(Deno.UnsafePointer.of(emptySlice))));
const addU32Ptr = dylib.symbols.get_add_u32_ptr();
const addU32 = new Deno.UnsafeFnPointer(addU32Ptr, {