mirror of
https://github.com/nspcc-dev/neo-go.git
synced 2025-05-06 19:55:10 +00:00
vm: embed reference counter in compound items
``` name old time/op new time/op delta RefCounter_Add-8 44.8ns ± 4% 11.7ns ± 3% -73.94% (p=0.000 n=10+10) ``` Signed-off-by: Evgeniy Stratonikov <evgeniy@nspcc.ru>
This commit is contained in:
parent
dc9287bf5c
commit
4f98ec2f53
7 changed files with 99 additions and 55 deletions
|
@ -10,24 +10,34 @@ import (
|
|||
func TestRefCounter_Add(t *testing.T) {
|
||||
r := newRefCounter()
|
||||
|
||||
require.Equal(t, 0, r.size)
|
||||
require.Equal(t, 0, int(*r))
|
||||
|
||||
r.Add(stackitem.Null{})
|
||||
require.Equal(t, 1, r.size)
|
||||
require.Equal(t, 1, int(*r))
|
||||
|
||||
r.Add(stackitem.Null{})
|
||||
require.Equal(t, 2, r.size) // count scalar items twice
|
||||
require.Equal(t, 2, int(*r)) // count scalar items twice
|
||||
|
||||
arr := stackitem.NewArray([]stackitem.Item{stackitem.NewByteArray([]byte{1}), stackitem.NewBool(false)})
|
||||
r.Add(arr)
|
||||
require.Equal(t, 5, r.size) // array + 2 elements
|
||||
require.Equal(t, 5, int(*r)) // array + 2 elements
|
||||
|
||||
r.Add(arr)
|
||||
require.Equal(t, 6, r.size) // count only array
|
||||
require.Equal(t, 6, int(*r)) // count only array
|
||||
|
||||
r.Remove(arr)
|
||||
require.Equal(t, 5, r.size)
|
||||
require.Equal(t, 5, int(*r))
|
||||
|
||||
r.Remove(arr)
|
||||
require.Equal(t, 2, r.size)
|
||||
require.Equal(t, 2, int(*r))
|
||||
}
|
||||
|
||||
func BenchmarkRefCounter_Add(b *testing.B) {
|
||||
a := stackitem.NewArray(nil)
|
||||
rc := newRefCounter()
|
||||
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
rc.Add(a)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue