github.com/nspcc-dev/neo-go@v0.105.2-0.20240517133400-6be757af3eba/pkg/vm/ref_counter_test.go (about) 1 package vm 2 3 import ( 4 "testing" 5 6 "github.com/nspcc-dev/neo-go/pkg/vm/stackitem" 7 "github.com/stretchr/testify/require" 8 ) 9 10 func TestRefCounter_Add(t *testing.T) { 11 r := newRefCounter() 12 13 require.Equal(t, 0, int(*r)) 14 15 r.Add(stackitem.Null{}) 16 require.Equal(t, 1, int(*r)) 17 18 r.Add(stackitem.Null{}) 19 require.Equal(t, 2, int(*r)) // count scalar items twice 20 21 arr := stackitem.NewArray([]stackitem.Item{stackitem.NewByteArray([]byte{1}), stackitem.NewBool(false)}) 22 r.Add(arr) 23 require.Equal(t, 5, int(*r)) // array + 2 elements 24 25 r.Add(arr) 26 require.Equal(t, 6, int(*r)) // count only array 27 28 r.Remove(arr) 29 require.Equal(t, 5, int(*r)) 30 31 r.Remove(arr) 32 require.Equal(t, 2, int(*r)) 33 34 m := stackitem.NewMap() 35 m.Add(stackitem.NewByteArray([]byte("some")), stackitem.NewBool(false)) 36 r.Add(m) 37 require.Equal(t, 5, int(*r)) // map + key + value 38 39 r.Add(m) 40 require.Equal(t, 6, int(*r)) // map only 41 42 r.Remove(m) 43 require.Equal(t, 5, int(*r)) 44 45 r.Remove(m) 46 require.Equal(t, 2, int(*r)) 47 } 48 49 func BenchmarkRefCounter_Add(b *testing.B) { 50 a := stackitem.NewArray(nil) 51 rc := newRefCounter() 52 53 b.ResetTimer() 54 for i := 0; i < b.N; i++ { 55 rc.Add(a) 56 } 57 } 58 59 func BenchmarkRefCounter_AddRemove(b *testing.B) { 60 a := stackitem.NewArray([]stackitem.Item{}) 61 rc := newRefCounter() 62 63 b.ResetTimer() 64 for i := 0; i < b.N; i++ { 65 rc.Add(a) 66 rc.Remove(a) 67 } 68 }