aboutsummaryrefslogtreecommitdiff
path: root/integration/bunjs-only-snippets/ffi.test.js
blob: 83a6c89503385b3d88f1736b342cc86b95b43ed5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
import { describe, it, expect } from "bun:test";

it("ffi print", () => {
  Bun.dlprint({
    add: {
      params: ["int32_t", "int32_t"],
      return_type: "int32_t",
    },
  })[0];
});

it("ffi run", () => {
  const {
    symbols: {
      returns_true,
      returns_false,
      returns_42_char,
      returns_42_float,
      returns_42_double,
      returns_42_uint8_t,
      returns_neg_42_int8_t,
      returns_42_uint16_t,
      returns_42_uint32_t,
      returns_42_uint64_t,
      returns_neg_42_int16_t,
      returns_neg_42_int32_t,
      returns_neg_42_int64_t,
      identity_char,
      identity_float,
      identity_bool,
      identity_double,
      identity_int8_t,
      identity_int16_t,
      identity_int32_t,
      identity_int64_t,
      identity_uint8_t,
      identity_uint16_t,
      identity_uint32_t,
      identity_uint64_t,
      add_char,
      add_float,
      add_double,
      add_int8_t,
      add_int16_t,
      add_int32_t,
      add_int64_t,
      add_uint8_t,
      add_uint16_t,
      add_uint32_t,
      add_uint64_t,
    },
    close,
  } = Bun.dlopen("/tmp/bun-ffi-test.dylib", {
    returns_true: {
      returns: "bool",
      expects: [],
    },
    returns_false: {
      returns: "bool",
      expects: [],
    },
    returns_42_char: {
      returns: "char",
      expects: [],
    },
    returns_42_float: {
      returns: "float",
      expects: [],
    },
    returns_42_double: {
      returns: "double",
      expects: [],
    },
    returns_42_uint8_t: {
      returns: "uint8_t",
      expects: [],
    },
    returns_neg_42_int8_t: {
      returns: "int8_t",
      expects: [],
    },
    returns_42_uint16_t: {
      returns: "uint16_t",
      expects: [],
    },
    returns_42_uint32_t: {
      returns: "uint32_t",
      expects: [],
    },
    returns_42_uint64_t: {
      returns: "uint64_t",
      expects: [],
    },
    returns_neg_42_int16_t: {
      returns: "int16_t",
      expects: [],
    },
    returns_neg_42_int32_t: {
      returns: "int32_t",
      expects: [],
    },
    returns_neg_42_int64_t: {
      returns: "int64_t",
      expects: [],
    },

    identity_char: {
      returns: "char",
      expects: ["char"],
    },
    identity_float: {
      returns: "float",
      expects: ["float"],
    },
    identity_bool: {
      returns: "bool",
      expects: ["bool"],
    },
    identity_double: {
      returns: "double",
      expects: ["double"],
    },
    identity_int8_t: {
      returns: "int8_t",
      expects: ["int8_t"],
    },
    identity_int16_t: {
      returns: "int16_t",
      expects: ["int16_t"],
    },
    identity_int32_t: {
      returns: "int32_t",
      expects: ["int32_t"],
    },
    identity_int64_t: {
      returns: "int64_t",
      expects: ["int64_t"],
    },
    identity_uint8_t: {
      returns: "uint8_t",
      expects: ["uint8_t"],
    },
    identity_uint16_t: {
      returns: "uint16_t",
      expects: ["uint16_t"],
    },
    identity_uint32_t: {
      returns: "uint32_t",
      expects: ["uint32_t"],
    },
    identity_uint64_t: {
      returns: "uint64_t",
      expects: ["uint64_t"],
    },

    add_char: {
      returns: "char",
      expects: ["char", "char"],
    },
    add_float: {
      returns: "float",
      expects: ["float", "float"],
    },
    add_double: {
      returns: "double",
      expects: ["double", "double"],
    },
    add_int8_t: {
      returns: "int8_t",
      expects: ["int8_t", "int8_t"],
    },
    add_int16_t: {
      returns: "int16_t",
      expects: ["int16_t", "int16_t"],
    },
    add_int32_t: {
      returns: "int32_t",
      expects: ["int32_t", "int32_t"],
    },
    add_int64_t: {
      returns: "int64_t",
      expects: ["int64_t", "int64_t"],
    },
    add_uint8_t: {
      returns: "uint8_t",
      expects: ["uint8_t", "uint8_t"],
    },
    add_uint16_t: {
      returns: "uint16_t",
      expects: ["uint16_t", "uint16_t"],
    },
    add_uint32_t: {
      returns: "uint32_t",
      expects: ["uint32_t", "uint32_t"],
    },
    add_uint64_t: {
      returns: "uint64_t",
      expects: ["uint64_t", "uint64_t"],
    },
  });
  expect(add_char(1, 1)).toBe(2);
  expect(add_float(1.1, 1.1)).toBe(2.2);
  expect(add_double(1.1, 1.1)).toBe(2.2);
  expect(add_int8_t(1, 1)).toBe(2);
  expect(add_int16_t(1, 1)).toBe(2);
  expect(add_int32_t(1, 1)).toBe(2);
  //   expect(add_int64_t(1, 1)).toBe(2);
  expect(add_uint8_t(1, 1)).toBe(2);
  expect(add_uint16_t(1, 1)).toBe(2);
  expect(add_uint32_t(1, 1)).toBe(2);
  //   expect(add_uint64_t(1, 1)).toBe(2);
  close();
});
``;