github.com/nspcc-dev/neo-go@v0.105.2-0.20240517133400-6be757af3eba/pkg/vm/bench_test.go (about) 1 package vm 2 3 import ( 4 "encoding/base64" 5 "strconv" 6 "testing" 7 8 "github.com/nspcc-dev/neo-go/pkg/vm/opcode" 9 "github.com/stretchr/testify/require" 10 ) 11 12 func benchScript(t *testing.B, script []byte) { 13 for n := 0; n < t.N; n++ { 14 t.StopTimer() 15 vm := load(script) 16 t.StartTimer() 17 err := vm.Run() 18 t.StopTimer() 19 require.NoError(t, err) 20 t.StartTimer() 21 } 22 } 23 24 // Shared as is by @ixje once upon a time (compiled from Python). 25 func BenchmarkScriptFibonacci(t *testing.B) { 26 var script = []byte{87, 5, 0, 16, 112, 17, 113, 105, 104, 18, 192, 114, 16, 115, 34, 28, 104, 105, 158, 116, 106, 108, 75, 27 217, 48, 38, 5, 139, 34, 5, 207, 34, 3, 114, 105, 112, 108, 113, 107, 17, 158, 115, 107, 12, 2, 94, 1, 28 219, 33, 181, 36, 222, 106, 64} 29 benchScript(t, script) 30 } 31 32 func BenchmarkScriptNestedRefCount(t *testing.B) { 33 b64script := "whBNEcARTRHAVgEB/gGdYBFNEU0SwFMSwFhKJPNFUUVFRQ==" 34 script, err := base64.StdEncoding.DecodeString(b64script) 35 require.NoError(t, err) 36 benchScript(t, script) 37 } 38 39 func BenchmarkScriptPushPop(t *testing.B) { 40 for _, i := range []int{4, 16, 128, 1024} { 41 t.Run(strconv.Itoa(i), func(t *testing.B) { 42 var script = make([]byte, i*2) 43 for p := 0; p < i; p++ { 44 script[p] = byte(opcode.PUSH1) 45 script[i+p] = byte(opcode.DROP) 46 } 47 benchScript(t, script) 48 }) 49 } 50 } 51 52 func BenchmarkIsSignatureContract(t *testing.B) { 53 b64script := "DCED2eixa9myLTNF1tTN4xvhw+HRYVMuPQzOy5Xs4utYM25BVuezJw==" 54 script, err := base64.StdEncoding.DecodeString(b64script) 55 require.NoError(t, err) 56 for n := 0; n < t.N; n++ { 57 _ = IsSignatureContract(script) 58 } 59 }