--- /dev/null
+// Copyright 2024 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+#include "textflag.h"
+
+TEXT ·currentMemory(SB), NOSPLIT, $0
+ Get SP
+ CurrentMemory
+ I32Store ret+0(FP)
+ RET
--- /dev/null
+// Copyright 2024 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+import (
+ "fmt"
+ "io"
+)
+
+// Expect 8 MB of memory usage for a small wasm program.
+// This reflects the current allocator. We test an exact
+// value here, but if the allocator changes, we can update
+// or relax this.
+const want = 8 << 20
+
+var w = io.Discard
+
+func main() {
+ fmt.Fprintln(w, "hello world")
+
+ const pageSize = 64 * 1024
+ sz := uintptr(currentMemory()) * pageSize
+ if sz != want {
+ fmt.Printf("FAIL: unexpected memory size %d, want %d\n", sz, want)
+ }
+}
+
+func currentMemory() int32 // implemented in assembly
--- /dev/null
+// runindir
+
+// Copyright 2024 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// This test checks the memory size of a small wasm program.
+
+//go:build wasm
+
+package ignored