Skip to content

Commit

Permalink
Add binding for array of bool
Browse files Browse the repository at this point in the history
  • Loading branch information
maxime-petitjean authored and Yves committed Feb 17, 2021
1 parent 10b68a5 commit 3e55c4a
Show file tree
Hide file tree
Showing 4 changed files with 93 additions and 9 deletions.
46 changes: 46 additions & 0 deletions lib/asbind-instance/supported-ref-types.js
Expand Up @@ -299,6 +299,22 @@ export const SUPPORTED_REF_TYPES = {
.map(value => wasmExports.__getString(value));
}
},
BOOLARRAY: {
isTypeFromArgument: arg => {
return Array.isArray(arg) && typeof arg[0] === "boolean";
},
isTypeFromReference: (wasmExports, ref) => {
return wasmExports.__instanceof(ref, wasmExports.__asbind_BoolArray_ID);
},
getRef: (wasmExports, arg) => {
return wasmExports.__pin(
wasmExports.__newArray(wasmExports.__asbind_BoolArray_ID, arg)
);
},
getValueFromRef: (wasmExports, responseRef) => {
return wasmExports.__getArray(responseRef).map(value => !!value);
}
},
I32ARRAYARRAY: {
isTypeFromArgument: arg => {
return (
Expand Down Expand Up @@ -396,6 +412,36 @@ export const SUPPORTED_REF_TYPES = {
wasmExports.__getArray(value).map(v => wasmExports.__getString(v))
);
}
},
BOOLARRAYARRAY: {
isTypeFromArgument: arg => {
return (
Array.isArray(arg) &&
Array.isArray(arg[0]) &&
typeof arg[0][0] === "boolean"
);
},
isTypeFromReference: (wasmExports, ref) => {
return wasmExports.__instanceof(
ref,
wasmExports.__asbind_BoolArrayArray_ID
);
},
getRef: (wasmExports, arg) => {
const refs = arg.map(value =>
wasmExports.__pin(
wasmExports.__newArray(wasmExports.__asbind_BoolArray_ID, value)
)
);
return wasmExports.__pin(
wasmExports.__newArray(wasmExports.__asbind_BoolArrayArray_ID, refs)
);
},
getValueFromRef: (wasmExports, responseRef) => {
return wasmExports
.__getArray(responseRef)
.map(value => wasmExports.__getArray(value).map(v => !!v));
}
}
};

Expand Down
4 changes: 3 additions & 1 deletion lib/assembly/as-bind.ts
Expand Up @@ -27,6 +27,8 @@ export const __asbind_Uint64Array_ID = idof<Uint64Array>();
export const __asbind_I32Array_ID = idof<Array<i32>>();
export const __asbind_I64Array_ID = idof<Array<i64>>();
export const __asbind_StringArray_ID = idof<Array<string>>();
export const __asbind_BoolArray_ID = idof<Array<bool>>();
export const __asbind_I32ArrayArray_ID = idof<Array<Array<i32>>>();
export const __asbind_I64ArrayArray_ID = idof<Array<Array<i64>>>();
export const __asbind_StringArrayArray_ID = idof<Array<Array<String>>>();
export const __asbind_StringArrayArray_ID = idof<Array<Array<string>>>();
export const __asbind_BoolArrayArray_ID = idof<Array<Array<bool>>>();
24 changes: 18 additions & 6 deletions test/assembly/test.ts
Expand Up @@ -93,8 +93,12 @@ export function mapI64Array(array: Array<i64>): Array<i64> {
return array.map<i64>((value: i64) => value * 2);
}

export function mapStringArray(array: Array<String>): Array<String> {
return array.map<String>((value: String) => "#" + value);
export function mapStringArray(array: Array<string>): Array<string> {
return array.map<string>((value: string) => "#" + value);
}

export function mapBoolArray(array: Array<bool>): Array<bool> {
return array.map<bool>((value: bool) => !value);
}

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

export function mapStringArrayArray(
array: Array<Array<String>>
): Array<Array<String>> {
return array.map<Array<String>>((value: Array<String>) =>
value.map<String>((v: String) => "#" + v)
array: Array<Array<string>>
): Array<Array<string>> {
return array.map<Array<string>>((value: Array<string>) =>
value.map<string>((v: string) => "#" + v)
);
}

export function mapBoolArrayArray(
array: Array<Array<bool>>
): Array<Array<bool>> {
return array.map<Array<bool>>((value: Array<bool>) =>
value.map<bool>((v: bool) => !v)
);
}

Expand Down
28 changes: 26 additions & 2 deletions test/test.js
Expand Up @@ -278,7 +278,7 @@ describe("asbind", () => {
assert.equal(arrayMapResponse[0], BigInt(2));
});

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

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

it(`should handle array of bool`, () => {
const array = [true, false, true];
const arrayMapResponse = asbindInstance.exports["mapBoolArray"](array);

// Ensure it is a type array
assert.equal(Array.isArray(arrayMapResponse), true);

// Ensure it has the correct values
assert.equal(arrayMapResponse[0], false);
});

it(`should handle array of array of i32`, () => {
const array = [[1], [2, 3], [4]];
const arrayMapResponse = asbindInstance.exports["mapI32ArrayArray"](
Expand All @@ -315,7 +326,7 @@ describe("asbind", () => {
assert.equal(arrayMapResponse[1][0], BigInt(4));
});

it(`should handle array of array of String`, () => {
it(`should handle array of array of string`, () => {
const array = [["a"], ["b", "c"], ["d"]];
const arrayMapResponse = asbindInstance.exports["mapStringArrayArray"](
array
Expand All @@ -327,6 +338,19 @@ describe("asbind", () => {
// Ensure it has the correct values
assert.equal(arrayMapResponse[1][0], "#b");
});

it(`should handle array of array of bool`, () => {
const array = [[true], [false, true], [false]];
const arrayMapResponse = asbindInstance.exports["mapBoolArrayArray"](
array
);

// Ensure it is a type array
assert.equal(Array.isArray(arrayMapResponse), true);

// Ensure it has the correct values
assert.equal(arrayMapResponse[1][0], true);
});
});

describe("importObject functions", () => {
Expand Down

0 comments on commit 3e55c4a

Please sign in to comment.