github.com/nspcc-dev/neo-go@v0.105.2-0.20240517133400-6be757af3eba/pkg/core/transaction/bench_test.go (about) 1 package transaction 2 3 import ( 4 "encoding/base64" 5 "testing" 6 7 "github.com/nspcc-dev/neo-go/pkg/io" 8 "github.com/stretchr/testify/require" 9 ) 10 11 // Some typical transfer tx from mainnet. 12 var ( 13 benchTx []byte 14 benchTxB64 = "AK9KzFu0P5gAAAAAAIjOEgAAAAAA7jAAAAGIDdjSt7aj2J+dktSobkC9j0/CJwEAWwsCAMLrCwwUtXfkIuockX9HAVMNeEuQMxMlYkMMFIgN2NK3tqPYn52S1KhuQL2PT8InFMAfDAh0cmFuc2ZlcgwUz3bii9AGLEpHjuNVYQETGfPPpNJBYn1bUjkBQgxAUiZNae4OTSu2EOGW+6fwslLIpVsczOAR9o6R796tFf2KG+nLzs709tCQ7NELZOQ7zUzfF19ADLvH/efNT4v9LygMIQNT96/wFdPSBO7NUI9Kpn9EffTRXsS6ZJ9PqRvbenijVEFW57Mn" 15 benchTxJSON []byte 16 ) 17 18 func init() { 19 var err error 20 benchTx, err = base64.StdEncoding.DecodeString(benchTxB64) 21 if err != nil { 22 panic(err) 23 } 24 t, err := NewTransactionFromBytes(benchTx) 25 if err != nil { 26 panic(err) 27 } 28 benchTxJSON, err = t.MarshalJSON() 29 if err != nil { 30 panic(err) 31 } 32 } 33 34 func BenchmarkDecodeBinary(t *testing.B) { 35 for n := 0; n < t.N; n++ { 36 r := io.NewBinReaderFromBuf(benchTx) 37 tx := &Transaction{} 38 tx.DecodeBinary(r) 39 require.NoError(t, r.Err) 40 } 41 } 42 43 func BenchmarkDecodeJSON(t *testing.B) { 44 for n := 0; n < t.N; n++ { 45 tx := &Transaction{} 46 require.NoError(t, tx.UnmarshalJSON(benchTxJSON)) 47 } 48 } 49 50 func BenchmarkDecodeFromBytes(t *testing.B) { 51 for n := 0; n < t.N; n++ { 52 _, err := NewTransactionFromBytes(benchTx) 53 require.NoError(t, err) 54 } 55 } 56 57 func BenchmarkTransaction_Bytes(b *testing.B) { 58 tx, err := NewTransactionFromBytes(benchTx) 59 require.NoError(b, err) 60 61 b.ReportAllocs() 62 b.ResetTimer() 63 for i := 0; i < b.N; i++ { 64 _ = tx.Bytes() 65 } 66 } 67 68 func BenchmarkGetVarSize(b *testing.B) { 69 tx, err := NewTransactionFromBytes(benchTx) 70 require.NoError(b, err) 71 72 b.ResetTimer() 73 b.ReportAllocs() 74 for i := 0; i < b.N; i++ { 75 _ = io.GetVarSize(tx) 76 } 77 }