aboutsummaryrefslogtreecommitdiff
path: root/integration/bunjs-only-snippets
diff options
context:
space:
mode:
Diffstat (limited to 'integration/bunjs-only-snippets')
-rw-r--r--integration/bunjs-only-snippets/ffi-test.c11
-rw-r--r--integration/bunjs-only-snippets/ffi.test.js17
2 files changed, 28 insertions, 0 deletions
diff --git a/integration/bunjs-only-snippets/ffi-test.c b/integration/bunjs-only-snippets/ffi-test.c
index 4b2784a84..562d31784 100644
--- a/integration/bunjs-only-snippets/ffi-test.c
+++ b/integration/bunjs-only-snippets/ffi-test.c
@@ -1,5 +1,6 @@
#include <stdbool.h>
#include <stdint.h>
+#include <stdlib.h>
bool returns_true();
bool returns_false();
@@ -83,3 +84,13 @@ uint8_t add_uint8_t(uint8_t a, uint8_t b) { return a + b; }
uint16_t add_uint16_t(uint16_t a, uint16_t b) { return a + b; }
uint32_t add_uint32_t(uint32_t a, uint32_t b) { return a + b; }
uint64_t add_uint64_t(uint64_t a, uint64_t b) { return a + b; }
+
+void *ptr_should_point_to_42_as_int32_t();
+void *ptr_should_point_to_42_as_int32_t() {
+ int32_t *ptr = malloc(sizeof(int32_t));
+ *ptr = 42;
+ return ptr;
+}
+
+bool does_pointer_equal_42_as_int32_t(int32_t *ptr);
+bool does_pointer_equal_42_as_int32_t(int32_t *ptr) { return *ptr == 42; }
diff --git a/integration/bunjs-only-snippets/ffi.test.js b/integration/bunjs-only-snippets/ffi.test.js
index 1a18ae2cd..cd51a4594 100644
--- a/integration/bunjs-only-snippets/ffi.test.js
+++ b/integration/bunjs-only-snippets/ffi.test.js
@@ -153,6 +153,16 @@ it("ffi run", () => {
return_type: "uint32_t",
params: ["uint32_t", "uint32_t"],
},
+
+ does_pointer_equal_42_as_int32_t: {
+ return_type: "bool",
+ params: ["ptr"],
+ },
+
+ ptr_should_point_to_42_as_int32_t: {
+ return_type: "ptr",
+ params: [],
+ },
// add_uint64_t: {
// return_type: "uint64_t",
// params: ["uint64_t", "uint64_t"],
@@ -197,6 +207,8 @@ it("ffi run", () => {
add_uint16_t,
add_uint32_t,
add_uint64_t,
+ does_pointer_equal_42_as_int32_t,
+ ptr_should_point_to_42_as_int32_t,
},
close,
} = Bun.dlopen("/tmp/bun-ffi-test.dylib", types);
@@ -236,6 +248,11 @@ it("ffi run", () => {
expect(add_uint8_t(1, 1)).toBe(2);
expect(add_uint16_t(1, 1)).toBe(2);
expect(add_uint32_t(1, 1)).toBe(2);
+
+ const ptr = ptr_should_point_to_42_as_int32_t();
+ expect(ptr != 0).toBe(true);
+ expect(typeof ptr === "number").toBe(true);
+ expect(does_pointer_equal_42_as_int32_t(ptr)).toBe(true);
// expect(add_uint64_t(1, 1)).toBe(2);
close();
});