calls.js 2.79 KB
Newer Older
1 2 3 4
// Copyright 2015 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.

5 6
// Flags: --expose-wasm

7
d8.file.execute("test/mjsunit/wasm/wasm-module-builder.js");
8 9 10 11 12 13 14 15 16

function assertModule(module, memsize) {
  // Check the module exists.
  assertFalse(module === undefined);
  assertFalse(module === null);
  assertFalse(module === 0);
  assertEquals("object", typeof module);

  // Check the memory is an ArrayBuffer.
17
  var mem = module.exports.memory;
18 19 20 21
  assertFalse(mem === undefined);
  assertFalse(mem === null);
  assertFalse(mem === 0);
  assertEquals("object", typeof mem);
22 23 24 25
  assertTrue(mem instanceof WebAssembly.Memory);
  var buf = mem.buffer;
  assertTrue(buf instanceof ArrayBuffer);
  assertEquals(memsize, buf.byteLength);
26
  for (var i = 0; i < 4; i++) {
27
    module.exports.memory = 0;  // should be ignored
28 29 30
    mem.buffer = 0; // should be ignored
    assertSame(mem, module.exports.memory);
    assertSame(buf, mem.buffer);
31 32
  }
}
33

34 35 36 37 38 39 40 41 42
function assertFunction(module, func) {
  assertEquals("object", typeof module.exports);

  var exp = module.exports[func];
  assertFalse(exp === undefined);
  assertFalse(exp === null);
  assertFalse(exp === 0);
  assertEquals("function", typeof exp);
  return exp;
43 44
}

45 46 47 48 49
(function SubTest() {

  var builder = new WasmModuleBuilder();

  builder.addMemory(1, 1, true);
50
  builder.addFunction("sub", kSig_i_ii)
51
    .addBody([
52 53
      kExprLocalGet, 0,             // --
      kExprLocalGet, 1,             // --
54 55
      kExprI32Sub,                  // --
    ])
56 57 58 59 60 61 62 63 64 65
    .exportFunc()

  var module = builder.instantiate();
  assertModule(module, kPageSize);

  // Check the properties of the sub function.
  var sub = assertFunction(module, "sub");
  assertEquals(-55, sub(33, 88));
  assertEquals(-55555, sub(33333, 88888));
  assertEquals(-5555555, sub(3333333, 8888888));
66 67 68
})();


69 70 71
(function NopTest() {

  var builder = new WasmModuleBuilder();
72

73 74
  var kPages = 2;
  builder.addMemory(kPages, kPages, true);
75
  builder.addFunction("nop", kSig_v_v)
76 77 78 79 80 81 82 83 84
    .addBody([kExprNop])
    .exportFunc();

  var module = builder.instantiate();
  assertModule(module, kPageSize * kPages);

  var nop = assertFunction(module, "nop");
  assertEquals(undefined, nop());
})();
85 86 87


(function testLt() {
88 89 90 91
  var builder = new WasmModuleBuilder();

  var kPages = 3;
  builder.addMemory(kPages, kPages, true);
92
  builder.addFunction("flt", kSig_i_dd)
93
    .addBody([
94 95
      kExprLocalGet, 0,     // --
      kExprLocalGet, 1,     // --
96 97
      kExprF64Lt            // --
    ])                      // --
98 99 100 101 102 103 104 105 106
    .exportFunc();

  var module = builder.instantiate();
  assertModule(module, kPageSize * kPages);

  var flt = assertFunction(module, "flt");
  assertEquals(1, flt(-2, -1));
  assertEquals(0, flt(7.3, 7.1));
  assertEquals(1, flt(7.1, 7.3));
107
})();