Skip to content

Commit 3e55c4a

Browse files
maxime-petitjeanYves
authored andcommitted
Add binding for array of bool
1 parent 10b68a5 commit 3e55c4a

File tree

4 files changed

+93
-9
lines changed

4 files changed

+93
-9
lines changed

lib/asbind-instance/supported-ref-types.js

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,22 @@ export const SUPPORTED_REF_TYPES = {
299299
.map(value => wasmExports.__getString(value));
300300
}
301301
},
302+
BOOLARRAY: {
303+
isTypeFromArgument: arg => {
304+
return Array.isArray(arg) && typeof arg[0] === "boolean";
305+
},
306+
isTypeFromReference: (wasmExports, ref) => {
307+
return wasmExports.__instanceof(ref, wasmExports.__asbind_BoolArray_ID);
308+
},
309+
getRef: (wasmExports, arg) => {
310+
return wasmExports.__pin(
311+
wasmExports.__newArray(wasmExports.__asbind_BoolArray_ID, arg)
312+
);
313+
},
314+
getValueFromRef: (wasmExports, responseRef) => {
315+
return wasmExports.__getArray(responseRef).map(value => !!value);
316+
}
317+
},
302318
I32ARRAYARRAY: {
303319
isTypeFromArgument: arg => {
304320
return (
@@ -396,6 +412,36 @@ export const SUPPORTED_REF_TYPES = {
396412
wasmExports.__getArray(value).map(v => wasmExports.__getString(v))
397413
);
398414
}
415+
},
416+
BOOLARRAYARRAY: {
417+
isTypeFromArgument: arg => {
418+
return (
419+
Array.isArray(arg) &&
420+
Array.isArray(arg[0]) &&
421+
typeof arg[0][0] === "boolean"
422+
);
423+
},
424+
isTypeFromReference: (wasmExports, ref) => {
425+
return wasmExports.__instanceof(
426+
ref,
427+
wasmExports.__asbind_BoolArrayArray_ID
428+
);
429+
},
430+
getRef: (wasmExports, arg) => {
431+
const refs = arg.map(value =>
432+
wasmExports.__pin(
433+
wasmExports.__newArray(wasmExports.__asbind_BoolArray_ID, value)
434+
)
435+
);
436+
return wasmExports.__pin(
437+
wasmExports.__newArray(wasmExports.__asbind_BoolArrayArray_ID, refs)
438+
);
439+
},
440+
getValueFromRef: (wasmExports, responseRef) => {
441+
return wasmExports
442+
.__getArray(responseRef)
443+
.map(value => wasmExports.__getArray(value).map(v => !!v));
444+
}
399445
}
400446
};
401447

lib/assembly/as-bind.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ export const __asbind_Uint64Array_ID = idof<Uint64Array>();
2727
export const __asbind_I32Array_ID = idof<Array<i32>>();
2828
export const __asbind_I64Array_ID = idof<Array<i64>>();
2929
export const __asbind_StringArray_ID = idof<Array<string>>();
30+
export const __asbind_BoolArray_ID = idof<Array<bool>>();
3031
export const __asbind_I32ArrayArray_ID = idof<Array<Array<i32>>>();
3132
export const __asbind_I64ArrayArray_ID = idof<Array<Array<i64>>>();
32-
export const __asbind_StringArrayArray_ID = idof<Array<Array<String>>>();
33+
export const __asbind_StringArrayArray_ID = idof<Array<Array<string>>>();
34+
export const __asbind_BoolArrayArray_ID = idof<Array<Array<bool>>>();

test/assembly/test.ts

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,12 @@ export function mapI64Array(array: Array<i64>): Array<i64> {
9393
return array.map<i64>((value: i64) => value * 2);
9494
}
9595

96-
export function mapStringArray(array: Array<String>): Array<String> {
97-
return array.map<String>((value: String) => "#" + value);
96+
export function mapStringArray(array: Array<string>): Array<string> {
97+
return array.map<string>((value: string) => "#" + value);
98+
}
99+
100+
export function mapBoolArray(array: Array<bool>): Array<bool> {
101+
return array.map<bool>((value: bool) => !value);
98102
}
99103

100104
export function mapI32ArrayArray(array: Array<Array<i32>>): Array<Array<i32>> {
@@ -110,10 +114,18 @@ export function mapI64ArrayArray(array: Array<Array<i64>>): Array<Array<i64>> {
110114
}
111115

112116
export function mapStringArrayArray(
113-
array: Array<Array<String>>
114-
): Array<Array<String>> {
115-
return array.map<Array<String>>((value: Array<String>) =>
116-
value.map<String>((v: String) => "#" + v)
117+
array: Array<Array<string>>
118+
): Array<Array<string>> {
119+
return array.map<Array<string>>((value: Array<string>) =>
120+
value.map<string>((v: string) => "#" + v)
121+
);
122+
}
123+
124+
export function mapBoolArrayArray(
125+
array: Array<Array<bool>>
126+
): Array<Array<bool>> {
127+
return array.map<Array<bool>>((value: Array<bool>) =>
128+
value.map<bool>((v: bool) => !v)
117129
);
118130
}
119131

test/test.js

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ describe("asbind", () => {
278278
assert.equal(arrayMapResponse[0], BigInt(2));
279279
});
280280

281-
it(`should handle array of String`, () => {
281+
it(`should handle array of string`, () => {
282282
const array = ["a", "b", "c"];
283283
const arrayMapResponse = asbindInstance.exports["mapStringArray"](array);
284284

@@ -289,6 +289,17 @@ describe("asbind", () => {
289289
assert.equal(arrayMapResponse[0], "#a");
290290
});
291291

292+
it(`should handle array of bool`, () => {
293+
const array = [true, false, true];
294+
const arrayMapResponse = asbindInstance.exports["mapBoolArray"](array);
295+
296+
// Ensure it is a type array
297+
assert.equal(Array.isArray(arrayMapResponse), true);
298+
299+
// Ensure it has the correct values
300+
assert.equal(arrayMapResponse[0], false);
301+
});
302+
292303
it(`should handle array of array of i32`, () => {
293304
const array = [[1], [2, 3], [4]];
294305
const arrayMapResponse = asbindInstance.exports["mapI32ArrayArray"](
@@ -315,7 +326,7 @@ describe("asbind", () => {
315326
assert.equal(arrayMapResponse[1][0], BigInt(4));
316327
});
317328

318-
it(`should handle array of array of String`, () => {
329+
it(`should handle array of array of string`, () => {
319330
const array = [["a"], ["b", "c"], ["d"]];
320331
const arrayMapResponse = asbindInstance.exports["mapStringArrayArray"](
321332
array
@@ -327,6 +338,19 @@ describe("asbind", () => {
327338
// Ensure it has the correct values
328339
assert.equal(arrayMapResponse[1][0], "#b");
329340
});
341+
342+
it(`should handle array of array of bool`, () => {
343+
const array = [[true], [false, true], [false]];
344+
const arrayMapResponse = asbindInstance.exports["mapBoolArrayArray"](
345+
array
346+
);
347+
348+
// Ensure it is a type array
349+
assert.equal(Array.isArray(arrayMapResponse), true);
350+
351+
// Ensure it has the correct values
352+
assert.equal(arrayMapResponse[1][0], true);
353+
});
330354
});
331355

332356
describe("importObject functions", () => {

0 commit comments

Comments
 (0)