github.com/wasilibs/wazerox@v0.0.0-20240124024944-4923be63ab5f/internal/testing/binaryencoding/global_test.go (about)

     1  package binaryencoding
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/wasilibs/wazerox/internal/leb128"
     7  	"github.com/wasilibs/wazerox/internal/testing/require"
     8  	"github.com/wasilibs/wazerox/internal/wasm"
     9  )
    10  
    11  func TestEncodeGlobal(t *testing.T) {
    12  	tests := []struct {
    13  		name     string
    14  		input    wasm.Global
    15  		expected []byte
    16  	}{
    17  		{
    18  			name: "const",
    19  			input: wasm.Global{
    20  				Type: wasm.GlobalType{ValType: wasm.ValueTypeI32},
    21  				Init: wasm.ConstantExpression{Opcode: wasm.OpcodeI32Const, Data: leb128.EncodeInt32(1)},
    22  			},
    23  			expected: []byte{
    24  				wasm.ValueTypeI32, 0x00, // 0 == const
    25  				wasm.OpcodeI32Const, 0x01, wasm.OpcodeEnd,
    26  			},
    27  		},
    28  		{
    29  			name: "var",
    30  			input: wasm.Global{
    31  				Type: wasm.GlobalType{ValType: wasm.ValueTypeI32, Mutable: true},
    32  				Init: wasm.ConstantExpression{Opcode: wasm.OpcodeI32Const, Data: leb128.EncodeInt32(1)},
    33  			},
    34  			expected: []byte{
    35  				wasm.ValueTypeI32, 0x01, // 1 == var
    36  				wasm.OpcodeI32Const, 0x01, wasm.OpcodeEnd,
    37  			},
    38  		},
    39  	}
    40  
    41  	for _, tt := range tests {
    42  		tc := tt
    43  
    44  		t.Run(tc.name, func(t *testing.T) {
    45  			bytes := encodeGlobal(tc.input)
    46  			require.Equal(t, tc.expected, bytes)
    47  		})
    48  	}
    49  }