github.com/onflow/flow-go@v0.35.7-crescendo-preview.23-atree-inlining/fvm/runtime/reusable_cadence_runtime_test.go (about) 1 package runtime 2 3 import ( 4 "testing" 5 6 "github.com/onflow/cadence/runtime" 7 "github.com/stretchr/testify/require" 8 ) 9 10 func TestReusableCadenceRuntimePoolUnbuffered(t *testing.T) { 11 pool := NewReusableCadenceRuntimePool(0, runtime.Config{}) 12 require.Nil(t, pool.pool) 13 14 entry := pool.Borrow(nil) 15 require.NotNil(t, entry) 16 17 pool.Return(entry) 18 19 entry2 := pool.Borrow(nil) 20 require.NotNil(t, entry2) 21 22 require.NotSame(t, entry, entry2) 23 } 24 25 func TestReusableCadenceRuntimePoolBuffered(t *testing.T) { 26 pool := NewReusableCadenceRuntimePool(100, runtime.Config{}) 27 require.NotNil(t, pool.pool) 28 29 select { 30 case <-pool.pool: 31 require.True(t, false) 32 default: 33 } 34 35 entry := pool.Borrow(nil) 36 require.NotNil(t, entry) 37 38 select { 39 case <-pool.pool: 40 require.True(t, false) 41 default: 42 } 43 44 pool.Return(entry) 45 46 entry2 := pool.Borrow(nil) 47 require.NotNil(t, entry2) 48 49 require.Same(t, entry, entry2) 50 } 51 52 func TestReusableCadenceRuntimePoolSharing(t *testing.T) { 53 pool := NewReusableCadenceRuntimePool(100, runtime.Config{}) 54 require.NotNil(t, pool.pool) 55 56 select { 57 case <-pool.pool: 58 require.True(t, false) 59 default: 60 } 61 62 var otherPool ReusableCadenceRuntimePool = pool 63 64 entry := otherPool.Borrow(nil) 65 require.NotNil(t, entry) 66 67 select { 68 case <-pool.pool: 69 require.True(t, false) 70 default: 71 } 72 73 otherPool.Return(entry) 74 75 entry2 := pool.Borrow(nil) 76 require.NotNil(t, entry2) 77 78 require.Same(t, entry, entry2) 79 }