Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 9 additions & 7 deletions interpreter/script/js.ml
Original file line number Diff line number Diff line change
Expand Up @@ -161,19 +161,21 @@ function assert_return(action, loc, ...expected) {
throw new Error(expected.length + " value(s) expected, got " + actual.length);
}
for (let i = 0; i < actual.length; ++i) {
let actual_i;
try { actual_i = "" + actual[i] } catch { actual_i = typeof actual[i] }
switch (expected[i]) {
case "nan:canonical":
case "nan:arithmetic":
case "nan:any":
// Note that JS can't reliably distinguish different NaN values,
// so there's no good way to test that it's a canonical NaN.
if (!Number.isNaN(actual[i])) {
throw new Error("Wasm NaN return value expected, got " + actual[i]);
throw new Error("Wasm NaN return value expected, got " + actual_i);
};
return;
case "ref.i31":
if (typeof actual[i] !== "number" || (actual[i] & 0x7fffffff) !== actual[i]) {
throw new Error("Wasm i31 return value expected, got " + actual[i]);
throw new Error("Wasm i31 return value expected, got " + actual_i);
};
return;
case "ref.any":
Expand All @@ -183,27 +185,27 @@ function assert_return(action, loc, ...expected) {
// For now, JS can't distinguish exported Wasm GC values,
// so we only test for object.
if (typeof actual[i] !== "object") {
throw new Error("Wasm object return value expected, got " + actual[i]);
throw new Error("Wasm object return value expected, got " + actual_i);
};
return;
case "ref.func":
if (typeof actual[i] !== "function") {
throw new Error("Wasm function return value expected, got " + actual[i]);
throw new Error("Wasm function return value expected, got " + actual_i);
};
return;
case "ref.extern":
if (actual[i] === null) {
throw new Error("Wasm reference return value expected, got " + actual[i]);
throw new Error("Wasm reference return value expected, got " + actual_i);
};
return;
case "ref.null":
if (actual[i] !== null) {
throw new Error("Wasm null return value expected, got " + actual[i]);
throw new Error("Wasm null return value expected, got " + actual_i);
};
return;
default:
if (!Object.is(actual[i], expected[i])) {
throw new Error("Wasm return value " + expected[i] + " expected, got " + actual[i]);
throw new Error("Wasm return value " + expected[i] + " expected, got " + actual_i);
};
}
}
Expand Down
14 changes: 8 additions & 6 deletions test/harness/async_index.js
Original file line number Diff line number Diff line change
Expand Up @@ -318,33 +318,35 @@ function assert_return(action, source, ...expected) {
throw new Error(expected.length + " value(s) expected, got " + actual.length);
}
for (let i = 0; i < actual.length; ++i) {
let actual_i;
try { actual_i = "" + actual[i] } catch (e) { actual_i = typeof actual[i] }
switch (expected[i]) {
case "nan:canonical":
case "nan:arithmetic":
case "nan:any":
// Note that JS can't reliably distinguish different NaN values,
// so there's no good way to test that it's a canonical NaN.
assert_true(Number.isNaN(actual[i]), `expected NaN, observed ${actual[i]}.`);
assert_true(Number.isNaN(actual[i]), `expected NaN, observed ${actual_i}.`);
return;
case "ref.i31":
assert_true(typeof actual[i] === "number" && (actual[i] & 0x7fffffff) === actual[i], `expected Wasm i31, got ${actual[i]}`);
assert_true(typeof actual[i] === "number" && (actual[i] & 0x7fffffff) === actual[i], `expected Wasm i31, got ${actual_i}`);
return;
case "ref.any":
case "ref.eq":
case "ref.struct":
case "ref.array":
// For now, JS can't distinguish exported Wasm GC values,
// so we only test for object.
assert_true(typeof actual[i] === "object", `expected Wasm GC object, got ${actual[i]}`);
assert_true(typeof actual[i] === "object", `expected Wasm GC object, got ${actual_i}`);
return;
case "ref.func":
assert_true(typeof actual[i] === "function", `expected Wasm function, got ${actual[i]}`);
assert_true(typeof actual[i] === "function", `expected Wasm function, got ${actual_i}`);
return;
case "ref.extern":
assert_true(actual[i] !== null, `expected Wasm reference, got ${actual[i]}`);
assert_true(actual[i] !== null, `expected Wasm reference, got ${actual_i}`);
return;
case "ref.null":
assert_true(actual[i] === null, `expected Wasm null reference, got ${actual[i]}`);
assert_true(actual[i] === null, `expected Wasm null reference, got ${actual_i}`);
return;
default:
assert_equals(actual[i], expected[i], loc);
Expand Down
14 changes: 8 additions & 6 deletions test/harness/sync_index.js
Original file line number Diff line number Diff line change
Expand Up @@ -387,33 +387,35 @@ function assert_return(action, source, ...expected) {
return;
expected[i] = expected[i].value;
}
let actual_i;
try { actual_i = "" + actual[i] } catch (e) { actual_i = typeof actual[i] }
switch (expected[i]) {
case "nan:canonical":
case "nan:arithmetic":
case "nan:any":
// Note that JS can't reliably distinguish different NaN values,
// so there's no good way to test that it's a canonical NaN.
assert_true(Number.isNaN(actual[i]), `expected NaN, observed ${actual[i]}.`);
assert_true(Number.isNaN(actual[i]), `expected NaN, observed ${actual_i}.`);
return;
case "ref.i31":
assert_true(typeof actual[i] === "number" && (actual[i] & 0x7fffffff) === actual[i], `expected Wasm i31, got ${actual[i]}`);
assert_true(typeof actual[i] === "number" && (actual[i] & 0x7fffffff) === actual[i], `expected Wasm i31, got ${actual_i}`);
return;
case "ref.any":
case "ref.eq":
case "ref.struct":
case "ref.array":
// For now, JS can't distinguish exported Wasm GC values,
// so we only test for object.
assert_true(typeof actual[i] === "object", `expected Wasm GC object, got ${actual[i]}`);
assert_true(typeof actual[i] === "object", `expected Wasm GC object, got ${actual_i}`);
return;
case "ref.func":
assert_true(typeof actual[i] === "function", `expected Wasm function, got ${actual[i]}`);
assert_true(typeof actual[i] === "function", `expected Wasm function, got ${actual_i}`);
return;
case "ref.extern":
assert_true(actual[i] !== null, `expected Wasm reference, got ${actual[i]}`);
assert_true(actual[i] !== null, `expected Wasm reference, got ${actual_i}`);
return;
case "ref.null":
assert_true(actual[i] === null, `expected Wasm null reference, got ${actual[i]}`);
assert_true(actual[i] === null, `expected Wasm null reference, got ${actual_i}`);
return;
default:
assert_equals(actual[i], expected[i]);
Expand Down