Files
wazero/internal/asm/assembler_test.go
Takeshi Yoneda 70c5e03836 compiler(amd64): reuses static consts properly (#1382)
Signed-off-by: Takeshi Yoneda <takeshi@tetrate.io>
2023-04-19 16:18:01 +09:00

47 lines
1.3 KiB
Go

package asm
import (
"testing"
"github.com/tetratelabs/wazero/internal/testing/require"
)
func TestNewStaticConstPool(t *testing.T) {
p := NewStaticConstPool()
require.NotNil(t, p.addedConsts)
}
func TestStaticConst_AddOffsetFinalizedCallback(t *testing.T) {
p := NewStaticConstPool()
const firstUseOffset uint64 = 100
// Add first const.
c := NewStaticConst([]byte{1})
p.AddConst(c, firstUseOffset)
require.Equal(t, firstUseOffset, p.FirstUseOffsetInBinary)
require.Equal(t, 1, len(p.Consts))
require.Equal(t, 1, len(p.addedConsts))
// Adding the same *StaticConst doesn't affect the state.
p.AddConst(c, firstUseOffset+10000)
require.Equal(t, firstUseOffset, p.FirstUseOffsetInBinary)
require.Equal(t, 1, len(p.Consts))
require.Equal(t, 1, len(p.addedConsts))
// Add another const.
c2 := NewStaticConst([]byte{1, 2})
p.AddConst(c2, firstUseOffset+100)
require.Equal(t, firstUseOffset, p.FirstUseOffsetInBinary) // first use doesn't change!
require.Equal(t, 2, len(p.Consts))
require.Equal(t, 2, len(p.addedConsts))
}
func TestStaticConst_SetOffsetInBinary(t *testing.T) {
sc := NewStaticConst([]byte{1})
const offset uint64 = 100
sc.AddOffsetFinalizedCallback(func(offsetOfConstInBinary uint64) {
require.Equal(t, offset, offsetOfConstInBinary)
})
sc.SetOffsetInBinary(offset)
}