github.com/ydb-platform/ydb-go-sdk/v3@v3.89.2/internal/xsync/map_test.go (about) 1 package xsync 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/require" 7 ) 8 9 func TestMap(t *testing.T) { 10 var m Map[int, string] 11 v, ok := m.Get(1) 12 require.False(t, ok) 13 m.Set(1, "one") 14 require.NotPanics(t, func() { 15 v = m.Must(1) 16 require.Equal(t, "one", v) 17 }) 18 require.Panics(t, func() { 19 v = m.Must(2) 20 }) 21 require.Panics(t, func() { 22 m.m.Store(2, 2) 23 v = m.Must(2) 24 }) 25 m.m.Delete(2) 26 v, ok = m.Extract(2) 27 require.False(t, ok) 28 require.Equal(t, "", v) 29 m.Set(2, "two") 30 v, ok = m.Get(2) 31 require.True(t, ok) 32 require.Equal(t, "two", v) 33 v, ok = m.Extract(1) 34 require.True(t, ok) 35 require.Equal(t, "one", v) 36 require.False(t, m.Has(1)) 37 m.Set(3, "three") 38 v, ok = m.Get(3) 39 require.True(t, ok) 40 require.Equal(t, "three", v) 41 exp := map[int]string{ 42 2: "two", 43 3: "three", 44 } 45 require.Equal(t, 2, m.Len()) 46 var unexp map[int]string 47 m.Range(func(key int, value string) bool { 48 if v, ok := exp[key]; ok && v == value { 49 delete(exp, key) 50 } else { 51 unexp[key] = value 52 } 53 54 return true 55 }) 56 require.Empty(t, exp) 57 require.Empty(t, unexp) 58 m.Clear() 59 require.Zero(t, m.Len()) 60 empty := true 61 m.Range(func(key int, value string) bool { 62 empty = false 63 64 return false 65 }) 66 require.True(t, empty) 67 }