github.com/wasilibs/wazerox@v0.0.0-20240124024944-4923be63ab5f/internal/wasm/binary/limits_test.go (about) 1 package binary 2 3 import ( 4 "bytes" 5 "fmt" 6 "math" 7 "testing" 8 9 "github.com/wasilibs/wazerox/internal/testing/binaryencoding" 10 "github.com/wasilibs/wazerox/internal/testing/require" 11 ) 12 13 func TestLimitsType(t *testing.T) { 14 zero := uint32(0) 15 largest := uint32(math.MaxUint32) 16 17 tests := []struct { 18 name string 19 min uint32 20 max *uint32 21 shared bool 22 expected []byte 23 }{ 24 { 25 name: "min 0", 26 expected: []byte{0x0, 0}, 27 }, 28 { 29 name: "min 0, max 0", 30 max: &zero, 31 expected: []byte{0x1, 0, 0}, 32 }, 33 { 34 name: "min largest", 35 min: largest, 36 expected: []byte{0x0, 0xff, 0xff, 0xff, 0xff, 0xf}, 37 }, 38 { 39 name: "min 0, max largest", 40 max: &largest, 41 expected: []byte{0x1, 0, 0xff, 0xff, 0xff, 0xff, 0xf}, 42 }, 43 { 44 name: "min largest max largest", 45 min: largest, 46 max: &largest, 47 expected: []byte{0x1, 0xff, 0xff, 0xff, 0xff, 0xf, 0xff, 0xff, 0xff, 0xff, 0xf}, 48 }, 49 { 50 name: "min 0, shared", 51 shared: true, 52 expected: []byte{0x2, 0}, 53 }, 54 { 55 name: "min 0, max 0, shared", 56 max: &zero, 57 shared: true, 58 expected: []byte{0x3, 0, 0}, 59 }, 60 { 61 name: "min largest, shared", 62 min: largest, 63 shared: true, 64 expected: []byte{0x2, 0xff, 0xff, 0xff, 0xff, 0xf}, 65 }, 66 { 67 name: "min 0, max largest, shared", 68 max: &largest, 69 shared: true, 70 expected: []byte{0x3, 0, 0xff, 0xff, 0xff, 0xff, 0xf}, 71 }, 72 { 73 name: "min largest max largest, shared", 74 min: largest, 75 max: &largest, 76 shared: true, 77 expected: []byte{0x3, 0xff, 0xff, 0xff, 0xff, 0xf, 0xff, 0xff, 0xff, 0xff, 0xf}, 78 }, 79 } 80 81 for _, tt := range tests { 82 tc := tt 83 84 b := binaryencoding.EncodeLimitsType(tc.min, tc.max, tc.shared) 85 t.Run(fmt.Sprintf("encode - %s", tc.name), func(t *testing.T) { 86 require.Equal(t, tc.expected, b) 87 }) 88 89 t.Run(fmt.Sprintf("decode - %s", tc.name), func(t *testing.T) { 90 min, max, shared, err := decodeLimitsType(bytes.NewReader(b)) 91 require.NoError(t, err) 92 require.Equal(t, min, tc.min) 93 require.Equal(t, max, tc.max) 94 require.Equal(t, shared, tc.shared) 95 }) 96 } 97 }