Skip to content

Commit 4bd3420

Browse files
committed
fix(go):adjustments to the list serializer
1 parent 8ecdbe1 commit 4bd3420

File tree

11 files changed

+1253
-864
lines changed

11 files changed

+1253
-864
lines changed

go/fory/fory.go

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -372,22 +372,13 @@ func (f *Fory) writeValue(buffer *ByteBuffer, value reflect.Value, serializer Se
372372
value = value.Elem()
373373
}
374374

375-
// For array types, pre-convert the value
376-
// so the corresponding slice serializer can be reused
377-
if value.Kind() == reflect.Array {
378-
length := value.Len()
379-
sliceType := reflect.SliceOf(value.Type().Elem())
380-
slice := reflect.MakeSlice(sliceType, length, length)
381-
reflect.Copy(slice, value)
382-
value = slice
383-
}
384-
385375
if serializer != nil {
386376
return serializer.Write(f, buffer, value)
387377
}
388378

389379
// Get type information for the value
390380
typeInfo, err := f.typeResolver.getTypeInfo(value, true)
381+
391382
if err != nil {
392383
return fmt.Errorf("cannot get typeinfo for value %v: %v", value, err)
393384
}

go/fory/fory_test.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ func commonSlice() []interface{} {
6666
return []interface{}{
6767
(&[100]bool{})[:],
6868
(&[100]byte{})[:],
69-
// (&[100]int8{})[:],
69+
(&[100]int8{})[:],
7070
(&[100]int16{})[:],
7171
(&[100]int32{})[:],
7272
(&[100]int64{})[:],
@@ -106,13 +106,12 @@ func commonArray() []interface{} {
106106
return []interface{}{
107107
[100]bool{false, true, true},
108108
[100]byte{1, 2, 3},
109-
// [100]int8{1, 2, 3},
109+
[100]int8{1, 2, 3},
110110
[100]int16{1, 2, 3},
111111
[100]int32{1, 2, 3},
112112
[100]int64{1, 2, 3},
113113
[100]float32{1, 2, 3},
114114
[100]float64{1, 2, 3},
115-
[100]string{"str1", "str1"},
116115
}
117116
}
118117

@@ -162,7 +161,7 @@ func TestSerializeSlice(t *testing.T) {
162161
for _, referenceTracking := range []bool{false, true} {
163162
fory := NewFory(referenceTracking)
164163
serde(t, fory, []byte{0, 1, MaxUint8})
165-
// serde(t, fory, []int8{MinInt8, -1, 0, 1, MaxInt8})
164+
serde(t, fory, []int8{MinInt8, -1, 0, 1, MaxInt8})
166165
serde(t, fory, []int16{MinInt16, -1, 0, 1, MaxInt16})
167166
serde(t, fory, []int32{MinInt32, -1, 0, 1, MaxInt32})
168167
serde(t, fory, []int64{MinInt64, -1, 0, 1, MaxInt64})

go/fory/fory_xlang_test.go

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -113,34 +113,27 @@ func TestXLangSerializer(t *testing.T) {
113113
require.Nil(t, fory_.Serialize(buffer, set, nil))
114114

115115
// test primitive arrays
116-
require.Nil(t, fory_.Serialize(buffer, []bool{true, false}, nil))
117-
require.Nil(t, fory_.Serialize(buffer, []int16{1, fory.MaxInt16}, nil))
118-
require.Nil(t, fory_.Serialize(buffer, []int32{1, fory.MaxInt32}, nil))
119-
require.Nil(t, fory_.Serialize(buffer, []int64{1, fory.MaxInt64}, nil))
120-
require.Nil(t, fory_.Serialize(buffer, []float32{1.0, 2.0}, nil))
121-
require.Nil(t, fory_.Serialize(buffer, []float64{1.0, 2.0}, nil))
116+
require.Nil(t, fory_.Serialize(buffer, [2]bool{true, false}, nil))
117+
require.Nil(t, fory_.Serialize(buffer, [2]int16{1, fory.MaxInt16}, nil))
118+
require.Nil(t, fory_.Serialize(buffer, [2]int32{1, fory.MaxInt32}, nil))
119+
require.Nil(t, fory_.Serialize(buffer, [2]int64{1, fory.MaxInt64}, nil))
120+
require.Nil(t, fory_.Serialize(buffer, [2]float32{1.0, 2.0}, nil))
121+
require.Nil(t, fory_.Serialize(buffer, [2]float64{1.0, 2.0}, nil))
122122

123123
check := func(buf *fory.ByteBuffer) {
124124
values := []interface{}{
125125
true, false, int64(-1), int8(fory.MaxInt8), int8(fory.MinInt8), int16(fory.MaxInt16), int16(fory.MinInt16),
126126
int32(fory.MaxInt32), int32(fory.MinInt32), int64(fory.MaxInt64), int64(fory.MinInt64), float32(-1),
127127
float64(-1), "str", day, instant, list, dict, set,
128-
[]bool{true, false}, []int16{1, fory.MaxInt16}, []int32{1, fory.MaxInt32},
129-
[]int64{1, fory.MaxInt64}, []float32{1.0, 2.0}, []float64{1.0, 2.0},
128+
[2]bool{true, false}, [2]int16{1, fory.MaxInt16}, [2]int32{1, fory.MaxInt32},
129+
[2]int64{1, fory.MaxInt64}, [2]float32{1.0, 2.0}, [2]float64{1.0, 2.0},
130130
}
131131
for index, value := range values {
132-
var newValue interface{}
133-
require.Nil(t, fory_.Deserialize(buf, &newValue, nil))
134-
switch reflect.ValueOf(value).Kind() {
135-
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
136-
require.Equal(t, reflect.ValueOf(value).Int(),
137-
reflect.ValueOf(newValue).Int(), fmt.Sprintf("index %d", index))
138-
case reflect.Float32, reflect.Float64:
139-
require.Equal(t, reflect.ValueOf(value).Float(),
140-
reflect.ValueOf(newValue).Float(), fmt.Sprintf("index %d", index))
141-
default:
142-
require.Equal(t, value, newValue, fmt.Sprintf("index %d", index))
143-
}
132+
typ := reflect.TypeOf(value)
133+
holder := reflect.New(typ)
134+
require.Nil(t, fory_.Deserialize(buf, holder.Interface(), nil))
135+
got := holder.Elem().Interface()
136+
require.Equal(t, value, got, fmt.Sprintf("index %d", index))
144137
}
145138
}
146139
check(buffer)
@@ -260,7 +253,6 @@ func TestSerializeComplexStruct(t *testing.T) {
260253
obj.F10 = 1 / 3.0
261254
obj.F11 = [2]int16{1, 2}
262255
obj.F12 = []int16{-1, 4}
263-
264256
structRoundBack(t, fory_, obj, "test_serialize_complex_struct")
265257
}
266258

0 commit comments

Comments
 (0)