@@ -1157,48 +1157,48 @@ func TestDecodeErrorMultipleTypes(t *testing.T) {
1157
1157
1158
1158
// Issue 24075
1159
1159
func TestMarshalFloatMap (t * testing.T ) {
1160
- var m = map [float64 ]string {
1161
- math .NaN (): "a" ,
1162
- math .NaN (): "b" ,
1163
- math .NaN (): "c" ,
1160
+ nan1 := math .NaN ()
1161
+ nan2 := math .Float64frombits (math .Float64bits (nan1 ) ^ 1 ) // A different NaN in the same class.
1162
+
1163
+ in := map [float64 ]string {
1164
+ nan1 : "a" ,
1165
+ nan1 : "b" ,
1166
+ nan2 : "c" ,
1164
1167
}
1165
1168
1166
1169
var b bytes.Buffer
1167
1170
enc := NewEncoder (& b )
1168
- err := enc .Encode (m )
1169
- if err != nil {
1170
- t .Errorf ("Encode() error: %v" , err )
1171
+ if err := enc .Encode (in ); err != nil {
1172
+ t .Errorf ("Encode : %v" , err )
1171
1173
}
1172
1174
1173
- var result = map [float64 ]string {}
1175
+ out : = map [float64 ]string {}
1174
1176
dec := NewDecoder (& b )
1175
- err = dec .Decode (& result )
1176
-
1177
- if err != nil {
1178
- t .Fatalf ("decoder fail: %v" , err )
1177
+ if err := dec .Decode (& out ); err != nil {
1178
+ t .Fatalf ("Decode : %v" , err )
1179
1179
}
1180
1180
1181
- // NaN cannot compare
1182
-
1183
- readMap := func (m map [float64 ]string ) ([]uint64 , []string ) {
1184
- var (
1185
- mk = []uint64 {}
1186
- mv = []string {}
1187
- )
1181
+ type mapEntry struct {
1182
+ keyBits uint64
1183
+ value string
1184
+ }
1185
+ readMap := func (m map [float64 ]string ) (entries []mapEntry ) {
1188
1186
for k , v := range m {
1189
- mk = append (mk , math .Float64bits (k )) // conversion NaN to a uint64
1190
- mv = append (mv , v )
1187
+ entries = append (entries , mapEntry {math .Float64bits (k ), v })
1191
1188
}
1192
- sort .Slice (mk , func (i , j int ) bool {
1193
- return mk [i ] < mk [j ]
1189
+ sort .Slice (entries , func (i , j int ) bool {
1190
+ ei , ej := entries [i ], entries [j ]
1191
+ if ei .keyBits != ej .keyBits {
1192
+ return ei .keyBits < ej .keyBits
1193
+ }
1194
+ return ei .value < ej .value
1194
1195
})
1195
- sort .Strings (mv )
1196
- return mk , mv
1196
+ return entries
1197
1197
}
1198
- mk , mv := readMap (m )
1199
- resultk , resultv := readMap (result )
1200
1198
1201
- if ! reflect .DeepEqual (mk , resultk ) || ! reflect .DeepEqual (mv , resultv ) {
1202
- t .Fatalf ("decoder fail: \n %v %v \n %v %v" , mk , mv , resultk , resultv )
1199
+ got := readMap (out )
1200
+ want := readMap (in )
1201
+ if ! reflect .DeepEqual (got , want ) {
1202
+ t .Fatalf ("\n Encode: %v\n Decode: %v" , want , got )
1203
1203
}
1204
1204
}
0 commit comments