// Copyright 2020 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-typed-funcref

d8.file.execute('test/mjsunit/wasm/wasm-module-builder.js');

// Export an arbitrary function from a Wasm module (identity).
let foo = (() => {
  let builder = new WasmModuleBuilder();
  builder.addFunction('foo', kSig_i_i)
      .addBody([kExprLocalGet, 0])
      .exportAs('foo');
  let module = new WebAssembly.Module(builder.toBuffer());
  return (new WebAssembly.Instance(builder.toModule())).exports.foo;
})();

(function TableGrowWithInitializer() {
  print(arguments.callee.name);
  var table =
      new WebAssembly.Table({element: 'anyfunc', initial: 0, maximum: 100});

  table.grow(10);
  table.grow(10, foo);
  table.grow(10, null);
  table.grow(10, undefined);

  for (let i = 0; i < 10; i++) {
    assertNull(table.get(i));
  }
  for (let i = 10; i < 20; i++) {
    assertEquals(foo, table.get(i));
  }
  for (let i = 20; i < 40; i++) {
    assertNull(table.get(i));
  }
})();