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  }