mirror of https://github.com/nodejs/node.git
140 lines
3.3 KiB
JavaScript
140 lines
3.3 KiB
JavaScript
// META: global=window,dedicatedworker,jsshell
|
|
// META: script=/wasm/jsapi/assertions.js
|
|
// META: script=/wasm/jsapi/memory/assertions.js
|
|
|
|
test(() => {
|
|
assert_function_name(WebAssembly.Memory, "Memory", "WebAssembly.Memory");
|
|
}, "name");
|
|
|
|
test(() => {
|
|
assert_function_length(WebAssembly.Memory, 1, "WebAssembly.Memory");
|
|
}, "length");
|
|
|
|
test(() => {
|
|
assert_throws_js(TypeError, () => new WebAssembly.Memory());
|
|
}, "No arguments");
|
|
|
|
test(() => {
|
|
const argument = { "initial": 0 };
|
|
assert_throws_js(TypeError, () => WebAssembly.Memory(argument));
|
|
}, "Calling");
|
|
|
|
test(() => {
|
|
const invalidArguments = [
|
|
undefined,
|
|
null,
|
|
false,
|
|
true,
|
|
"",
|
|
"test",
|
|
Symbol(),
|
|
1,
|
|
NaN,
|
|
{},
|
|
];
|
|
for (const invalidArgument of invalidArguments) {
|
|
assert_throws_js(TypeError,
|
|
() => new WebAssembly.Memory(invalidArgument),
|
|
`new Memory(${format_value(invalidArgument)})`);
|
|
}
|
|
}, "Invalid descriptor argument");
|
|
|
|
test(() => {
|
|
assert_throws_js(TypeError, () => new WebAssembly.Memory({ "initial": undefined }));
|
|
}, "Undefined initial value in descriptor");
|
|
|
|
const outOfRangeValues = [
|
|
NaN,
|
|
Infinity,
|
|
-Infinity,
|
|
-1,
|
|
0x100000000,
|
|
0x1000000000,
|
|
];
|
|
|
|
for (const value of outOfRangeValues) {
|
|
test(() => {
|
|
assert_throws_js(TypeError, () => new WebAssembly.Memory({ "initial": value }));
|
|
}, `Out-of-range initial value in descriptor: ${format_value(value)}`);
|
|
|
|
test(() => {
|
|
assert_throws_js(TypeError, () => new WebAssembly.Memory({ "initial": 0, "maximum": value }));
|
|
}, `Out-of-range maximum value in descriptor: ${format_value(value)}`);
|
|
}
|
|
|
|
test(() => {
|
|
assert_throws_js(RangeError, () => new WebAssembly.Memory({ "initial": 10, "maximum": 9 }));
|
|
}, "Initial value exceeds maximum");
|
|
|
|
test(() => {
|
|
const proxy = new Proxy({}, {
|
|
has(o, x) {
|
|
assert_unreached(`Should not call [[HasProperty]] with ${x}`);
|
|
},
|
|
get(o, x) {
|
|
// Due to the requirement not to supply both minimum and initial, we need to ignore one of them.
|
|
switch (x) {
|
|
case "shared":
|
|
return false;
|
|
case "initial":
|
|
case "maximum":
|
|
return 0;
|
|
default:
|
|
return undefined;
|
|
}
|
|
},
|
|
});
|
|
new WebAssembly.Memory(proxy);
|
|
}, "Proxy descriptor");
|
|
|
|
test(() => {
|
|
const order = [];
|
|
|
|
new WebAssembly.Memory({
|
|
get maximum() {
|
|
order.push("maximum");
|
|
return {
|
|
valueOf() {
|
|
order.push("maximum valueOf");
|
|
return 1;
|
|
},
|
|
};
|
|
},
|
|
|
|
get initial() {
|
|
order.push("initial");
|
|
return {
|
|
valueOf() {
|
|
order.push("initial valueOf");
|
|
return 1;
|
|
},
|
|
};
|
|
},
|
|
});
|
|
|
|
assert_array_equals(order, [
|
|
"initial",
|
|
"initial valueOf",
|
|
"maximum",
|
|
"maximum valueOf",
|
|
]);
|
|
}, "Order of evaluation for descriptor");
|
|
|
|
test(() => {
|
|
const argument = { "initial": 0 };
|
|
const memory = new WebAssembly.Memory(argument);
|
|
assert_Memory(memory, { "size": 0 });
|
|
}, "Zero initial");
|
|
|
|
test(() => {
|
|
const argument = { "initial": 4 };
|
|
const memory = new WebAssembly.Memory(argument);
|
|
assert_Memory(memory, { "size": 4 });
|
|
}, "Non-zero initial");
|
|
|
|
test(() => {
|
|
const argument = { "initial": 0 };
|
|
const memory = new WebAssembly.Memory(argument, {});
|
|
assert_Memory(memory, { "size": 0 });
|
|
}, "Stray argument");
|