blob: 1bd84b82f3bf527384fa74160b013ff89622193a [file] [log] [blame]
// Copyright (c) 2026, 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.
// dart2wasmOptions=--extra-compiler-option=--enable-experimental-wasm-interop
import 'dart:_wasm';
import 'package:expect/expect.dart';
@pragma('wasm:memory-type', MemoryType(limits: Limits(1, 10)))
external Memory get _memory;
void main() {
_testSizeAndGrow();
_testFill();
_testFloat();
_testInt();
_testOffset();
}
void _testSizeAndGrow() {
Expect.equals(1, _memory.size);
Expect.equals(1, _memory.grow(1));
Expect.equals(2, _memory.size);
Expect.equals(0, _memory.loadInt32(Memory.pageSize + 1).toIntSigned());
Expect.equals(-1, _memory.grow(20));
}
void _testFill() {
_memory.fill(WasmI32.fromInt(42), 0, 1024);
for (var i = 0; i < 1024; i++) {
Expect.equals(42, _memory.loadUint8(i).toIntSigned());
}
}
void _testFloat() {
_memory.storeFloat64(0, WasmF64.fromDouble(1.5));
Expect.equals(1.5, _memory.loadFloat64(0).toDouble());
_memory.storeFloat32(0, WasmF32.fromDouble(1.5));
Expect.equals(1.5, _memory.loadFloat32(0).toDouble());
}
void _testInt() {
_memory.storeInt8(0, WasmI32.fromInt(-1));
Expect.equals(-1, _memory.loadInt8(0).toIntSigned());
Expect.equals(255, _memory.loadUint8(0).toIntUnsigned());
}
void _testOffset() {
_memory.storeInt32(0, WasmI32.fromInt(0x01020304));
Expect.equals(0x01, _memory.loadInt8(0, offset: 3).toIntSigned());
Expect.equals(0x02, _memory.loadInt8(0, offset: 2).toIntSigned());
Expect.equals(0x03, _memory.loadInt8(0, offset: 1).toIntSigned());
Expect.equals(0x04, _memory.loadInt8(0, offset: 0).toIntSigned());
}