| // Copyright 2016 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: --expose-wasm | 
 |  | 
 | load("test/mjsunit/wasm/wasm-module-builder.js"); | 
 |  | 
 | var debug = false; | 
 |  | 
 | function SimpleDataSegmentTest(offset) { | 
 |   print("SimpleDataSegmentTest(" + offset + ")..."); | 
 |   var builder = new WasmModuleBuilder(); | 
 |   builder.addMemory(1, 1, false); | 
 |   builder.addFunction("load", kSig_i_i) | 
 |     .addBody([kExprLocalGet, 0, kExprI32LoadMem, 0, 0]) | 
 |     .exportAs("load"); | 
 |   builder.addDataSegment(offset, [9, 9, 9, 9]); | 
 |  | 
 |   var buffer = builder.toBuffer(debug); | 
 |   var instance = new WebAssembly.Instance(new WebAssembly.Module(buffer)); | 
 |   for (var i = offset - 20; i < offset + 20; i += 4) { | 
 |     if (i < 0) continue; | 
 |     var expected = (i == offset) ? 151587081 : 0; | 
 |     assertEquals(expected, instance.exports.load(i)); | 
 |   } | 
 | } | 
 |  | 
 | SimpleDataSegmentTest(0); | 
 | SimpleDataSegmentTest(4); | 
 | SimpleDataSegmentTest(12); | 
 | SimpleDataSegmentTest(1064); | 
 |  | 
 | function GlobalImportedInitTest(pad) { | 
 |   print("GlobaleImportedInitTest(" + pad + ")..."); | 
 |   var builder = new WasmModuleBuilder(); | 
 |   builder.addMemory(1, 1, false); | 
 |  | 
 |   var g = builder.addImportedGlobal("mod", "offset", kWasmI32); | 
 |  | 
 |   while (pad-- > 0) builder.addGlobal(kWasmI32);  // pad | 
 |  | 
 |   builder.addFunction("load", kSig_i_i) | 
 |     .addBody([kExprLocalGet, 0, kExprI32LoadMem, 0, 0]) | 
 |     .exportAs("load"); | 
 |   builder.addDataSegment(g.index, [5, 5, 5, 5], true); | 
 |  | 
 |   var buffer = builder.toBuffer(debug); | 
 |   var module = new WebAssembly.Module(buffer); | 
 |  | 
 |   for (var offset of [0, 12, 192, 1024]) { | 
 |     var instance = new WebAssembly.Instance(module, {mod: {offset: offset}}); | 
 |     for (var i = offset - 20; i < offset + 20; i += 4) { | 
 |       if (i < 0) continue; | 
 |       var expected = i == offset ? 84215045 : 0; | 
 |       assertEquals(expected, instance.exports.load(i)); | 
 |     } | 
 |   } | 
 | } | 
 |  | 
 | GlobalImportedInitTest(0); | 
 | GlobalImportedInitTest(1); | 
 | GlobalImportedInitTest(4); |