168 lines
4.0 KiB
Go
168 lines
4.0 KiB
Go
package wazerotest
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"reflect"
|
|
"testing"
|
|
|
|
"github.com/tetratelabs/wazero/api"
|
|
)
|
|
|
|
func TestNewFunction(t *testing.T) {
|
|
tests := []struct {
|
|
in any
|
|
out *Function
|
|
}{
|
|
{
|
|
in: func(ctx context.Context, mod api.Module) {},
|
|
out: &Function{
|
|
ParamTypes: []api.ValueType{},
|
|
ResultTypes: []api.ValueType{},
|
|
},
|
|
},
|
|
|
|
{
|
|
in: func(ctx context.Context, mod api.Module, v uint32) {},
|
|
out: &Function{
|
|
ParamTypes: []api.ValueType{api.ValueTypeI32},
|
|
ResultTypes: []api.ValueType{},
|
|
},
|
|
},
|
|
|
|
{
|
|
in: func(ctx context.Context, mod api.Module, v uint64) {},
|
|
out: &Function{
|
|
ParamTypes: []api.ValueType{api.ValueTypeI64},
|
|
ResultTypes: []api.ValueType{},
|
|
},
|
|
},
|
|
|
|
{
|
|
in: func(ctx context.Context, mod api.Module, v int32) {},
|
|
out: &Function{
|
|
ParamTypes: []api.ValueType{api.ValueTypeI32},
|
|
ResultTypes: []api.ValueType{},
|
|
},
|
|
},
|
|
|
|
{
|
|
in: func(ctx context.Context, mod api.Module, v int64) {},
|
|
out: &Function{
|
|
ParamTypes: []api.ValueType{api.ValueTypeI64},
|
|
ResultTypes: []api.ValueType{},
|
|
},
|
|
},
|
|
|
|
{
|
|
in: func(ctx context.Context, mod api.Module, v float32) {},
|
|
out: &Function{
|
|
ParamTypes: []api.ValueType{api.ValueTypeF32},
|
|
ResultTypes: []api.ValueType{},
|
|
},
|
|
},
|
|
|
|
{
|
|
in: func(ctx context.Context, mod api.Module, v float64) {},
|
|
out: &Function{
|
|
ParamTypes: []api.ValueType{api.ValueTypeF64},
|
|
ResultTypes: []api.ValueType{},
|
|
},
|
|
},
|
|
|
|
{
|
|
in: func(ctx context.Context, mod api.Module) uint32 { return 0 },
|
|
out: &Function{
|
|
ParamTypes: []api.ValueType{},
|
|
ResultTypes: []api.ValueType{api.ValueTypeI32},
|
|
},
|
|
},
|
|
|
|
{
|
|
in: func(ctx context.Context, mod api.Module) uint64 { return 0 },
|
|
out: &Function{
|
|
ParamTypes: []api.ValueType{},
|
|
ResultTypes: []api.ValueType{api.ValueTypeI64},
|
|
},
|
|
},
|
|
|
|
{
|
|
in: func(ctx context.Context, mod api.Module) int32 { return 0 },
|
|
out: &Function{
|
|
ParamTypes: []api.ValueType{},
|
|
ResultTypes: []api.ValueType{api.ValueTypeI32},
|
|
},
|
|
},
|
|
|
|
{
|
|
in: func(ctx context.Context, mod api.Module) int64 { return 0 },
|
|
out: &Function{
|
|
ParamTypes: []api.ValueType{},
|
|
ResultTypes: []api.ValueType{api.ValueTypeI64},
|
|
},
|
|
},
|
|
|
|
{
|
|
in: func(ctx context.Context, mod api.Module) float32 { return 0 },
|
|
out: &Function{
|
|
ParamTypes: []api.ValueType{},
|
|
ResultTypes: []api.ValueType{api.ValueTypeF32},
|
|
},
|
|
},
|
|
|
|
{
|
|
in: func(ctx context.Context, mod api.Module) float64 { return 0 },
|
|
out: &Function{
|
|
ParamTypes: []api.ValueType{},
|
|
ResultTypes: []api.ValueType{api.ValueTypeF64},
|
|
},
|
|
},
|
|
|
|
{
|
|
in: func(ctx context.Context, mod api.Module, _ uint32, _ uint64, _ int32, _ int64, _ float32, _ float64) (_ uint32, _ uint64, _ int32, _ int64, _ float32, _ float64) {
|
|
return
|
|
},
|
|
out: &Function{
|
|
ParamTypes: []api.ValueType{
|
|
api.ValueTypeI32, api.ValueTypeI64,
|
|
api.ValueTypeI32, api.ValueTypeI64,
|
|
api.ValueTypeF32, api.ValueTypeF64,
|
|
},
|
|
ResultTypes: []api.ValueType{
|
|
api.ValueTypeI32, api.ValueTypeI64,
|
|
api.ValueTypeI32, api.ValueTypeI64,
|
|
api.ValueTypeF32, api.ValueTypeF64,
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
t.Run(reflect.TypeOf(test.in).String(), func(t *testing.T) {
|
|
f := NewFunction(test.in)
|
|
if !bytes.Equal(test.out.ParamTypes, f.ParamTypes) {
|
|
t.Errorf("invalid parameter types: want=%v got=%v", test.out.ParamTypes, f.ParamTypes)
|
|
}
|
|
if !bytes.Equal(test.out.ResultTypes, f.ResultTypes) {
|
|
t.Errorf("invalid result types: want=%v got=%v", test.out.ResultTypes, f.ResultTypes)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestNewMemory(t *testing.T) {
|
|
if memory := NewMemory(1); len(memory.Bytes) != PageSize {
|
|
t.Error("memory buffer not aligned on page size")
|
|
}
|
|
}
|
|
|
|
func TestNewFixedMemory(t *testing.T) {
|
|
if memory := NewFixedMemory(1); len(memory.Bytes) != PageSize {
|
|
t.Error("memory buffer not aligned on page size")
|
|
} else if memory.Min != 1 {
|
|
t.Error("invalid min memory size:", memory.Min)
|
|
} else if memory.Max != 1 {
|
|
t.Error("invalid max memory size:", memory.Max)
|
|
}
|
|
}
|