2017-07-10 21:56:49 +00:00
|
|
|
// Copyright 2017 the V8 project authors. All rights reserved.
|
|
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
|
|
// found in the LICENSE file.
|
|
|
|
|
|
|
|
// Flags: --experimental-wasm-threads
|
|
|
|
|
2017-09-14 06:14:48 +00:00
|
|
|
load("test/mjsunit/wasm/wasm-constants.js");
|
|
|
|
load("test/mjsunit/wasm/wasm-module-builder.js");
|
|
|
|
|
2017-07-10 21:56:49 +00:00
|
|
|
function assertMemoryIsValid(memory) {
|
|
|
|
assertSame(WebAssembly.Memory.prototype, memory.__proto__);
|
|
|
|
assertSame(WebAssembly.Memory, memory.constructor);
|
|
|
|
assertTrue(memory instanceof Object);
|
|
|
|
assertTrue(memory instanceof WebAssembly.Memory);
|
|
|
|
}
|
|
|
|
|
|
|
|
(function TestConstructorWithShared() {
|
|
|
|
print("TestConstructorWithShared");
|
|
|
|
let memory = new WebAssembly.Memory({
|
|
|
|
initial: 0, maximum: 10, shared: true});
|
|
|
|
assertMemoryIsValid(memory);
|
|
|
|
// Assert that the buffer is frozen when memory is shared.
|
|
|
|
assertTrue(Object.isFrozen(memory.buffer));
|
|
|
|
})();
|
|
|
|
|
|
|
|
(function TestConstructorWithUndefinedShared() {
|
|
|
|
print("TestConstructorWithUndefinedShared");
|
|
|
|
// Maximum = undefined, shared = undefined.
|
|
|
|
let memory = new WebAssembly.Memory({
|
|
|
|
initial: 0, maximum: undefined, shared: undefined});
|
|
|
|
assertMemoryIsValid(memory);
|
|
|
|
})();
|
|
|
|
|
|
|
|
(function TestConstructorWithNumericShared() {
|
|
|
|
print("TestConstructorWithNumericShared");
|
|
|
|
// For numeric values, shared = true.
|
|
|
|
let memory = new WebAssembly.Memory({
|
|
|
|
initial: 0, maximum: 10, shared: 2098665});
|
|
|
|
assertMemoryIsValid(memory);
|
|
|
|
})();
|
|
|
|
|
|
|
|
(function TestConstructorWithEmptyStringShared() {
|
|
|
|
print("TestConstructorWithEmptyStringShared");
|
|
|
|
// Maximum = undefined, shared = false.
|
|
|
|
let memory = new WebAssembly.Memory({
|
|
|
|
initial: 0, maximum: undefined, shared: ""});
|
|
|
|
assertMemoryIsValid(memory);
|
|
|
|
})();
|
|
|
|
|
|
|
|
(function TestConstructorWithUndefinedMaxShared() {
|
|
|
|
print("TestConstructorWithUndefinedMaxShared");
|
|
|
|
// New memory with Maximum = undefined, shared = true => TypeError.
|
|
|
|
assertThrows(() => new WebAssembly.Memory({initial: 0, shared: true}),
|
|
|
|
TypeError);
|
|
|
|
})();
|
2017-09-14 06:14:48 +00:00
|
|
|
|
|
|
|
(function TestCompileWithUndefinedShared() {
|
|
|
|
print("TestCompileWithUndefinedShared");
|
|
|
|
let memory = new WebAssembly.Memory({
|
|
|
|
initial: 0, maximum: 10, shared: true});
|
|
|
|
let builder = new WasmModuleBuilder();
|
|
|
|
builder.addImportedMemory("m", "imported_mem", 0, undefined, "shared");
|
|
|
|
assertThrows(() => new WebAssembly.Module(builder.toBuffer()),
|
|
|
|
WebAssembly.CompileError);
|
|
|
|
})();
|
|
|
|
|
|
|
|
(function TestCompileAtomicOpUndefinedShared() {
|
|
|
|
print("TestCompileAtomicOpUndefinedShared");
|
|
|
|
let memory = new WebAssembly.Memory({
|
|
|
|
initial: 0, maximum: 10, shared: true});
|
|
|
|
let builder = new WasmModuleBuilder();
|
|
|
|
builder.addFunction("main", kSig_i_ii)
|
|
|
|
.addBody([
|
|
|
|
kExprGetLocal, 0,
|
|
|
|
kExprGetLocal, 1,
|
|
|
|
kAtomicPrefix,
|
|
|
|
kExprI32AtomicAdd]);
|
|
|
|
builder.addImportedMemory("m", "imported_mem");
|
|
|
|
assertThrows(() => new WebAssembly.Module(builder.toBuffer()),
|
|
|
|
WebAssembly.CompileError);
|
|
|
|
})();
|
|
|
|
|
|
|
|
(function TestInstantiateWithUndefinedShared() {
|
|
|
|
print("TestInstantiateWithUndefinedShared");
|
|
|
|
let memory = new WebAssembly.Memory({
|
|
|
|
initial: 0, maximum: 10, shared: true});
|
|
|
|
let builder = new WasmModuleBuilder();
|
|
|
|
builder.addImportedMemory("m", "imported_mem");
|
|
|
|
let module = new WebAssembly.Module(builder.toBuffer());
|
|
|
|
assertThrows(() => new WebAssembly.Instance(module,
|
|
|
|
{m: {imported_mem: memory}}), WebAssembly.LinkError);
|
|
|
|
})();
|
|
|
|
|
|
|
|
(function TestInstantiateWithImportNotSharedDefined() {
|
|
|
|
print("TestInstantiateWithImportNotSharedDefined");
|
|
|
|
let memory = new WebAssembly.Memory({
|
|
|
|
initial: 0, maximum: 10, shared: false});
|
|
|
|
let builder = new WasmModuleBuilder();
|
|
|
|
builder.addImportedMemory("m", "imported_mem", 0, 10, "shared");
|
|
|
|
let module = new WebAssembly.Module(builder.toBuffer());
|
|
|
|
assertThrows(() => new WebAssembly.Instance(module,
|
|
|
|
{m: {imported_mem: memory}}), WebAssembly.LinkError);
|
|
|
|
})();
|