aboutsummaryrefslogtreecommitdiff
path: root/test/bun.js/ffi.test.js
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-09-08 23:29:00 -0700
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-09-08 23:29:30 -0700
commit206820d27a952e2a7c84da9177ca36d825ee7987 (patch)
tree9cc9c6e82820e358fa2cd4172d2998509baf37b2 /test/bun.js/ffi.test.js
parent8d8b72cf3f7119f0bc018513d89eca5f8ec44ab3 (diff)
downloadbun-206820d27a952e2a7c84da9177ca36d825ee7987.tar.gz
bun-206820d27a952e2a7c84da9177ca36d825ee7987.tar.zst
bun-206820d27a952e2a7c84da9177ca36d825ee7987.zip
[bun:ffi] Implement `read.{u8,i8,i16,i32,u16,u32,ptr,intptr}`
`read` in `bun:ffi` lets you read data from a pointer without creating a new DataView/ArrayBufferView ``` import {read} from 'bun:ffi'; expect(read.i8(ptr_, i)).toBe(view.getInt8(i, true)); expect(read.i16(ptr_, i)).toBe(view.getInt16(i, true)); expect(read.i32(ptr_, i)).toBe(view.getInt32(i, true)); expect(read.u8(ptr_, i)).toBe(view.getUint8(i, true)); expect(read.u16(ptr_, i)).toBe(view.getUint16(i, true)); expect(read.u32(ptr_, i)).toBe(view.getUint32(i, true)); } ```
Diffstat (limited to '')
-rw-r--r--test/bun.js/ffi.test.js23
1 files changed, 23 insertions, 0 deletions
diff --git a/test/bun.js/ffi.test.js b/test/bun.js/ffi.test.js
index 778719910..72847788d 100644
--- a/test/bun.js/ffi.test.js
+++ b/test/bun.js/ffi.test.js
@@ -12,6 +12,7 @@ import {
FFIType,
callback,
CFunction,
+ read,
} from "bun:ffi";
const dlopen = (...args) => {
@@ -613,6 +614,28 @@ function ffiRunner(fast) {
// ffiRunner(true);
// });
+it("FFI.read", () => {
+ const buffer = new BigInt64Array(64);
+ const view = new DataView(buffer.buffer);
+ const ptr_ = ptr(buffer);
+
+ for (let i = 0; i < 64; i++) {
+ buffer[i] = BigInt(i);
+ expect(read.intptr(ptr_, i * 8)).toBe(
+ Number(view.getBigInt64(i * 8, true))
+ );
+ expect(read.ptr(ptr_, i * 8)).toBe(Number(view.getBigUint64(i * 8, true)));
+ }
+ for (let i = 0; i < buffer.byteLength / 4; i++) {
+ expect(read.i8(ptr_, i)).toBe(view.getInt8(i, true));
+ expect(read.i16(ptr_, i)).toBe(view.getInt16(i, true));
+ expect(read.i32(ptr_, i)).toBe(view.getInt32(i, true));
+ expect(read.u8(ptr_, i)).toBe(view.getUint8(i, true));
+ expect(read.u16(ptr_, i)).toBe(view.getUint16(i, true));
+ expect(read.u32(ptr_, i)).toBe(view.getUint32(i, true));
+ }
+});
+
it("run ffi", () => {
ffiRunner(false);
});