1 package binaryencoding
2
3 import (
4 "testing"
5
6 "github.com/tetratelabs/wazero/internal/testing/require"
7 "github.com/tetratelabs/wazero/internal/wasm"
8 )
9
10 func TestEncodeValTypes(t *testing.T) {
11 i32, i64, f32, f64, ext, fref := wasm.ValueTypeI32, wasm.ValueTypeI64, wasm.ValueTypeF32, wasm.ValueTypeF64, wasm.ValueTypeExternref, wasm.ValueTypeFuncref
12 tests := []struct {
13 name string
14 input []wasm.ValueType
15 expected []byte
16 }{
17 {
18 name: "empty",
19 input: []wasm.ValueType{},
20 expected: []byte{0},
21 },
22 {
23 name: "undefined",
24 input: []wasm.ValueType{0x6f},
25 expected: []byte{1, 0x6f},
26 },
27 {
28 name: "funcref",
29 input: []wasm.ValueType{fref},
30 expected: []byte{1, fref},
31 },
32 {
33 name: "externref",
34 input: []wasm.ValueType{ext},
35 expected: []byte{1, ext},
36 },
37 {
38 name: "i32",
39 input: []wasm.ValueType{i32},
40 expected: []byte{1, i32},
41 },
42 {
43 name: "i64",
44 input: []wasm.ValueType{i64},
45 expected: []byte{1, i64},
46 },
47 {
48 name: "f32",
49 input: []wasm.ValueType{f32},
50 expected: []byte{1, f32},
51 },
52 {
53 name: "f64",
54 input: []wasm.ValueType{f64},
55 expected: []byte{1, f64},
56 },
57 {
58 name: "i32i64",
59 input: []wasm.ValueType{i32, i64},
60 expected: []byte{2, i32, i64},
61 },
62 {
63 name: "i32i64f32",
64 input: []wasm.ValueType{i32, i64, f32},
65 expected: []byte{3, i32, i64, f32},
66 },
67 {
68 name: "i32i64f32f64",
69 input: []wasm.ValueType{i32, i64, f32, f64},
70 expected: []byte{4, i32, i64, f32, f64},
71 },
72 {
73 name: "i32i64f32f64i32",
74 input: []wasm.ValueType{i32, i64, f32, f64, i32},
75 expected: []byte{5, i32, i64, f32, f64, i32},
76 },
77 {
78 name: "i32i64f32f64i32i64",
79 input: []wasm.ValueType{i32, i64, f32, f64, i32, i64},
80 expected: []byte{6, i32, i64, f32, f64, i32, i64},
81 },
82 {
83 name: "i32i64f32f64i32i64f32",
84 input: []wasm.ValueType{i32, i64, f32, f64, i32, i64, f32},
85 expected: []byte{7, i32, i64, f32, f64, i32, i64, f32},
86 },
87 {
88 name: "i32i64f32f64i32i64f32f64",
89 input: []wasm.ValueType{i32, i64, f32, f64, i32, i64, f32, f64},
90 expected: []byte{8, i32, i64, f32, f64, i32, i64, f32, f64},
91 },
92 {
93 name: "i32i64f32f64i32i64f32f64i32",
94 input: []wasm.ValueType{i32, i64, f32, f64, i32, i64, f32, f64, i32},
95 expected: []byte{9, i32, i64, f32, f64, i32, i64, f32, f64, i32},
96 },
97 {
98 name: "i32i64f32f64i32i64f32f64i32i64",
99 input: []wasm.ValueType{i32, i64, f32, f64, i32, i64, f32, f64, i32, i64},
100 expected: []byte{10, i32, i64, f32, f64, i32, i64, f32, f64, i32, i64},
101 },
102 }
103
104 for _, tt := range tests {
105 tc := tt
106
107 t.Run(tc.name, func(t *testing.T) {
108 bytes := EncodeValTypes(tc.input)
109 require.Equal(t, tc.expected, bytes)
110 })
111 }
112 }
113
View as plain text