MCPcopy
hub / github.com/uber-go/nilaway / TestEncoding

Function TestEncoding

util/orderedmap/orderedmap_test.go:123–159  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

121}
122
123func TestEncoding(t *testing.T) {
124 t.Parallel()
125
126 m := orderedmap.New[A, I]()
127 m.Store(A{Number: 1}, &A{})
128 m.Store(A{Number: 2}, &B{})
129
130 var buf bytes.Buffer
131 err := gob.NewEncoder(&buf).Encode(m)
132 require.NoError(t, err)
133 require.NotEmpty(t, buf.Bytes())
134
135 // Now, we decode the map. Note that the decoding logic is usually invoked by library or
136 // frameworks, meaning the map will be constructed via plain Go composite literals instead of
137 // via our manually-defined constructor (i.e., orderedmap.New). Here, we mimic this behavior
138 // and test our decoding logic for graceful handling of such cases.
139 decodedMap := &orderedmap.OrderedMap[A, I]{}
140 err = gob.NewDecoder(&buf).Decode(&decodedMap)
141 require.NoError(t, err)
142
143 // Ensure our decoded map is equal to the encoded one.
144 v, ok := decodedMap.Load(A{Number: 1})
145 require.True(t, ok)
146 require.NotNil(t, v)
147 require.IsType(t, &A{}, v)
148 v, ok = decodedMap.Load(A{Number: 2})
149 require.True(t, ok)
150 require.NotNil(t, v)
151 require.IsType(t, &B{}, v)
152
153 // Use the decoded map as a regular ordered map.
154 decodedMap.Store(A{Number: 3}, &A{Number: 4})
155 v = decodedMap.Value(A{Number: 3})
156 require.NotNil(t, v)
157 require.IsType(t, &A{}, v)
158 require.Equal(t, 4, v.(*A).Number)
159}
160
161func TestEncoding_Deterministic(t *testing.T) {
162 t.Parallel()

Callers

nothing calls this directly

Calls 9

NewFunction · 0.92
StoreMethod · 0.80
NotEmptyMethod · 0.80
ValueMethod · 0.65
NoErrorMethod · 0.45
LoadMethod · 0.45
TrueMethod · 0.45
NotNilMethod · 0.45
EqualMethod · 0.45

Tested by

no test coverage detected