diff options
author | 2022-09-08 23:29:00 -0700 | |
---|---|---|
committer | 2022-09-08 23:29:30 -0700 | |
commit | 206820d27a952e2a7c84da9177ca36d825ee7987 (patch) | |
tree | 9cc9c6e82820e358fa2cd4172d2998509baf37b2 /test/bun.js/ffi.test.js | |
parent | 8d8b72cf3f7119f0bc018513d89eca5f8ec44ab3 (diff) | |
download | bun-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.js | 23 |
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); }); |