test262-automation e9a5a7f918 [javascriptcore-test262-automation] changes from git@github.com:WebKit/webkit.git at sha 949e26452cfa153a7f4afe593da97e2fe9e1b706 on Tue Jul 03 2018 14:35:15 GMT-0400 (Eastern Daylight Time) (#1620)
* [javascriptcore-test262-automation] changes from git@github.com:WebKit/webkit.git at sha 949e26452cfa153a7f4afe593da97e2fe9e1b706 on Tue Jul 03 2018 14:35:15 GMT-0400 (Eastern Daylight Time)
2018-07-03 15:59:58 -04:00

118 lines
3.6 KiB
JavaScript

import Builder from '../Builder.js';
import * as assert from '../assert.js';
const iterations = 32;
const verbose = false;
// This API isn't part of WebAssembly's official spec. It is use for testing within the shell.
const version = 0x01;
const emptyModuleArray = Uint8Array.of(0x0, 0x61, 0x73, 0x6d, version, 0x00, 0x00, 0x00);
assert.isFunction(WebAssemblyMemoryMode);
const message = `WebAssemblyMemoryMode expects either a WebAssembly.Memory or WebAssembly.Instance`;
assert.throws(() => WebAssemblyMemoryMode(null), TypeError, message);
assert.throws(() => WebAssemblyMemoryMode(undefined), TypeError, message);
assert.throws(() => WebAssemblyMemoryMode(1), TypeError, message);
assert.throws(() => WebAssemblyMemoryMode(""), TypeError, message);
assert.throws(() => WebAssemblyMemoryMode({}), TypeError, message);
assert.throws(() => WebAssemblyMemoryMode(new WebAssembly.Module(emptyModuleArray)), TypeError, message);
assert.throws(() => WebAssemblyMemoryMode(new WebAssembly.Table({initial: 1, element: "anyfunc"})), TypeError, message);
const validateMode = what => {
const mode = WebAssemblyMemoryMode(what);
if (verbose)
print(` ${mode}`);
switch (mode) {
case "Signaling":
break;
case "BoundsChecking":
break;
default:
throw new Error(`Unexpected WebAssembly.Memory mode '${mode}'`);
}
return what;
}
const instantiate = builder => {
const bin = builder.WebAssembly();
const module = new WebAssembly.Module(bin.get());
return new WebAssembly.Instance(module);
};
(function testMemoryNoMax() {
if (verbose)
print(`testMemoryNoMax`);
let memories = [];
for (let i = 0; i != iterations; ++i)
memories.push(validateMode(new WebAssembly.Memory({ initial: i })));
return memories;
})();
fullGC();
(function testMemory() {
if (verbose)
print(`testMemory`);
let memories = [];
for (let i = 0; i != iterations; ++i)
memories.push(validateMode(new WebAssembly.Memory({ initial: i, maximum: i })));
return memories;
})();
fullGC();
(function testInstanceNoMemory() {
if (verbose)
print(`testInstanceNoMemory`);
let instances = [];
for (let i = 0; i != iterations; ++i) {
const builder = (new Builder())
.Type().End()
.Function().End()
.Code().End();
const instance = instantiate(builder);
// No-memory instances should never be Signaling: it would be wasteful.
assert.eq(WebAssemblyMemoryMode(instance), "BoundsChecking");
if (verbose)
print(` ${WebAssemblyMemoryMode(instance)}`);
instances.push(instance);
}
return instances;
})();
fullGC();
(function testInstanceNoMax() {
if (verbose)
print(`testInstanceNoMax`);
let instances = [];
for (let i = 0; i != iterations; ++i) {
// Note: not exported! The internal API can still access.
const builder = (new Builder())
.Type().End()
.Function().End()
.Memory().InitialMaxPages(i).End()
.Code().End();
instances.push(validateMode(instantiate(builder)));
}
})();
fullGC();
(function testInstance() {
if (verbose)
print(`testInstance`);
let instances = [];
for (let i = 0; i != iterations; ++i) {
// Note: not exported! The internal API can still access.
const builder = (new Builder())
.Type().End()
.Function().End()
.Memory().InitialMaxPages(i, i).End()
.Code().End();
instances.push(validateMode(instantiate(builder)));
}
})();