@@ -67,36 +67,6 @@ func TestGet(t *testing.T) {
6767 require .True (t , ok )
6868 })
6969
70- t .Run ("the key is a pointer" , func (t * testing.T ) {
71- m := orderedmap .New [* string , int ]()
72-
73- notExistingKey := toPtr ("not-existing-key" )
74- require .Equal (t , 0 , m .Get (notExistingKey ))
75- v , ok := m .GetOk (notExistingKey )
76- require .Zero (t , v )
77- require .False (t , ok )
78-
79- existingKey := toPtr ("existing-key" )
80- m .Set (existingKey , 1 )
81- require .Equal (t , 1 , m .Get (existingKey ))
82- v , ok = m .GetOk (existingKey )
83- require .Equal (t , 1 , v )
84- require .True (t , ok )
85-
86- // Using a different pointer with the same value returns no result
87- require .Equal (t , 0 , m .Get (toPtr ("existing-key" )))
88- v , ok = m .GetOk (toPtr ("existing-key" ))
89- require .Zero (t , v )
90- require .False (t , ok )
91-
92- // test empty key
93- m .Set (nil , 2 )
94- require .Equal (t , 2 , m .Get (nil ))
95- v , ok = m .GetOk (nil )
96- require .Equal (t , 2 , v )
97- require .True (t , ok )
98- })
99-
10070 t .Run ("custom comparable key" , func (t * testing.T ) {
10171 type A struct {
10272 b []byte
@@ -345,6 +315,47 @@ func TestClone(t *testing.T) {
345315 })
346316}
347317
318+ func TestMarshallJSON (t * testing.T ) {
319+ t .Run ("empty map" , func (t * testing.T ) {
320+ m := orderedmap .New [string , int ]()
321+ mapJSON , err := m .MarshalJSON ()
322+ require .NoError (t , err )
323+ require .JSONEq (t , `{}` , string (mapJSON ))
324+ })
325+ t .Run ("respect the order of insertion" , func (t * testing.T ) {
326+ m := orderedmap .New [string , int ]()
327+ m .Set ("a" , 1 )
328+ m .Set ("b" , 2 )
329+ m .Set ("c" , 3 )
330+ mapJSON , err := m .MarshalJSON ()
331+ require .NoError (t , err )
332+ require .JSONEq (t , `{"a":1,"b":2,"c":3}` , string (mapJSON ))
333+ })
334+ t .Run ("can serialize int keys" , func (t * testing.T ) {
335+ m := orderedmap .New [int , bool ]()
336+ m .Set (1 , true )
337+ m .Set (2 , true )
338+ m .Set (3 , true )
339+ mapJSON , err := m .MarshalJSON ()
340+ require .NoError (t , err )
341+ require .JSONEq (t , `{"1":true,"2":true,"3":true}` , string (mapJSON ))
342+ })
343+ t .Run ("can serialize pointer keys" , func (t * testing.T ) {
344+ m := orderedmap.NewWithConversionFunc [* int , bool , int ](func (i * int ) int {
345+ if i == nil {
346+ return 0
347+ }
348+ return * i
349+ })
350+ m .Set (toPtr (1 ), true )
351+ m .Set (toPtr (2 ), true )
352+ m .Set (toPtr (3 ), true )
353+ mapJSON , err := m .MarshalJSON ()
354+ require .NoError (t , err )
355+ require .JSONEq (t , `{"1":true,"2":true,"3":true}` , string (mapJSON ))
356+ })
357+ }
358+
348359func toPtr [V any ](v V ) * V {
349360 return & v
350361}
0 commit comments