github.com/ydb-platform/ydb-go-sdk/v3@v3.89.2/internal/xsync/pool_test.go (about) 1 package xsync 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/require" 7 ) 8 9 type poolMock struct { 10 items []any 11 } 12 13 func (p *poolMock) Get() (v any) { 14 if len(p.items) == 0 { 15 return nil 16 } 17 18 v, p.items = p.items[0], p.items[1:] 19 20 return v 21 } 22 23 func (p *poolMock) Put(v any) { 24 p.items = append(p.items, v) 25 } 26 27 func TestPool(t *testing.T) { 28 t.Run("Default", func(t *testing.T) { 29 p := Pool[int]{ 30 p: &poolMock{}, 31 } 32 v := p.GetOrNil() 33 require.Nil(t, v) 34 v = p.GetOrNew() 35 require.NotNil(t, v) 36 require.Equal(t, 0, *v) 37 *v = 123 38 p.Put(v) 39 v = p.GetOrNew() 40 require.NotNil(t, v) 41 require.Equal(t, 123, *v) 42 v = p.GetOrNil() 43 require.Nil(t, v) 44 }) 45 t.Run("New", func(t *testing.T) { 46 p := Pool[int]{ 47 p: &poolMock{}, 48 New: func() *int { 49 v := 123 50 51 return &v 52 }, 53 } 54 v := p.GetOrNil() 55 require.Nil(t, v) 56 v = p.GetOrNew() 57 require.NotNil(t, v) 58 require.Equal(t, 123, *v) 59 *v = 456 60 p.Put(v) 61 v = p.GetOrNew() 62 require.NotNil(t, v) 63 require.Equal(t, 456, *v) 64 v = p.GetOrNil() 65 require.Nil(t, v) 66 v = p.GetOrNew() 67 require.NotNil(t, v) 68 require.Equal(t, 123, *v) 69 }) 70 }