Files
wazero/internal/wazeroir/signature_test.go
Anuraag Agrawal 714368bcea Remove threads support (#1487)
Signed-off-by: Anuraag Agrawal <anuraaga@gmail.com>
2023-05-22 12:18:36 +10:00

124 lines
3.7 KiB
Go

package wazeroir
import (
"testing"
"github.com/tetratelabs/wazero/internal/testing/require"
"github.com/tetratelabs/wazero/internal/wasm"
)
func TestCompiler_wasmOpcodeSignature(t *testing.T) {
tests := []struct {
name string
body []byte
exp *signature
}{
{
name: "i32.trunc_sat_f32_s",
body: []byte{wasm.OpcodeMiscPrefix, wasm.OpcodeMiscI32TruncSatF32S},
exp: signature_F32_I32,
},
{
name: "i32.trunc_sat_f32_u",
body: []byte{wasm.OpcodeMiscPrefix, wasm.OpcodeMiscI32TruncSatF32U},
exp: signature_F32_I32,
},
{
name: "i32.trunc_sat_f64_s",
body: []byte{wasm.OpcodeMiscPrefix, wasm.OpcodeMiscI32TruncSatF64S},
exp: signature_F64_I32,
},
{
name: "i32.trunc_sat_f64_u",
body: []byte{wasm.OpcodeMiscPrefix, wasm.OpcodeMiscI32TruncSatF64U},
exp: signature_F64_I32,
},
{
name: "i64.trunc_sat_f32_s",
body: []byte{wasm.OpcodeMiscPrefix, wasm.OpcodeMiscI64TruncSatF32S},
exp: signature_F32_I64,
},
{
name: "i64.trunc_sat_f32_u",
body: []byte{wasm.OpcodeMiscPrefix, wasm.OpcodeMiscI64TruncSatF32U},
exp: signature_F32_I64,
},
{
name: "i64.trunc_sat_f64_s",
body: []byte{wasm.OpcodeMiscPrefix, wasm.OpcodeMiscI64TruncSatF64S},
exp: signature_F64_I64,
},
{
name: "i64.trunc_sat_f64_u",
body: []byte{wasm.OpcodeMiscPrefix, wasm.OpcodeMiscI64TruncSatF64U},
exp: signature_F64_I64,
},
{
name: "memory.init",
body: []byte{wasm.OpcodeMiscPrefix, wasm.OpcodeMiscMemoryInit},
exp: signature_I32I32I32_None,
},
{
name: "data.drop",
body: []byte{wasm.OpcodeMiscPrefix, wasm.OpcodeMiscDataDrop},
exp: signature_None_None,
},
{
name: "memory.copy",
body: []byte{wasm.OpcodeMiscPrefix, wasm.OpcodeMiscMemoryCopy},
exp: signature_I32I32I32_None,
},
{
name: "memory.fill",
body: []byte{wasm.OpcodeMiscPrefix, wasm.OpcodeMiscMemoryFill},
exp: signature_I32I32I32_None,
},
{
name: "table.init",
body: []byte{wasm.OpcodeMiscPrefix, wasm.OpcodeMiscTableInit},
exp: signature_I32I32I32_None,
},
{
name: "elem.drop",
body: []byte{wasm.OpcodeMiscPrefix, wasm.OpcodeMiscElemDrop},
exp: signature_None_None,
},
{
name: "table.copy",
body: []byte{wasm.OpcodeMiscPrefix, wasm.OpcodeMiscTableCopy},
exp: signature_I32I32I32_None,
},
}
for _, tt := range tests {
tc := tt
t.Run(tc.name, func(t *testing.T) {
c := &Compiler{body: tc.body}
actual, err := c.wasmOpcodeSignature(tc.body[0], 0)
require.NoError(t, err)
require.Equal(t, tc.exp, actual)
})
}
}
func Test_funcTypeToIRSignatures(t *testing.T) {
f := &funcTypeToIRSignatures{
wasmTypes: []wasm.FunctionType{v_v, i32_i32, v_f64f64},
directCalls: make([]*signature, 3),
indirectCalls: make([]*signature, 3),
}
require.Equal(t, &signature{in: make([]UnsignedType, 0), out: make([]UnsignedType, 0)}, f.get(0, false))
require.Equal(t, &signature{in: []UnsignedType{UnsignedTypeI32}, out: make([]UnsignedType, 0)}, f.get(0, true))
require.NotNil(t, f.directCalls[0])
require.NotNil(t, f.indirectCalls[0])
require.Equal(t, &signature{in: []UnsignedType{UnsignedTypeI32}, out: []UnsignedType{UnsignedTypeI32}}, f.get(1, false))
require.Equal(t, &signature{in: []UnsignedType{UnsignedTypeI32, UnsignedTypeI32}, out: []UnsignedType{UnsignedTypeI32}}, f.get(1, true))
require.NotNil(t, f.directCalls[1])
require.NotNil(t, f.indirectCalls[1])
require.Equal(t, &signature{in: make([]UnsignedType, 0), out: []UnsignedType{UnsignedTypeF64, UnsignedTypeF64}}, f.get(2, false))
require.Equal(t, &signature{in: []UnsignedType{UnsignedTypeI32}, out: []UnsignedType{UnsignedTypeF64, UnsignedTypeF64}}, f.get(2, true))
require.NotNil(t, f.directCalls[2])
require.NotNil(t, f.indirectCalls[2])
}