// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// @dart = 2.9

// Test that we can create a WasmMemory, edit it, and grow it.

import "package:expect/expect.dart";
import "package:wasm/wasm.dart";
import "dart:typed_data";

void main() {
  // Empty wasm module.
  var data = Uint8List.fromList(
      [0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x06, 0x81, 0x00, 0x00]);
  var module = WasmModule(data);

  var mem = module.createMemory(100);
  Expect.equals(100, mem.lengthInPages);
  Expect.equals(100 * WasmMemory.kPageSizeInBytes, mem.lengthInBytes);

  mem[123] = 45;
  Expect.equals(45, mem[123]);

  mem.grow(10);
  Expect.equals(110, mem.lengthInPages);
  Expect.equals(110 * WasmMemory.kPageSizeInBytes, mem.lengthInBytes);
  Expect.equals(45, mem[123]);
}
