diff --git a/test/wasmmemsize.dir/asm_wasm.s b/test/wasmmemsize.dir/asm_wasm.s new file mode 100644 index 00000000000..daccfcc753d --- /dev/null +++ b/test/wasmmemsize.dir/asm_wasm.s @@ -0,0 +1,11 @@ +// 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 diff --git a/test/wasmmemsize.dir/main.go b/test/wasmmemsize.dir/main.go new file mode 100644 index 00000000000..d3beab2481c --- /dev/null +++ b/test/wasmmemsize.dir/main.go @@ -0,0 +1,30 @@ +// 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 diff --git a/test/wasmmemsize.go b/test/wasmmemsize.go new file mode 100644 index 00000000000..44981690871 --- /dev/null +++ b/test/wasmmemsize.go @@ -0,0 +1,11 @@ +// 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